Administration des utilisateurs et des autorisations RabbitMQ : un guide en ligne de commande

Maîtrisez les commandes `rabbitmqctl` pour une gestion robuste des utilisateurs et des autorisations dans RabbitMQ. Ce guide complet fournit des instructions étape par étape sur la création de nouveaux utilisateurs, l'attribution de rôles d'administrateur ou d'application à l'aide de balises, la définition d'autorisations de vhost granulaires (lecture/écriture/configuration) et la révocation sécurisée des accès, garantissant une administration contrôlée via la ligne de commande.

47 vues

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 :

  1. Serveur RabbitMQ installé : Le courtier doit être en cours d'exécution.
  2. 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 guest est 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 administrator sauf 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 guest par 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.