Administrando Usuários e Permissões do RabbitMQ: Um Guia de Linha de Comando

Domine os comandos `rabbitmqctl` para um gerenciamento robusto de usuários e permissões no RabbitMQ. Este guia abrangente oferece instruções passo a passo sobre como criar novos usuários, atribuir funções de administrador ou de aplicação usando tags, configurar permissões detalhadas de virtual host (leitura/escrita/configuração) e revogar o acesso de forma segura, garantindo uma administração controlada via linha de comando.

52 visualizações

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:

  1. Servidor RabbitMQ Instalado: O broker deve estar em execução.
  2. 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 administrator a 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 guest padrão deve ser desabilitado ou restrito (ele tem acesso apenas a localhost por 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.