Uso da autorização e da autenticação OAuth 2.0 para Amazon MQ para RabbitMQ
Esse tutorial descrever como configura a autenticação OAuth 2.0 para agentes do Amazon MQ para RabbitMQ usando o Amazon Cognito como provedor do OAuth 2.0.
nota
O Amazon Cognito está disponível nas regiões China (Pequim) e China (Ningxia).
Importante
Esse tutorial é específico para o Amazon Cognito, mas você pode usar outros provedores de identidade (IDPs). Para obter mais informações, consulte Exemplos de autenticação OAuth 2.0
Nesta página
Pré-requisitos para configurar a autenticação OAuth 2.0
Você pode definir os recursos do Amazon Cognito necessários neste tutorial implantando a pilha AWS CDK, pilha do Amazon Cognito para plug-in OAuth 2 do RabbitMQ
Pré-requisitos para configurar o Amazon Cognito
-
Configure um endpoint do Amazon Cognito criando um grupo de usuários. Para fazer isso, consulte o blog intitulado Como usar o OAuth 2.0 no Amazon Cognito: Saiba mais sobre as diferentes concessões do OAuth 2.0
. -
Crie um servidor de recursos chamado
rabbitmqno grupo de usuários com os seguintes escopos definidos:read:allwrite:all,configure:alletag:administrator. Esses escopos serão associados às permissões do RabbitMQ.Para obter informações sobre a criação de um servidor de recursos, consulte Definição de um servidor de recursos para o grupo de usuários (Console de gerenciamento da AWS) no Guia do desenvolvedor do Amazon Cognito.
-
Crie as aplicações a seguir.
-
Cliente de aplicativo para o grupo de usuários do tipo
Machine-to-Machine application. Esse é um cliente confidencial com um segredo de cliente que será usado pelos clientes do RabbitMQ AMQP. Para obter mais informações sobre clientes de aplicações e como criar um, consulte Tipos de clientes de aplicação e Criação de um cliente de aplicação. -
Cliente de aplicativo para o grupo de usuários do tipo
Single-page application. Esse é um cliente público que será usado para fazer login de usuários no console de gerenciamento do RabbitMQ. Você deve atualizar esse cliente do aplicativo para incluir o endpoint do agente do Amazon MQ para RabbitMQ que você criará no procedimento a seguir como uma URL de retorno de chamada permitida. Para obter mais informações, consulte Configuração do login gerenciado com o console do Amazon Cognito.
-
Pré-requisito para configurar o Amazon MQ
-
Uma instalação funcional do Docker
para executar um script bash que verifica se a configuração do OAuth 2.0 foi bem-sucedida ou não. -
Versão da AWS CLI >=
2.28.23para tornar opcional a adição de um nome de usuário e senha durante a criação do agente.
Configuração da autenticação OAuth 2.0 com o Amazon Cognito usando-se a AWS CLI
O procedimento a seguir mostra como configurar a autenticação OAuth 2.0 para os agentes do Amazon MQ para RabbitMQ usando-se o Amazon Cognito como IdP. Esse procedimento usa a AWS CLI para criar e configurar os recursos necessários.
No procedimento a seguir, certifique-se de substituir os valores do espaço reservado, como configurationID e Revision, <c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca> e <2>, por seus valores reais.
-
Crie uma nova configuração usando o comando da AWS CLI create-configuration conforme mostrado no exemplo a seguir.
aws mq create-configuration \ --name "rabbitmq-oauth2-config" \ --engine-type "RABBITMQ" \ --engine-version "3.13"Esse comando retorna uma resposta semelhante ao exemplo a seguir.
{ "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca", "AuthenticationStrategy": "simple", "Created": "2025-07-17T16:03:01.759943+00:00", "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca", "LatestRevision": { "Created": "2025-07-17T16:03:01.759000+00:00", "Description": "Auto-generated default for rabbitmq-oauth2-config on RabbitMQ 3.13", "Revision": 1 }, "Name": "rabbitmq-oauth2-config" } -
Crie um arquivo de configuração chamado
rabbitmq.confpara usar o OAuth 2.0 como método de autenticação e autorização, conforme mostrado no exemplo a seguir.auth_backends.1 = oauth2 # FIXME: Update this value with the token signing key URL of your Amazon Cognito user pool. # If you used the AWS CDK stack to deploy Amazon Cognito, this is one of the stack outputs. auth_oauth2.jwks_url =${RabbitMqOAuth2TestStack.JwksUri}auth_oauth2.resource_server_id = rabbitmq # Amazon Cognito does not include an audience field in access tokens auth_oauth2.verify_aud = false # Amazon Cognito does not allow * in its custom scopes. Use aliases to translate between Amazon Cognito and RabbitMQ. auth_oauth2.scope_prefix = rabbitmq/ auth_oauth2.scope_aliases.1.alias = rabbitmq/read:all auth_oauth2.scope_aliases.1.scope = rabbitmq/read:*/* auth_oauth2.scope_aliases.2.alias = rabbitmq/write:all auth_oauth2.scope_aliases.2.scope = rabbitmq/write:*/* auth_oauth2.scope_aliases.3.alias = rabbitmq/configure:all auth_oauth2.scope_aliases.3.scope = rabbitmq/configure:*/* # Allow OAuth 2.0 login for RabbitMQ management console management.oauth_enabled = true # FIXME: Update this value with the client ID of your public application client management.oauth_client_id =${RabbitMqOAuth2TestStack.ManagementConsoleAppClientId}# FIXME: Update this value with the base JWKS URI (without /.well-known/jwks.json) auth_oauth2.issuer =${RabbitMqOAuth2TestStack.Issuer}management.oauth_scopes = rabbitmq/tag:administratorEssa configuração usa aliases de escopo
para mapear os escopos definidos no Amazon Cognito para escopos compatíveis do RabbitMQ. -
Atualize a configuração usando o comando da AWS CLI update-configuration conforme mostrado no exemplo a seguir. Nesse comando, adicione o ID de configuração que você recebeu na resposta da Etapa 1 do procedimento. Por exemplo,
c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca.aws mq update-configuration \ --configuration-id "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>" \ --data "$(cat rabbitmq.conf | base64 --wrap=0)"Esse comando retorna uma resposta semelhante ao exemplo a seguir.
{ "Arn": "arn:aws:mq:us-west-2:123456789012:configuration:c-b600ac8e-8183-4f74-a713-983e59f30e3d", "Created": "2025-07-17T16:57:04.520931+00:00", "Id": "c-b600ac8e-8183-4f74-a713-983e59f30e3d", "LatestRevision": { "Created": "2025-07-17T16:57:39.172000+00:00", "Revision": 2 }, "Name": "rabbitmq-oauth2-config", "Warnings": [] } -
Crie um agente com a configuração do OAuth 2.0 criada na Etapa 2 deste procedimento. Para fazer isso, use o comando create-broker da AWS CLI, conforme mostrado no exemplo a seguir. Nesse comando, forneça o ID de configuração e o número da revisão obtidos nas respostas das etapas 1 e 2, respectivamente. Por exemplo,
c-fa3390a5-7e01-4559-ae0c-eb15b38b22cae2.aws mq create-broker \ --broker-name "rabbitmq-oauth2-broker" \ --engine-type "RABBITMQ" \ --engine-version "3.13" \ --host-instance-type "mq.m7g.large" \ --deployment-mode "CLUSTER_MULTI_AZ" \ --logs '{"General": true}' \ --publicly-accessible \ --configuration '{"Id": "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>","Revision":<2>}' \Esse comando retorna uma resposta semelhante ao exemplo a seguir.
{ "BrokerArn": "arn:aws:mq:us-west-2:123456789012:broker:rabbitmq-oauth2-broker:b-2a1b5133-a10c-49d2-879b-8c176c34cf73", "BrokerId": "b-2a1b5133-a10c-49d2-879b-8c176c34cf73" } -
Verifique se o status do agente muda de
CREATION_IN_PROGRESSparaRUNNING, usando o comando da AWS CLI describe-broker, conforme mostrado no exemplo a seguir. Nesse comando, forneça o ID do corretor que você obteve no resultado da etapa anterior. Por exemplo,b-2a1b5133-a10c-49d2-879b-8c176c34cf73.aws mq describe-broker \ --broker-id "<b-2a1b5133-a10c-49d2-879b-8c176c34cf73>"Esse comando retorna uma resposta semelhante ao exemplo a seguir. A resposta a seguir é uma versão abreviada da saída completa que o comando
describe-brokerretorna. Essa resposta mostra o status do agente e a estratégia de autenticação usada para proteger o agente. Nesse caso, a estratégia de autenticaçãoconfig_managedindica que o agente usa o método de autenticação OAuth 2.{ "AuthenticationStrategy": "config_managed", ..., "BrokerState": "RUNNING", ... }Para fazer login no console de gerenciamento do RabbitMQ usando o OAuth2, o endpoint do agente precisa ser adicionado como uma URL de retorno de chamada válida no cliente da aplicação Amazon Cognito correspondente. Para obter mais informações, consulte a Etapa 5 na configuração do nosso exemplo de pilha de CDK do Amazon Cognito
. -
Verifique a autenticação e a autorização do OAuth 2.0 com o script a seguir
perf-test.sh.Use esse script bash para testar a conectividade com o agente do Amazon MQ para RabbitMQ. Esse script obtém um token do Amazon Cognito e verifica se a conexão foi configurada corretamente. Se for configurado com sucesso, você verá seu agente publicar e consumir mensagens.
Se você receber um erro
ACCESS_REFUSED, poderá solucionar os problemas de configuração usando os CloudWatch Logs para o agente. Você pode encontrar o link para o grupo de logs do CloudWatch para o agente no console do Amazon MQ.Nesse script, é necessário fornecer os seguintes valores:
-
CLIENT_IDeCLIENT_SECRET: Você pode encontrar esses valores na página de clientes de aplicativos do console do Amazon Cognito. -
Domínio Cognito: você pode encontrar isso no console do Amazon Cognito. Em Branding (Marca), escolha Domain (Domínio). Na página Domain (Domínio), você pode descobrir esse valor na seção Resource servers (Servidores de recursos).
-
Endpoint do agente Amazon MQ: você pode encontrar esse valor em Conexões na página de detalhes do agente no console do Amazon MQ.
#! /bin/bash set -e # Client information ## FIXME: Update this value with the client ID and secret of your confidential application client CLIENT_ID=${RabbitMqOAuth2TestStack.AmqpAppClientId}CLIENT_SECRET=${RabbitMqOAuth2TestStack.AmqpAppClientSecret}# FIXME: Update this value with the domain of your Amazon Cognito user pool RESPONSE=$(curl -X POST${RabbitMqOAuth2TestStack.TokenEndpoint}\ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials&client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}&scope=rabbitmq/configure:all rabbitmq/read:all rabbitmq/tag:administrator rabbitmq/write:all") # Extract the access_token from the response. # This token will be passed in the password field when connecting to the broker. # Note that the username is left blank, the field is ignored by the plugin. BROKER_PASSWORD=$(echo ${RESPONSE} | jq -r '.access_token') # FIXME: Update this value with the endpoint of your broker. For example,b-89424106-7e0e-4abe-8e98-8de0dada7630.mq.us-east-1.on.aws. BROKER_DNS=<broker_dns>CONNECTION_STRING=amqps://:${BROKER_PASSWORD}@${BROKER_DNS}:5671 # Produce/consume messages using the above connection string QUEUES_COUNT=1 PRODUCERS_COUNT=1 CONSUMERS_COUNT=1 PRODUCER_RATE=1 docker run -it --rm --ulimit nofile=40960:40960 pivotalrabbitmq/perf-test:latest \ --queue-pattern 'test-queue-%d' --queue-pattern-from 1 --queue-pattern-to $QUEUES_COUNT \ --producers $PRODUCERS_COUNT --consumers $CONSUMERS_COUNT \ --id "test${QUEUES_COUNT}q${PRODUCERS_COUNT}p${CONSUMERS_COUNT}c${PRODUCER_RATE}r" \ --uri ${CONNECTION_STRING} \ --flag persistent --rate $PRODUCER_RATE -
Configuração do OAuth 2.0 e autenticação simples com o Amazon Cognito
Quando criar um agente com autenticação OAuth 2.0, você pode especificar um dos seguintes métodos de autenticação:
-
Somente o OAuth 2.0: para usar esse método, forneça um nome de usuário e uma senha quando criar o agente. O procedimento anterior mostra como usar somente o método de autenticação OAuth 2.0.
-
Autenticação simples e a OAuth 2.0: para usar esse método, forneça um nome de usuário e uma senha quando criar o agente. Além disso, adicione
auth_backends.2 = internalà configuração do agente, conforme mostrado no procedimento a seguir.
No procedimento a seguir, certifique-se de substituir os valores do espaço reservado, como<ConfigurationId> e <Revision>, por seus valores reais.
-
Para usar os dois métodos de autenticação, crie a configuração do agente, conforme mostrado no exemplo a seguir.
auth_backends.1 = oauth2 auth_backends.2 = internal # FIXME: Update this value with the token signing key URL of your Amazon Cognito user pool auth_oauth2.jwks_url =${RabbitMqOAuth2TestStack.JwksUri}auth_oauth2.resource_server_id = rabbitmq auth_oauth2.verify_aud = false auth_oauth2.scope_prefix = rabbitmq/ auth_oauth2.scope_aliases.1.alias = rabbitmq/read:all auth_oauth2.scope_aliases.1.scope = rabbitmq/read:*/* auth_oauth2.scope_aliases.2.alias = rabbitmq/write:all auth_oauth2.scope_aliases.2.scope = rabbitmq/write:*/* auth_oauth2.scope_aliases.3.alias = rabbitmq/configure:all auth_oauth2.scope_aliases.3.scope = rabbitmq/configure:*/*Essa configuração usa aliases de escopo
para mapear os escopos definidos no Amazon Cognito para escopos compatíveis do RabbitMQ. -
Crie um agente que use os dois métodos de autenticação, conforme mostrado no exemplo a seguir.
aws mq create-broker \ --broker-name "rabbitmq-oauth2-broker-with-internal-user" \ --engine-type "RABBITMQ" \ --engine-version "3.13" \ --host-instance-type "mq.m7g.large" \ --deployment-mode "CLUSTER_MULTI_AZ" \ --logs '{"General": true}' \ --publicly-accessible \ --configuration '{"Id": "<ConfigurationId>","Revision":<Revision>}' \ --users '[{"Username":"<myUser>","Password":"<myPassword11>"}]' -
Verifique se o status do agente e a configuração para definir o método de autenticação foram bem-sucedidos, conforme descrito nas etapas 5 e 6 do procedimento Configuração da autenticação OAuth 2.0 com o Amazon Cognito.