Administration des utilisateurs et des permissions RabbitMQ : Guide en ligne de commande
Maîtrisez les commandes `rabbitmqctl` pour une gestion robuste des utilisateurs et des permissions dans RabbitMQ. Ce guide complet fournit des instructions étape par étape pour créer de nouveaux utilisateurs, attribuer des rôles d'administrateur ou d'application à l'aide de balises, définir des permissions granulaires sur les hôtes virtuels (lecture/écriture/configuration) et révoquer l'accès en toute sécurité, garantissant une administration contrôlée via la ligne de commande.
Administration des utilisateurs et des permissions RabbitMQ : Guide en ligne de commande
Les permissions RabbitMQ sont faciles à configurer presque correctement. Un utilisateur peut exister et être toujours incapable de publier. Un utilisateur peut avoir la balise management et n'avoir aucun accès au vhost de l'application. Une regex trop large peut accidentellement permettre à un service de créer des files d'attente qu'il ne devrait que consommer. La plupart des problèmes de permissions proviennent de la confusion entre trois concepts distincts : les utilisateurs, les balises et les permissions des vhosts.
Ce guide utilise rabbitmqctl pour le flux de travail courant d'administration des utilisateurs : créer des utilisateurs, attribuer des balises, définir des permissions de vhost, vérifier l'accès, faire pivoter les mots de passe et supprimer proprement l'accès.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
- RabbitMQ Server installé : Le broker doit être en cours d'exécution.
- Accès à
rabbitmqctl: Vous devez disposer d'un accès administratif au nœud ou au cluster. Les commandes sont généralement exécutées sur un nœud RabbitMQ, bien que l'utilisation de l'interface CLI à distance soit possible lorsque l'environnement est configuré pour cela. - Le nom correct du vhost : Les permissions sont limitées par hôte virtuel.
/,/prodetprodne sont pas interchangeables.
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 broker, 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 attribuer un mot de passe initial.
Pour créer un utilisateur nommé api_user avec un mot de passe initial :
rabbitmqctl add_user api_user 'remplacer-par-un-long-mot-de-passe-aleatoire'
Évitez de placer de vrais mots de passe de production dans l'historique du shell. Dans les systèmes automatisés, préférez votre gestionnaire de secrets et le mécanisme de provisionnement que votre plateforme utilise déjà.
3. Modifier les balises utilisateur (rôles)
Les balises utilisateur définissent des rôles prédéfinis qui accordent des capacités administratives spécifiques. Les balises les plus courantes sont administrator, policymaker et management.
administrator: peut gérer les utilisateurs, les permissions, les vhosts, les politiques et les paramètres à l'échelle du cluster.policymaker: peut gérer les politiques et les paramètres pour les vhosts auxquels l'utilisateur a accès.management: peut se connecter à l'interface utilisateur/API de gestion, mais les permissions du vhost contrôlent toujours les ressources que l'utilisateur peut utiliser.monitoring: peut consulter les informations de gestion, utile pour les comptes d'observabilité.
Voir les balises actuelles
Utilisez list_user_tags pour voir les rôles actuels :
rabbitmqctl list_user_tags api_user
Définir des balises
Pour attribuer la balise management à api_user :
rabbitmqctl set_user_tags api_user management
set_user_tags remplace la liste des balises de l'utilisateur par exactement les balises que vous fournissez. Pour donner à la fois les balises administrateur et policymaker, incluez les deux dans la même commande :
rabbitmqctl set_user_tags api_user administrator policymaker
Supprimer des balises
Pour supprimer toutes les balises d'un utilisateur :
rabbitmqctl set_user_tags api_user
Certaines versions de RabbitMQ fournissent également clear_user_tags. Vérifiez rabbitmqctl help clear_user_tags sur votre version installée avant de l'utiliser dans un script.
4. Changer le mot de passe d'un utilisateur
Si les informations d'identification doivent être renouvelées, utilisez la commande change_password :
rabbitmqctl change_password api_user newsecurepass123
5. Supprimer un utilisateur
Pour supprimer complètement un utilisateur et révoquer tout accès associé :
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 administrateur.
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 a un vhost racine nommé /.
1. Lister les vhosts
Tout d'abord, identifiez les vhosts disponibles :
rabbitmqctl list_vhosts
2. Définir les permissions pour un utilisateur sur un vhost
La commande set_permissions est la plus critique pour la sécurité des applications. Elle accorde à un utilisateur les droits de configurer, lire ou écrire des ressources dans un vhost spécifique.
Syntaxe : rabbitmqctl set_permissions -p <vhost> <utilisateur> <configurer> <écrire> <lire>
Les valeurs de permission sont des expressions régulières. .* signifie tous les noms de ressources. ^$ signifie aucun nom de ressource.
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 sur /prod_vhost :
rabbitmqctl set_permissions -p /prod_vhost app_prod "^.*" "^.*" "^.*"
| Permission | Signification | Utilisation typique |
|---|---|---|
| Configurer | Créer, supprimer ou modifier des files d'attente, des échanges et des liaisons correspondant à la regex. | Déployeurs ou applications qui déclarent leur propre topologie. |
| Écrire | Publier sur des échanges correspondants. | Producteurs. |
| Lire | Consommer à partir de files d'attente correspondantes. | Consommateurs. |
Exemple : Restreindre un utilisateur à la publication uniquement
Un modèle courant pour les producteurs de flux est de les restreindre à l'écriture uniquement :
# L'utilisateur 'publisher' peut écrire mais ne peut pas configurer ni lire de messages dans /analytics_vhost
rabbitmqctl set_permissions -p /analytics_vhost publisher "^$" "^events\\." "^$"
Cet exemple permet de publier sur des échanges dont les noms commencent par events.. Il ne permet pas à l'utilisateur de configurer la topologie ni de consommer des messages.
Exemple : Restreindre un consommateur
# Peut lire à partir de files d'attente commençant par worker. mais ne peut pas publier ni configurer
rabbitmqctl set_permissions -p /jobs worker_consumer "^$" "^$" "^worker\\."
Les permissions par regex sont puissantes, mais elles sont aussi faciles à élargir excessivement. Si vos files d'attente sont nommées prod.orders.created et staging.orders.created dans le même vhost, une regex comme .*orders.* pourrait couvrir plus que prévu. Des vhosts séparés sont généralement plus propres que des limites de regex complexes.
3. Effacer les permissions
Pour supprimer complètement toutes les permissions qu'un utilisateur a 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 sur un vhost :
rabbitmqctl list_permissions -p /prod_vhost
Pour voir toutes les permissions attribuées à un utilisateur sur tous les vhosts :
rabbitmqctl list_user_permissions app_prod
Meilleures pratiques pour l'administration des utilisateurs
- Utiliser le moindre privilège : les producteurs ont généralement besoin d'une permission d'écriture, les consommateurs d'une permission de lecture, et seuls les propriétaires de topologie ont besoin d'une permission de configuration.
- Utiliser des vhosts dédiés : séparez les environnements et les locataires avec des vhosts au lieu d'essayer de tout résoudre avec des regex.
- Gérer
guestdélibérément : l'utilisateurguestpar défaut est limité à localhost par défaut. De nombreuses équipes de production le suppriment après avoir créé un véritable compte administrateur. - Scripter l'état souhaité : conservez la configuration des utilisateurs, des vhosts et des permissions dans l'automatisation du déploiement afin qu'un broker reconstruit ne dépende pas de la mémoire.
- Vérifier après les modifications : exécutez
list_users,list_permissionsetlist_user_permissionsaprès chaque modification en production.
Une configuration pratique d'application ressemble souvent à ceci :
rabbitmqctl add_vhost /orders
rabbitmqctl add_user orders_publisher 'remplacer-par-secret'
rabbitmqctl add_user orders_worker 'remplacer-par-secret'
rabbitmqctl set_permissions -p /orders orders_publisher "^$" "^orders\\." "^$"
rabbitmqctl set_permissions -p /orders orders_worker "^$" "^$" "^orders\\."
rabbitmqctl list_user_permissions orders_publisher
rabbitmqctl list_user_permissions orders_worker
Cela maintient les informations d'identification de publication et de consommation séparées. Si un mot de passe de worker fuit, il ne peut pas publier de nouveaux messages. Si un mot de passe de publisher fuit, il ne peut pas vider les files d'attente. Cette séparation est simple, mais c'est l'une des habitudes de sécurité RabbitMQ les plus utiles.