Gestione di utenti e permessi RabbitMQ: una guida da riga di comando

Padroneggia i comandi `rabbitmqctl` per una gestione robusta di utenti e permessi in RabbitMQ. Questa guida completa fornisce istruzioni passo passo sulla creazione di nuovi utenti, l'assegnazione di ruoli di amministratore o applicazione tramite tag, l'impostazione di permessi granulari per host virtuali (lettura/scrittura/configurazione) e la revoca sicura degli accessi, garantendo un'amministrazione controllata tramite riga di comando.

51 visualizzazioni

Gestione di Utenti e Permessi RabbitMQ: Una Guida da Linea di Comando

La gestione degli utenti e la definizione dei diritti di accesso è un aspetto fondamentale per la sicurezza di qualsiasi infrastruttura di broker di messaggi. RabbitMQ, un potente broker di messaggi, offre robusti meccanismi per l'autenticazione e l'autorizzazione degli utenti, gestiti principalmente tramite l'utility da linea di comando rabbitmqctl. Questa guida si concentra esclusivamente sull'uso di rabbitmqctl per padroneggiare l'amministrazione degli utenti, coprendo ogni aspetto dalla creazione e assegnazione di ruoli alla definizione dettagliata dei permessi tra i virtual host.

Permessi configurati correttamente assicurano che applicazioni e amministratori interagiscano con il broker solo quando necessario, minimizzando i rischi di sicurezza e la confusione operativa. Sfruttando questi strumenti da linea di comando, è possibile scriptare e automatizzare configurazioni di sicurezza complesse in modo efficiente.

Prerequisiti

Prima di procedere, assicurati di avere quanto segue:

  1. Server RabbitMQ Installato: Il broker deve essere in esecuzione.
  2. Accesso a rabbitmqctl: Devi avere i permessi necessari (di solito privilegi di amministratore) per eseguire comandi sull'istanza RabbitMQ in esecuzione. I comandi vengono tipicamente eseguiti dalla macchina che ospita il server RabbitMQ.

Gestione degli Utenti con rabbitmqctl

Lo strumento rabbitmqctl utilizza la famiglia di comandi user_* per tutte le operazioni relative agli utenti. È fondamentale capire che gli utenti RabbitMQ sono distinti dagli utenti del sistema operativo.

1. Elencare gli Utenti Esistenti

Per vedere chi ha attualmente accesso al broker, usa il comando list_users:

rabbitmqctl list_users

Output di Esempio:

Listing users ...
user: guest   tags: [administrator]
user: app_prod tags: [policymaker]

2. Creare un Nuovo Utente

Quando si configura un nuovo account di servizio o un amministratore, è necessario creare l'utente e assegnare una password iniziale.

Per creare un utente chiamato api_user con la password securepass:

rabbitmqctl add_user api_user securepass

3. Modificare i Tag Utente (Ruoli)

I tag utente definiscono ruoli predefiniti che concedono specifiche capacità amministrative. I tag più comuni sono administrator, policymaker e management.

  • administrator: Può modificare utenti, permessi, vhost e impostare parametri di cluster.
  • policymaker: Può impostare politiche (es. per alta disponibilità o TTL dei messaggi).
  • management: Può utilizzare l'interfaccia del Plugin di Gestione (se installato).

Visualizzare i Tag Attuali

Usa list_user_tags per vedere i ruoli attuali:

rabbitmqctl list_user_tags api_user

Impostare o Sovrascrivere Tag

Per assegnare il tag management a api_user:

rabbitmqctl set_user_tags api_user management

Per aggiungere il tag policymaker in aggiunta ai tag esistenti, usa il comando add_tag:

rabbitmqctl set_user_tags api_user administrator policymaker

Rimuovere Tag

Per rimuovere un tag specifico:

rabbitmqctl clear_user_tags api_user policymaker

4. Cambiare la Password di un Utente

Se le credenziali necessitano di rotazione, usa il comando change_password:

rabbitmqctl change_password api_user newsecurepass123

5. Eliminare un Utente

Per rimuovere completamente un utente e revocare tutti gli accessi associati:

rabbitmqctl delete_user api_user

Attenzione: L'eliminazione dell'utente guest è generalmente raccomandata negli ambienti di produzione per motivi di sicurezza, sebbene richieda prima la creazione di un nuovo utente amministrativo.

Gestione dei Permessi sui Virtual Host

I permessi in RabbitMQ sono definiti su base per Virtual Host (vhost). Un vhost agisce come uno spazio dei nomi per code, exchange e binding. Per impostazione predefinita, RabbitMQ ha un vhost radice chiamato /.

1. Elencare i Vhost

Innanzitutto, identifica i vhost disponibili:

rabbitmqctl list_vhosts

2. Impostare i Permessi per un Utente su un Vhost

Il comando set_permissions è il più critico per la sicurezza delle applicazioni. Concede a un utente i diritti per configurare, leggere o scrivere risorse all'interno di uno specifico vhost.

Sintassi: set_permissions <vhost> <user> <conf> <read> <write>

I valori dei permessi sono espressioni regolari (.* significa tutte le risorse).

Esempio: Concedere Accesso Completo a un Vhost Specifico

Se vogliamo che app_prod abbia accesso CRUD (Configure, Read, Write) completo solo a /prod_vhost:

rabbitmqctl set_permissions -p /prod_vhost app_prod "^.*" "^.*" "^.*" 
Permesso Significato (Regex) Descrizione
Configura (conf) .* Può creare/eliminare exchange, code, binding e impostare parametri del vhost.
Leggi (read) .* Può consumare messaggi e ottenere lo stato di code/exchange.
Scrivi (write) .* Può pubblicare messaggi e creare binding.

Esempio: Restringere un Utente alla Sola Pubblicazione

Un modello comune per i produttori "firehose" è limitarli alla sola scrittura:

# L'utente 'publisher' può scrivere ma non può configurare o leggere messaggi in /analytics_vhost
rabbitmqctl set_permissions -p /analytics_vhost publisher "^$" "^$" "^.*$"

3. Cancellare i Permessi

Per rimuovere completamente tutti i permessi che un utente ha su uno specifico vhost, usa clear_permissions:

rabbitmqctl clear_permissions -p /prod_vhost app_prod

4. Elencare i Permessi Utente

Per verificare i permessi concessi a un utente specifico su un vhost:

rabbitmqctl list_permissions -p /prod_vhost app_prod

Migliori Pratiche per l'Amministrazione degli Utenti

  • Principio del Minimo Privilegio (PoLP): Concedi sempre i permessi minimi necessari all'applicazione o all'utente per funzionare. Evita di usare il tag administrator se non strettamente necessario.
  • Vhost Dedicati: Usa virtual host diversi per ambienti diversi (es. dev, staging, prod) e controlla strettamente l'accesso tra di essi.
  • Evitare l'Utente Guest: Per sicurezza, l'utente guest predefinito dovrebbe essere disabilitato o limitato (per impostazione predefinita ha accesso solo a localhost).
  • Scripting: Poiché tutti questi comandi sono idempotenti e basati su linea di comando, scripta le routine di setup e teardown degli utenti per una distribuzione coerente.

Padroneggiando questi comandi rabbitmqctl, ottieni un controllo granulare e scriptabile su chi può accedere alle risorse del tuo broker di messaggi, portando a una distribuzione RabbitMQ più sicura e gestibile.