Uso da autorização e da autenticação OAuth 2.0 para Amazon MQ para RabbitMQ - Amazon MQ

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.

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. Se você estiver configurando o Amazon Cognito manualmente, certifique-se de cumprir os seguintes pré-requisitos antes de configurar o OAuth 2.0 nos agentes do Amazon MQ para RabbitMQ:

Pré-requisitos para configurar o 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.23 para 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.

  1. 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" }
  2. Crie um arquivo de configuração chamado rabbitmq.conf para 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:administrator

    Essa configuração usa aliases de escopo para mapear os escopos definidos no Amazon Cognito para escopos compatíveis do RabbitMQ.

  3. 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": [] }
  4. 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-eb15b38b22ca e 2.

    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" }
  5. Verifique se o status do agente muda de CREATION_IN_PROGRESS paraRUNNING, 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-broker retorna. 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ção config_managed indica 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.

  6. 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_ID e CLIENT_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.

  1. 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.

  2. 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>"}]'
  3. 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.