Gerenciando Usuários e Permissões no RabbitMQ: Um Guia de Linha de Comando
Gerenciar usuários e definir direitos de acesso é um aspecto fundamental para proteger qualquer infraestrutura de message broker. O RabbitMQ, um poderoso message broker, oferece mecanismos robustos para autenticação e autorização de usuários, gerenciados principalmente através do utilitário de linha de comando rabbitmqctl. Este guia foca exclusivamente no uso do rabbitmqctl para dominar a administração de usuários, cobrindo desde a criação e atribuição de papéis até a configuração detalhada de permissões em virtual hosts.
Permissões configuradas corretamente garantem que aplicações e administradores interajam com o broker apenas onde necessário, minimizando riscos de segurança e confusão operacional. Ao aproveitar essas ferramentas de linha de comando, você pode criar scripts e automatizar configurações de segurança complexas de forma eficiente.
Pré-requisitos
Antes de prosseguir, certifique-se de ter o seguinte:
- Servidor RabbitMQ Instalado: O broker deve estar em execução.
- Acesso ao
rabbitmqctl: Você deve ter as permissões necessárias (geralmente privilégios de administrador) para executar comandos na instância do RabbitMQ em execução. Os comandos são tipicamente executados a partir da máquina que hospeda o servidor RabbitMQ.
Gerenciando Usuários com rabbitmqctl
A ferramenta rabbitmqctl utiliza a família de comandos user_* para todas as operações relacionadas a usuários. É crucial entender que os usuários do RabbitMQ são distintos dos usuários do sistema operacional.
1. Listando Usuários Existentes
Para ver quem atualmente tem acesso ao broker, use o comando list_users:
rabbitmqctl list_users
Exemplo de Saída:
Listando usuários ...
user: guest tags: [administrator]
user: app_prod tags: [policymaker]
2. Criando um Novo Usuário
Ao configurar uma nova conta de serviço ou um administrador, você deve criar o usuário e atribuir uma senha inicial.
Para criar um usuário chamado api_user com a senha securepass:
rabbitmqctl add_user api_user securepass
3. Modificando Tags de Usuário (Papéis)
As tags de usuário definem papéis predefinidos que concedem capacidades administrativas específicas. As tags mais comuns são administrator, policymaker e management.
administrator: Pode modificar usuários, permissões, vhosts e definir parâmetros de cluster.policymaker: Pode definir políticas (por exemplo, para alta disponibilidade ou TTL de mensagens).management: Pode usar a interface do Plugin de Gerenciamento (se instalado).
Visualizando Tags Atuais
Use list_user_tags para ver os papéis atuais:
rabbitmqctl list_user_tags api_user
Definindo ou Sobrescrevendo Tags
Para atribuir a tag management a api_user:
rabbitmqctl set_user_tags api_user management
Para adicionar a tag policymaker além das tags existentes, use o comando add_tag:
rabbitmqctl set_user_tags api_user administrator policymaker
Removendo Tags
Para remover uma tag específica:
rabbitmqctl clear_user_tags api_user policymaker
4. Alterando a Senha de um Usuário
Se as credenciais precisarem ser rotacionadas, use o comando change_password:
rabbitmqctl change_password api_user newsecurepass123
5. Excluindo um Usuário
Para remover completamente um usuário e revogar todo o acesso associado:
rabbitmqctl delete_user api_user
Aviso: A exclusão do usuário
guesté geralmente recomendada em ambientes de produção por motivos de segurança, embora exija a criação de um novo usuário administrativo primeiro.
Gerenciando Permissões de Virtual Host
As permissões no RabbitMQ são definidas por Virtual Host (vhost). Um vhost atua como um namespace para filas, exchanges e bindings. Por padrão, o RabbitMQ possui um vhost raiz chamado /.
1. Listando Vhosts
Primeiro, identifique os vhosts disponíveis:
rabbitmqctl list_vhosts
2. Definindo Permissões para um Usuário em um VHost
O comando set_permissions é o mais crítico para a segurança da aplicação. Ele concede a um usuário direitos para configurar, ler ou escrever recursos dentro de um vhost específico.
Sintaxe: set_permissions <vhost> <user> <conf> <read> <write>
Os valores das permissões são expressões regulares (.* significa todos os recursos).
Exemplo: Concedendo Acesso Total a um VHost Específico
Se quisermos que app_prod tenha acesso CRUD (Configurar, Ler, Escrever) total apenas ao /prod_vhost:
rabbitmqctl set_permissions -p /prod_vhost app_prod "^.*" "^.*" "^.*"
| Permissão | Significado (Regex) | Descrição |
|---|---|---|
Configurar (conf) |
.* |
Pode criar/excluir exchanges, filas, bindings e definir parâmetros de vhost. |
Ler (read) |
.* |
Pode consumir mensagens e obter o status de filas/exchanges. |
Escrever (write) |
.* |
Pode publicar mensagens e criar bindings. |
Exemplo: Restringindo um Usuário Apenas para Publicação
Um padrão comum para produtores firehose é restringi-los a apenas escrita:
# O usuário 'publisher' pode escrever, mas não pode configurar ou ler mensagens em /analytics_vhost
rabbitmqctl set_permissions -p /analytics_vhost publisher "^$" "^$" "^.*$"
3. Limpando Permissões
Para remover completamente todas as permissões que um usuário possui em um vhost específico, use clear_permissions:
rabbitmqctl clear_permissions -p /prod_vhost app_prod
4. Listando Permissões do Usuário
Para verificar as permissões concedidas a um usuário específico em um vhost:
rabbitmqctl list_permissions -p /prod_vhost app_prod
Melhores Práticas para Administração de Usuários
- Princípio do Menor Privilégio (PoLP): Sempre conceda o mínimo de permissões necessárias para que a aplicação ou o usuário funcione. Evite usar a tag
administratora menos que seja absolutamente necessário. - Vhosts Dedicados: Use diferentes virtual hosts para diferentes ambientes (por exemplo,
dev,staging,prod) e controle o acesso estritamente entre eles. - Evite o Usuário Guest: Por segurança, o usuário
guestpadrão deve ser desabilitado ou restrito (ele tem acesso apenas alocalhostpor padrão). - Scripting: Como todos esses comandos são idempotentes e baseados em linha de comando, crie scripts para rotinas de configuração e remoção de usuários para uma implantação consistente.
Ao dominar esses comandos rabbitmqctl, você obtém controle granular e programável sobre quem pode acessar seus recursos de message broker, levando a uma implantação RabbitMQ mais segura e gerenciável.