Dépannage des problèmes courants de configuration de sécurité de RabbitMQ
Apprenez à dépanner et à résoudre les défis courants de configuration de sécurité dans RabbitMQ. Ce guide couvre le diagnostic et la résolution des problèmes liés aux permissions utilisateur granulaires, aux erreurs critiques de configuration SSL/TLS et aux échecs d'authentification de connexion. Améliorez la posture de sécurité de votre broker grâce à des commandes pratiques et des vérifications de configuration.
Résolution des problèmes courants de configuration de sécurité RabbitMQ
Les problèmes de configuration de sécurité RabbitMQ se manifestent généralement par des échecs de connexion, des erreurs 403 ACCESS_REFUSED ou des négociations TLS qui ne se terminent jamais. La solution dépend de l'étape où la connexion échoue : authentification, accès au vhost, permissions des ressources ou validation du certificat.
Utilisez ce guide pour vérifier ces couches dans l'ordre. Il se concentre sur les commandes RabbitMQ pratiques et les points de configuration que vous pouvez vérifier sans deviner.
Problèmes d'autorisations et de contrôle d'accès des utilisateurs
Le problème de sécurité le plus courant provient d'autorisations utilisateur incorrectes. RabbitMQ utilise un système de contrôle d'accès granulaire basé sur des balises et des autorisations de ressources (configurer, écrire, lire) pour les échanges, les files d'attente et les liaisons.
Diagnostic des autorisations manquantes
Lorsqu'une application ne peut pas se connecter, publier ou consommer des messages, la première étape consiste à vérifier les autorisations effectives de l'utilisateur. Vous pouvez utiliser l'interface du plugin de gestion RabbitMQ ou l'outil en ligne de commande rabbitmqctl.
Symptômes courants :
- La connexion s'ouvre, mais les opérations de publication ou de consommation échouent avec
ACCESS_REFUSED. - L'utilisateur peut publier sur un échange existant mais ne peut pas déclarer une file d'attente.
- Le même nom d'utilisateur fonctionne dans un vhost mais échoue dans un autre.
Vérification des balises et autorisations utilisateur via rabbitmqctl
Pour vérifier les balises et autorisations de l'utilisateur, utilisez :
rabbitmqctl list_users
# Recherchez l'utilisateur et ses balises (par exemple, administrator, management)
rabbitmqctl list_user_permissions nom_utilisateur
# Affiche les vhosts où l'utilisateur a des autorisations de configurer, écrire et lire.
rabbitmqctl list_permissions -p /votre_vhost
# Affiche les autorisations pour tous les utilisateurs sur un vhost.
Résolution des lacunes d'autorisations
Les autorisations doivent être définies au niveau du Virtual Host (vhost) et souvent affinées au niveau de la Ressource (échange/file d'attente).
Exemple : accorder à un utilisateur d'application l'accès aux ressources commençant par app. sur /app_vhost :
rabbitmqctl set_permissions -p /app_vhost app_user "^app\\." "^app\\." "^app\\."
Les autorisations RabbitMQ sont des expressions régulières dans cet ordre : configurer, écrire, lire. En production, évitez ".*" sauf si l'application possède vraiment chaque ressource dans ce vhost. Si app_user publie uniquement sur orders_exchange et consomme depuis processing_queue, accordez l'accès en écriture au nom de l'échange et l'accès en lecture au nom de la file d'attente.
La balise administrator est destinée aux utilisateurs de gestion RabbitMQ, pas aux applications normales. Elle accorde un accès de gestion étendu et ne doit pas être utilisée comme raccourci pour corriger les autorisations des applications.
Échecs d'authentification
Les échecs d'authentification se produisent lorsque le courtier rejette les informations d'identification de l'utilisateur (nom d'utilisateur/mot de passe) avant même le début des vérifications de contrôle d'accès.
Causes courantes
- Mots de passe non correspondants : Le secret du client ne correspond pas au mot de passe stocké dans RabbitMQ.
- Mauvais nom d'utilisateur ou vhost dans l'URI : Les URL AMQP incluent le chemin du vhost, donc
/est encodé en%2F. - Mécanisme d'authentification incompatible : Par exemple, un flux de certificat client TLS peut nécessiter le mécanisme
EXTERNAL, tandis que les clients nom d'utilisateur/mot de passe utilisent généralement des mécanismes tels quePLAINouAMQPLAIN.
Dépannage de l'authentification à l'aide des journaux
Les échecs d'authentification sont enregistrés par le courtier. Sur de nombreux packages Linux, les journaux se trouvent dans /var/log/rabbitmq/ ; les déploiements conteneurisés envoient généralement les journaux vers stdout ou le pilote de journalisation du conteneur.
Recherchez des lignes contenant :
=ERROR REPORT==== AAAA-MM-JJ HH:MM:SS ===
Error in server: {auth_failed,<<...>>}
Réinitialisation ou changement de mots de passe
Si les informations d'identification sont perdues ou suspectées d'être compromises, réinitialisez-les immédiatement :
# Changez le mot de passe pour 'app_user'
rabbitmqctl change_password app_user nouveau_mot_de_passe_sécurisé
Erreurs de configuration SSL/TLS et de certificat
Lors de l'application d'une communication sécurisée (AMQPS ou WebSockets sécurisés), les problèmes de certificat et de magasin de confiance sont des maux de tête courants de configuration de sécurité.
Symptômes d'échec SSL/TLS
- Les tentatives de connexion du client expirent ou sont immédiatement rejetées.
- Le client signale des erreurs telles que
SSL handshake failed,certificate verify failedouunknown ca.
Vérifications clés de la configuration
A. Vérification du certificat serveur
Assurez-vous que la chaîne de certificats présentée par le serveur RabbitMQ est valide et approuvée par le client.
- Vérifiez la configuration du serveur : Vérifiez que les fichiers de certificat (
.pemou similaire) et de clé corrects sont référencés dans le fichierrabbitmq.confpour l'écouteur :# Exemple d'extrait rabbitmq.conf listeners.ssl.default = 5671 ssl_options.cacertfile = /chemin/vers/ca_certificate.pem ssl_options.certfile = /chemin/vers/server_certificate.pem ssl_options.keyfile = /chemin/vers/server_key.pem - Vérifiez le magasin de confiance du client : Si le certificat du serveur est auto-signé ou signé par une AC privée, le client doit approuver ce certificat d'AC.
B. Incompatibilités de chiffrement et de protocole
Si le client et le serveur ne peuvent pas s'accorder sur une suite de chiffrement ou une version TLS commune (par exemple, le client ne prend en charge que TLS 1.2, mais le serveur est configuré uniquement pour TLS 1.3), la négociation échoue.
Définissez explicitement les versions TLS prises en charge dans rabbitmq.conf si vous avez besoin d'une application stricte du protocole. Sinon, RabbitMQ dépend de la prise en charge TLS fournie par l'environnement d'exécution Erlang/OTP sous-jacent et votre version de RabbitMQ.
# Définissez explicitement les versions autorisées (par exemple, forcer TLS 1.2 et 1.3)
ssl_options.versions.tcp = [tlsv1.2, tlsv1.3]
C. Authentification par certificat client (mTLS)
Si les clients doivent présenter des certificats :
- Définissez
ssl_options.verify = verify_peer. - Définissez
ssl_options.fail_if_no_peer_cert = truelorsqu'un certificat client est requis. - Configurez
ssl_options.cacertfileoussl_options.cacerts_pathpour que RabbitMQ approuve l'AC qui a signé les certificats clients. - Configurez l'authentification basée sur les certificats, généralement avec le plugin
rabbitmq_auth_mechanism_ssl, et assurez-vous que l'identité du certificat correspond à un nom d'utilisateur RabbitMQ attendu.
Problèmes d'accès au Virtual Host
Les utilisateurs ne peuvent accéder qu'aux ressources des vhosts auxquels ils ont explicitement accès.
Le vhost par défaut (/)
Si un utilisateur est créé mais n'est attribué à aucun vhost, il ne peut pas se connecter ni opérer. Si vous utilisez le vhost par défaut (/), assurez-vous que l'utilisateur y a des autorisations.
Utilisez l'interface de gestion ou rabbitmqctl pour lister les vhosts où l'utilisateur a des autorisations :
rabbitmqctl list_user_vhosts nom_utilisateur
Si l'utilisateur a besoin d'accéder à un vhost nommé billing_vhost, assurez-vous que l'utilisateur est lié :
rabbitmqctl set_permissions -p billing_vhost app_user "^billing\\." "^billing\\." "^billing\\."
À retenir
Vérifiez les échecs de sécurité RabbitMQ dans l'ordre : écouteur et TLS d'abord, puis informations d'identification, puis accès au vhost, puis autorisations de configurer/écrire/lire. Cet ordre vous évite de réécrire les autorisations alors que le vrai problème est une mauvaise URL AMQP, une AC non approuvée ou une autorisation de vhost manquante.