RabbitMQ-Benutzer und -Berechtigungen verwalten: Eine Kommandozeilen-Anleitung
Meistern Sie die `rabbitmqctl`-Befehle für eine robuste Benutzer- und Berechtigungsverwaltung in RabbitMQ. Diese umfassende Anleitung bietet Schritt-für-Schritt-Anleitungen zum Erstellen neuer Benutzer, Zuweisen von Administrator- oder Anwendungsrollen mithilfe von Tags, Festlegen feingranularer virtueller Host-Berechtigungen (Lesen/Schreiben/Konfigurieren) und sicheren Entziehen von Zugriffen – für eine kontrollierte Verwaltung über die Kommandozeile.
RabbitMQ-Benutzer und -Berechtigungen verwalten: Eine Kommandozeilen-Anleitung
RabbitMQ-Berechtigungen sind leicht fast richtig einzustellen. Ein Benutzer kann existieren und dennoch nicht veröffentlichen können. Ein Benutzer kann das management-Tag haben und dennoch keinen Zugriff auf den Anwendungs-Vhost haben. Ein zu weit gefasster regulärer Ausdruck kann versehentlich einem Dienst erlauben, Warteschlangen zu erstellen, von denen er nur konsumieren sollte. Die meisten Berechtigungsprobleme entstehen durch die Verwechslung von drei separaten Konzepten: Benutzer, Tags und Vhost-Berechtigungen.
Diese Anleitung verwendet rabbitmqctl für den üblichen Benutzerverwaltungs-Workflow: Benutzer erstellen, Tags zuweisen, Vhost-Berechtigungen festlegen, Zugriff überprüfen, Passwörter rotieren und Zugriff sauber entfernen.
Voraussetzungen
Stellen Sie vor dem Fortfahren sicher, dass Folgendes vorhanden ist:
- RabbitMQ-Server installiert: Der Broker muss ausgeführt werden.
rabbitmqctl-Zugriff: Sie benötigen administrativen Zugriff auf den Knoten oder Cluster. Befehle werden üblicherweise auf einem RabbitMQ-Knoten ausgeführt, obwohl die entfernte CLI-Nutzung möglich ist, wenn die Umgebung dafür konfiguriert ist.- Der korrekte Vhost-Name: Berechtigungen sind pro virtuellem Host begrenzt.
/,/produndprodsind nicht austauschbar.
Benutzerverwaltung mit rabbitmqctl
Das rabbitmqctl-Tool verwendet die user_*-Befehlsfamilie für alle benutzerbezogenen Operationen. Es ist entscheidend zu verstehen, dass RabbitMQ-Benutzer von Betriebssystem-Benutzern zu unterscheiden sind.
1. Vorhandene Benutzer auflisten
Um zu sehen, wer aktuell Zugriff auf den Broker hat, verwenden Sie den Befehl list_users:
rabbitmqctl list_users
Beispielausgabe:
Listing users ...
user: guest tags: [administrator]
user: app_prod tags: [policymaker]
2. Einen neuen Benutzer erstellen
Beim Einrichten eines neuen Dienstkontos oder Administrators müssen Sie den Benutzer erstellen und ein anfängliches Passwort zuweisen.
Um einen Benutzer namens api_user mit einem anfänglichen Passwort zu erstellen:
rabbitmqctl add_user api_user 'replace-with-a-long-random-password'
Vermeiden Sie es, echte Produktionspasswörter in der Shell-Historie zu hinterlegen. Bevorzugen Sie in automatisierten Systemen Ihren Secret Manager und den Bereitstellungsmechanismus, den Ihre Plattform bereits verwendet.
3. Benutzer-Tags (Rollen) ändern
Benutzer-Tags definieren vordefinierte Rollen, die spezifische administrative Fähigkeiten gewähren. Die häufigsten Tags sind administrator, policymaker und management.
administrator: kann Benutzer, Berechtigungen, Vhosts, Richtlinien und clusterweite Einstellungen verwalten.policymaker: kann Richtlinien und Parameter für Vhosts verwalten, auf die der Benutzer Zugriff hat.management: kann sich in die Verwaltungsoberfläche/API einloggen, aber Vhost-Berechtigungen steuern weiterhin, welche Ressourcen der Benutzer nutzen kann.monitoring: kann Verwaltungsinformationen anzeigen, nützlich für Observability-Konten.
Aktuelle Tags anzeigen
Verwenden Sie list_user_tags, um die aktuellen Rollen zu sehen:
rabbitmqctl list_user_tags api_user
Tags setzen
Um das management-Tag an api_user zuzuweisen:
rabbitmqctl set_user_tags api_user management
set_user_tags ersetzt die Tag-Liste des Benutzers genau mit den von Ihnen angegebenen Tags. Um sowohl Administrator- als auch Policymaker-Tags zu vergeben, geben Sie beide im selben Befehl an:
rabbitmqctl set_user_tags api_user administrator policymaker
Tags entfernen
Um alle Tags von einem Benutzer zu entfernen:
rabbitmqctl set_user_tags api_user
Einige RabbitMQ-Versionen bieten auch clear_user_tags an. Überprüfen Sie rabbitmqctl help clear_user_tags auf Ihrer installierten Version, bevor Sie es in Skripten verwenden.
4. Passwort eines Benutzers ändern
Wenn Anmeldeinformationen rotiert werden müssen, verwenden Sie den Befehl change_password:
rabbitmqctl change_password api_user newsecurepass123
5. Einen Benutzer löschen
Um einen Benutzer vollständig zu entfernen und alle zugehörigen Zugriffe zu widerrufen:
rabbitmqctl delete_user api_user
Warnung: Das Löschen des
guest-Benutzers wird in Produktionsumgebungen aus Sicherheitsgründen generell empfohlen, erfordert jedoch die vorherige Erstellung eines neuen administrativen Benutzers.
Verwaltung von virtuellen Host-Berechtigungen
Berechtigungen in RabbitMQ werden auf Basis eines virtuellen Hosts (vhost) definiert. Ein Vhost fungiert als Namensraum für Warteschlangen, Austauschpunkte und Bindungen. Standardmäßig hat RabbitMQ einen Root-Vhost namens /.
1. Vhosts auflisten
Identifizieren Sie zunächst die verfügbaren Vhosts:
rabbitmqctl list_vhosts
2. Berechtigungen für einen Benutzer auf einem VHost setzen
Der Befehl set_permissions ist der wichtigste für die Anwendungssicherheit. Er gewährt einem Benutzer Rechte zum Konfigurieren, Lesen oder Schreiben von Ressourcen innerhalb eines bestimmten Vhosts.
Syntax: rabbitmqctl set_permissions -p <vhost> <benutzer> <configure> <write> <read>
Berechtigungswerte sind reguläre Ausdrücke. .* bedeutet alle Ressourcennamen. ^$ bedeutet keine Ressourcennamen.
Beispiel: Vollzugriff auf einen bestimmten VHost gewähren
Wenn wir möchten, dass app_prod vollen CRUD-Zugriff (Konfigurieren, Lesen, Schreiben) nur auf den /prod_vhost hat:
rabbitmqctl set_permissions -p /prod_vhost app_prod "^.*" "^.*" "^.*"
| Berechtigung | Bedeutung | Typische Verwendung |
|---|---|---|
| Konfigurieren | Erstellen, Löschen oder Ändern von Warteschlangen, Austauschpunkten und Bindungen, die dem regulären Ausdruck entsprechen. | Bereitsteller oder Apps, die ihre eigene Topologie deklarieren. |
| Schreiben | Veröffentlichen an passende Austauschpunkte. | Produzenten. |
| Lesen | Konsumieren von passenden Warteschlangen. | Konsumenten. |
Beispiel: Einen Benutzer auf reines Veröffentlichen beschränken
Ein häufiges Muster für Firehose-Produzenten ist die Beschränkung auf reines Schreiben:
# Benutzer 'publisher' kann schreiben, aber nicht konfigurieren oder Nachrichten in /analytics_vhost lesen
rabbitmqctl set_permissions -p /analytics_vhost publisher "^$" "^events\\." "^$"
Dieses Beispiel erlaubt das Veröffentlichen an Austauschpunkte, deren Namen mit events. beginnen. Es erlaubt dem Benutzer nicht, Topologie zu konfigurieren oder Nachrichten zu konsumieren.
Beispiel: Einen Konsumenten beschränken
# Kann von Warteschlangen lesen, die mit worker. beginnen, aber nicht veröffentlichen oder konfigurieren
rabbitmqctl set_permissions -p /jobs worker_consumer "^$" "^$" "^worker\\."
Regex-Berechtigungen sind mächtig, aber sie sind auch leicht zu weit gefasst. Wenn Ihre Warteschlangen im selben Vhost prod.orders.created und staging.orders.created heißen, könnte ein Regex wie .*orders.* mehr abdecken als beabsichtigt. Separate Vhosts sind normalerweise sauberer als komplizierte Regex-Grenzen.
3. Berechtigungen löschen
Um alle Berechtigungen, die ein Benutzer auf einem bestimmten Vhost hat, vollständig zu entfernen, verwenden Sie clear_permissions:
rabbitmqctl clear_permissions -p /prod_vhost app_prod
4. Benutzerberechtigungen auflisten
Um die auf einem Vhost gewährten Berechtigungen zu überprüfen:
rabbitmqctl list_permissions -p /prod_vhost
Um alle einem Benutzer über Vhosts hinweg zugewiesenen Berechtigungen zu sehen:
rabbitmqctl list_user_permissions app_prod
Best Practices für die Benutzerverwaltung
- Prinzip der geringsten Privilegien anwenden: Produzenten benötigen normalerweise Schreibberechtigung, Konsumenten normalerweise Leseberechtigung, und nur Topologie-Eigentümer benötigen Konfigurationsberechtigung.
- Dedizierte Vhosts verwenden: Trennen Sie Umgebungen und Mandanten mit Vhosts, anstatt alles mit Regex zu lösen.
guestbewusst behandeln: Der standardmäßigeguest-Benutzer ist standardmäßig auf localhost beschränkt. Viele Produktionsteams löschen ihn, nachdem sie ein echtes Administratorkonto erstellt haben.- Gewünschten Zustand skripten: Halten Sie die Einrichtung von Benutzern, Vhosts und Berechtigungen in der Bereitstellungsautomatisierung fest, damit ein neu aufgebauter Broker nicht vom Gedächtnis abhängt.
- Nach Änderungen überprüfen: Führen Sie nach jeder Änderung in der Produktion
list_users,list_permissionsundlist_user_permissionsaus.
Ein praktisches Anwendungssetup sieht oft so aus:
rabbitmqctl add_vhost /orders
rabbitmqctl add_user orders_publisher 'replace-with-secret'
rabbitmqctl add_user orders_worker 'replace-with-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
Das hält die Anmeldeinformationen für Veröffentlichen und Konsumieren getrennt. Wenn ein Worker-Passwort durchsickert, kann es keine neuen Nachrichten veröffentlichen. Wenn ein Publisher-Passwort durchsickert, kann es keine Warteschlangen leeren. Diese Trennung ist einfach, aber eine der nützlichsten RabbitMQ-Sicherheitsgewohnheiten.