Administration des utilisateurs et des permissions RabbitMQ : Un guide en ligne de commande
La gestion des utilisateurs et la définition des droits d'accès sont des aspects fondamentaux de la sécurisation de toute infrastructure de courtier de messages. RabbitMQ, un puissant courtier de messages, fournit des mécanismes robustes pour l'authentification et l'autorisation des utilisateurs, principalement gérés via l'utilitaire en ligne de commande rabbitmqctl. Ce guide se concentre exclusivement sur l'utilisation de rabbitmqctl pour maîtriser l'administration des utilisateurs, couvrant tout, de la création et de l'attribution de rôles à la définition détaillée des permissions sur les hôtes virtuels.
Des permissions correctement configurées garantissent que les applications et les administrateurs interagissent avec le courtier uniquement là où c'est nécessaire, minimisant ainsi les risques de sécurité et la confusion opérationnelle. En tirant parti de ces outils en ligne de commande, vous pouvez scripter et automatiser efficacement des configurations de sécurité complexes.
Prérequis
Avant de poursuivre, assurez-vous de disposer des éléments suivants :
- Serveur RabbitMQ installé : Le courtier doit être en cours d'exécution.
- Accès à
rabbitmqctl: Vous devez disposer des permissions nécessaires (généralement des privilèges d'administrateur) pour exécuter des commandes sur l'instance RabbitMQ en cours d'exécution. Les commandes sont généralement exécutées depuis la machine hébergeant le serveur RabbitMQ.
Gestion des utilisateurs avec rabbitmqctl
L'outil rabbitmqctl utilise la famille de commandes user_* pour toutes les opérations liées aux utilisateurs. Il est crucial de comprendre que les utilisateurs RabbitMQ sont distincts des utilisateurs du système d'exploitation.
1. Lister les utilisateurs existants
Pour voir qui a actuellement accès au courtier, utilisez la commande list_users :
rabbitmqctl list_users
Exemple de sortie :
Listing users ...
user: guest tags: [administrator]
user: app_prod tags: [policymaker]
2. Créer un nouvel utilisateur
Lors de la configuration d'un nouveau compte de service ou d'un administrateur, vous devez créer l'utilisateur et lui attribuer un mot de passe initial.
Pour créer un utilisateur nommé api_user avec le mot de passe securepass :
rabbitmqctl add_user api_user securepass
3. Modifier les tags utilisateur (rôles)
Les tags utilisateur définissent des rôles prédéfinis qui accordent des capacités administratives spécifiques. Les tags les plus courants sont administrator, policymaker et management.
administrator: Peut modifier les utilisateurs, les permissions, les vhosts et définir les paramètres du cluster.policymaker: Peut définir des politiques (par exemple, pour la haute disponibilité ou le TTL des messages).management: Peut utiliser l'interface du plugin de gestion (s'il est installé).
Afficher les tags actuels
Utilisez list_user_tags pour voir les rôles actuels :
rabbitmqctl list_user_tags api_user
Définir ou écraser les tags
Pour attribuer le tag management à api_user :
rabbitmqctl set_user_tags api_user management
Pour ajouter le tag policymaker en plus des tags existants, spécifiez tous les tags souhaités :
rabbitmqctl set_user_tags api_user administrator policymaker
Supprimer des tags
Pour supprimer un tag spécifique :
rabbitmqctl clear_user_tags api_user policymaker
4. Modifier le mot de passe d'un utilisateur
Si les identifiants doivent être renouvelés, utilisez la commande change_password :
rabbitmqctl change_password api_user newsecurepass123
5. Supprimer un utilisateur
Pour supprimer complètement un utilisateur et révoquer tous les accès associés :
rabbitmqctl delete_user api_user
Avertissement : La suppression de l'utilisateur
guestest généralement recommandée dans les environnements de production pour des raisons de sécurité, bien qu'elle nécessite d'abord la création d'un nouvel utilisateur administratif.
Gestion des permissions des hôtes virtuels
Les permissions dans RabbitMQ sont définies par hôte virtuel (vhost). Un vhost agit comme un espace de noms pour les files d'attente, les échanges et les liaisons. Par défaut, RabbitMQ dispose d'un vhost racine nommé /.
1. Lister les Vhosts
Identifiez d'abord les vhosts disponibles :
rabbitmqctl list_vhosts
2. Définir les permissions d'un utilisateur sur un Vhost
La commande set_permissions est la plus critique pour la sécurité des applications. Elle accorde à un utilisateur des droits pour configurer, lire ou écrire des ressources au sein d'un vhost spécifique.
Syntaxe : set_permissions <vhost> <user> <conf> <read> <write>
Les valeurs des permissions sont des expressions régulières (.* signifie toutes les ressources).
Exemple : Accorder un accès complet à un Vhost spécifique
Si nous voulons que app_prod ait un accès CRUD complet (Configurer, Lire, Écrire) uniquement au /prod_vhost :
rabbitmqctl set_permissions -p /prod_vhost app_prod "^.*" "^.*" "^.*"
| Permission | Signification (Regex) | Description |
|---|---|---|
Configurer (conf) |
.* |
Peut créer/supprimer des échanges, des files d'attente, des liaisons et définir les paramètres du vhost. |
Lire (read) |
.* |
Peut consommer des messages et obtenir le statut des files d'attente/échanges. |
Écrire (write) |
.* |
Peut publier des messages et créer des liaisons. |
Exemple : Restreindre un utilisateur à la publication uniquement
Un modèle courant pour les producteurs de type 'firehose' est de les restreindre à l'écriture uniquement :
# User 'publisher' can write but cannot configure or read messages in /analytics_vhost
rabbitmqctl set_permissions -p /analytics_vhost publisher "^$" "^$" "^.*$"
3. Effacer les permissions
Pour supprimer complètement toutes les permissions qu'un utilisateur possède sur un vhost spécifique, utilisez clear_permissions :
rabbitmqctl clear_permissions -p /prod_vhost app_prod
4. Lister les permissions d'un utilisateur
Pour vérifier les permissions accordées à un utilisateur spécifique sur un vhost :
rabbitmqctl list_permissions -p /prod_vhost app_prod
Bonnes pratiques pour l'administration des utilisateurs
- Principe du moindre privilège (PoLP) : Accordez toujours le minimum de permissions nécessaires au fonctionnement de l'application ou de l'utilisateur. Évitez d'utiliser le tag
administratorsauf si absolument nécessaire. - Vhosts dédiés : Utilisez des hôtes virtuels différents pour des environnements différents (par exemple,
dev,staging,prod) et contrôlez strictement l'accès entre eux. - Évitez l'utilisateur Guest : Pour des raisons de sécurité, l'utilisateur
guestpar défaut doit être désactivé ou restreint (il n'a par défaut accès qu'àlocalhost). - Scripting : Puisque toutes ces commandes sont idempotentes et basées sur la ligne de commande, scriptez les routines de configuration et de suppression des utilisateurs pour un déploiement cohérent.
En maîtrisant ces commandes rabbitmqctl, vous obtenez un contrôle granulaire et scriptable sur qui peut accéder à vos ressources de courtier de messages, ce qui conduit à un déploiement RabbitMQ plus sécurisé et plus gérable.