RabbitMQ-Benutzer und -Berechtigungen verwalten: Ein Befehlszeilen-Handbuch
Die Verwaltung von Benutzern und die Definition von Zugriffsrechten sind ein grundlegender Aspekt für die Sicherung jeder Message-Broker-Infrastruktur. RabbitMQ, ein leistungsstarker Message-Broker, bietet robuste Mechanismen für die Benutzerauthentifizierung und -autorisierung, die hauptsächlich über das Befehlszeilendienstprogramm rabbitmqctl verwaltet werden. Dieser Leitfaden konzentriert sich ausschließlich auf die Verwendung von rabbitmqctl, um die Benutzerverwaltung zu beherrschen. Er behandelt alles von der Erstellung und Rollenzuweisung bis hin zur detaillierten Berechtigungseinstellung über virtuelle Hosts hinweg.
Ordnungsgemäß konfigurierte Berechtigungen stellen sicher, dass Anwendungen und Administratoren nur dort mit dem Broker interagieren, wo es notwendig ist, wodurch Sicherheitsrisiken und operative Verwirrung minimiert werden. Durch die Nutzung dieser Befehlszeilentools können Sie komplexe Sicherheitseinrichtungen effizient skripten und automatisieren.
Voraussetzungen
Bevor Sie fortfahren, stellen Sie sicher, dass Sie Folgendes haben:
- RabbitMQ-Server installiert: Der Broker muss laufen.
rabbitmqctl-Zugriff: Sie müssen über die notwendigen Berechtigungen (in der Regel Administratorrechte) verfügen, um Befehle gegen die laufende RabbitMQ-Instanz auszuführen. Befehle werden typischerweise von der Maschine ausgeführt, auf der der RabbitMQ-Server gehostet wird.
Benutzer mit rabbitmqctl verwalten
Das Tool rabbitmqctl verwendet die Befehlsfamilie user_* für alle benutzerbezogenen Operationen. Es ist entscheidend zu verstehen, dass RabbitMQ-Benutzer sich von Betriebssystembenutzern unterscheiden.
1. Bestehende Benutzer auflisten
Um zu sehen, wer derzeit 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 Anfangspasswort zuweisen.
Um einen Benutzer namens api_user mit dem Passwort securepass zu erstellen:
rabbitmqctl add_user api_user securepass
3. Benutzer-Tags (Rollen) ändern
Benutzer-Tags definieren vordefinierte Rollen, die spezifische administrative Fähigkeiten verleihen. Die gängigsten Tags sind administrator, policymaker und management.
administrator: Kann Benutzer, Berechtigungen, vhosts ändern und Cluster-Parameter setzen.policymaker: Kann Richtlinien (z.B. für Hochverfügbarkeit oder Nachrichten-TTL) festlegen.management: Kann die Oberfläche des Management Plugins verwenden (falls installiert).
Aktuelle Tags anzeigen
Verwenden Sie list_user_tags, um aktuelle Rollen anzuzeigen:
rabbitmqctl list_user_tags api_user
Tags setzen oder überschreiben
Um api_user den management-Tag zuzuweisen:
rabbitmqctl set_user_tags api_user management
Um den policymaker-Tag zusätzlich zu bestehenden Tags hinzuzufügen, verwenden Sie den add_tag-Befehl:
rabbitmqctl set_user_tags api_user administrator policymaker
Tags entfernen
Um einen spezifischen Tag zu entfernen:
rabbitmqctl clear_user_tags api_user policymaker
4. Das 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 im Allgemeinen empfohlen, erfordert jedoch zunächst die Erstellung eines neuen administrativen Benutzers.
Berechtigungen für virtuelle Hosts verwalten
Berechtigungen in RabbitMQ werden pro virtuellem Host (vhost) definiert. Ein vhost fungiert als Namespace für Warteschlangen, Exchanges und Bindings. 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 festlegen
Der Befehl set_permissions ist für die Anwendungssicherheit am kritischsten. Er gewährt einem Benutzer Rechte zum Konfigurieren, Lesen oder Schreiben von Ressourcen innerhalb eines spezifischen Vhosts.
Syntax: set_permissions <vhost> <user> <conf> <read> <write>
Berechtigungswerte sind reguläre Ausdrücke (.* bedeutet alle Ressourcen).
Beispiel: Vollständigen Zugriff auf einen spezifischen VHost gewähren
Wenn wir möchten, dass app_prod vollständigen CRUD-Zugriff (Konfigurieren, Lesen, Schreiben) nur auf den /prod_vhost hat:
rabbitmqctl set_permissions -p /prod_vhost app_prod "^.*" "^.*" "^.*"
| Berechtigung | Bedeutung (Regex) | Beschreibung |
|---|---|---|
Konfigurieren (conf) |
.* |
Kann Exchanges, Warteschlangen, Bindings erstellen/löschen und Vhost-Parameter setzen. |
Lesen (read) |
.* |
Kann Nachrichten konsumieren und den Status von Warteschlangen/Exchanges abrufen. |
Schreiben (write) |
.* |
Kann Nachrichten veröffentlichen und Bindings erstellen. |
Beispiel: Einen Benutzer auf das Veröffentlichen beschränken
Ein gängiges Muster für Firehose-Produzenten ist die Beschränkung auf das reine Schreiben:
# Benutzer 'publisher' kann Nachrichten im /analytics_vhost schreiben, aber nicht konfigurieren oder lesen
rabbitmqctl set_permissions -p /analytics_vhost publisher "^$" "^$" "^.*$"
3. Berechtigungen löschen
Um alle Berechtigungen, die ein Benutzer auf einem spezifischen Vhost hat, vollständig zu entfernen, verwenden Sie clear_permissions:
rabbitmqctl clear_permissions -p /prod_vhost app_prod
4. Benutzerberechtigungen auflisten
Um die einem spezifischen Benutzer auf einem Vhost gewährten Berechtigungen zu überprüfen:
rabbitmqctl list_permissions -p /prod_vhost app_prod
Best Practices für die Benutzerverwaltung
- Prinzip der geringsten Rechte (PoLP): Gewähren Sie immer die minimal notwendigen Berechtigungen, damit die Anwendung oder der Benutzer funktionieren kann. Vermeiden Sie die Verwendung des
administrator-Tags, es sei denn, dies ist absolut erforderlich. - Dedizierte Vhosts: Verwenden Sie verschiedene virtuelle Hosts für verschiedene Umgebungen (z.B.
dev,staging,prod) und kontrollieren Sie den Zugriff zwischen ihnen streng. - Gastbenutzer vermeiden: Aus Sicherheitsgründen sollte der standardmäßige
guest-Benutzer deaktiviert oder eingeschränkt werden (er hat standardmäßig nur Zugriff auflocalhost). - Skripting: Da alle diese Befehle idempotent und Befehlszeilen-basiert sind, sollten Sie Benutzer-Setup- und Teardown-Routinen für eine konsistente Bereitstellung skripten.
Durch die Beherrschung dieser rabbitmqctl-Befehle erhalten Sie eine granulare, skriptbare Kontrolle darüber, wer auf Ihre Message-Broker-Ressourcen zugreifen kann, was zu einer sichereren und besser verwaltbaren RabbitMQ-Bereitstellung führt.