

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Uso da autorização e da autenticação OAuth 2.0 para Amazon MQ para RabbitMQ
<a name="oauth-tutorial"></a>

Esse tutorial descrever como configura a [autenticação OAuth 2.0](oauth-for-amq-for-rabbitmq.md) 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](https://www.rabbitmq.com/docs/oauth2-examples).

**Topics**
+ [Pré-requisitos para configurar a autenticação OAuth 2.0](#oauth-tutorial-prerequisites)
+ [Configuração da autenticação OAuth 2.0 com o Amazon Cognito usando-se a AWS CLI](#oauth-tutorial-config-cognito-using-cli)
+ [Configuração do OAuth 2.0 e autenticação simples com o Amazon Cognito](#oauth-tutorial-config-both-auth-methods-using-cli)

## Pré-requisitos para configurar a autenticação OAuth 2.0
<a name="oauth-tutorial-prerequisites"></a>

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](https://github.com/aws-samples/amazon-mq-samples/tree/main/rabbitmq-samples/rabbitmq-oauth2-cognito-sample). 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**
+ 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](https://aws.amazon.com/blogs/security/how-to-use-oauth-2-0-in-amazon-cognito-learn-about-the-different-oauth-2-0-grants/).
+ Crie um servidor de recursos chamado `rabbitmq` no grupo de usuários com os seguintes escopos definidos: `read:all``write:all`,`configure:all` e `tag: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)](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html#cognito-user-pools-define-resource-servers-console) 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](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html#user-pool-settings-client-app-client-types) e [Criação de um cliente de aplicação](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html#cognito-user-pools-app-idp-settings-console-create).
  + 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](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#set-up-managed-login).

**Pré-requisito para configurar o Amazon MQ**
+ Uma instalação funcional do [Docker](https://docs.docker.com/engine/install/) 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
<a name="oauth-tutorial-config-cognito-using-cli"></a>

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](https://docs.aws.amazon.com/cli/latest/reference/mq/create-configuration.html) 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"
   }
   ```

1. 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](https://www.rabbitmq.com/docs/oauth2#scope-translation) para mapear os escopos definidos no Amazon Cognito para escopos compatíveis do RabbitMQ.

1. Atualize a configuração usando o comando da AWS CLI [update-configuration](https://docs.aws.amazon.com/cli/latest/reference/mq/update-configuration.html) 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": []
   }
   ```

1. 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](https://docs.aws.amazon.com/cli/latest/reference/mq/create-broker.html) 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"
   }
   ```

1. Verifique se o status do agente muda de `CREATION_IN_PROGRESS` para`RUNNING`, usando o comando da AWS CLI [describe-broker](https://docs.aws.amazon.com/cli/latest/reference/mq/describe-broker.html), 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](https://github.com/aws-samples/amazon-mq-samples/tree/main/rabbitmq-samples/rabbitmq-oauth2-cognito-sample#step-5-update-callback-urls-if-using-placeholder-urls). 

1. 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
<a name="oauth-tutorial-config-both-auth-methods-using-cli"></a>

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](#oauth-tutorial-config-cognito-using-cli) 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](https://www.rabbitmq.com/docs/oauth2#scope-translation) para mapear os escopos definidos no Amazon Cognito para escopos compatíveis do RabbitMQ.

1. 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>"}]'
   ```

1. 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](#oauth-tutorial-config-cognito-using-cli).