

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de la autenticación y autorización de OAuth 2.0 para Amazon MQ para RabbitMQ
<a name="oauth-tutorial"></a>

En este tutorial se describe cómo configurar la [autenticación de OAuth 2.0](oauth-for-amq-for-rabbitmq.md) para sus agentes de Amazon MQ para RabbitMQ que utilizan Amazon Cognito como proveedor de OAuth 2.0.

**nota**  
Amazon Cognito no está disponible en China (Pekín) y China (Ningxia).

**importante**  
Este tutorial es específico de Amazon Cognito, pero puede utilizar otros proveedores de identidad (IdP). Para obtener más información, consulte [Ejemplos de autenticación de OAuth 2.0](https://www.rabbitmq.com/docs/oauth2-examples).

**Topics**
+ [Requisitos previos para configurar la autenticación OAuth 2.0](#oauth-tutorial-prerequisites)
+ [Configuración de la autenticación OAuth 2.0 con Amazon Cognito mediante AWS CLI](#oauth-tutorial-config-cognito-using-cli)
+ [Configuración de OAuth 2.0 y autenticación simple con Amazon Cognito](#oauth-tutorial-config-both-auth-methods-using-cli)

## Requisitos previos para configurar la autenticación OAuth 2.0
<a name="oauth-tutorial-prerequisites"></a>

Puede configurar los recursos de Amazon Cognito necesarios en este tutorial mediante la implementación de la pila AWS CDK, [Pila de Amazon Cognito para el complemento OAuth 2 de RabbitMQ](https://github.com/aws-samples/amazon-mq-samples/tree/main/rabbitmq-samples/rabbitmq-oauth2-cognito-sample). Si va a configurar Amazon Cognito manualmente, asegúrese de cumplir los siguientes requisitos previos antes de configurar OAuth 2.0 en su Amazon MQ para agentes de RabbitMQ:

**Requisitos previos para configurar Amazon Cognito**
+ Configure un punto de conexión de Amazon Cognito mediante la creación de un grupo de usuarios. Para ello, consulte el blog [How to use OAuth 2.0 in Amazon Cognito: Learn about the different OAuth 2.0 grants](https://aws.amazon.com/blogs/security/how-to-use-oauth-2-0-in-amazon-cognito-learn-about-the-different-oauth-2-0-grants/).
+ Cree un servidor de recursos llamado `rabbitmq` en el grupo de usuarios con los siguientes ámbitos definidos: `read:all`, `write:all`, `configure:all` y `tag:administrator`. Estos ámbitos se asociarán a los permisos de RabbitMQ.

  Para obtener información sobre la creación de un servidor de recursos, consulte [Definir un servidor de recursos para su grupo de usuarios (Consola de administración de AWS)](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html#cognito-user-pools-define-resource-servers-console) en la *Guía para desarrolladores de Amazon Cognito*.
+ Cree los siguientes clientes de aplicaciones.
  + Cliente de aplicación para el grupo de usuarios de tipo `Machine-to-Machine application`. Se trata de un cliente confidencial con un secreto de cliente que se utilizará para los clientes AMQP de RabbitMQ. Para obtener más información sobre los clientes de aplicaciones y cómo crear uno, consulte [Tipos de clientes de aplicaciones](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html#user-pool-settings-client-app-client-types) y [Creación de un cliente de aplicaciones.](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html#cognito-user-pools-app-idp-settings-console-create)
  + Cliente de aplicación para el grupo de usuarios de tipo `Single-page application`. Se trata de un cliente público que se utilizará para iniciar sesión en la consola de administración de RabbitMQ. Debe actualizar este cliente de aplicación para incluir el punto de conexión del agente Amazon MQ para RabbitMQ que creará en el siguiente procedimiento como URL de devolución de llamada permitida. Para obtener más información, consulte [Configuración del inicio de sesión administrado con la consola de Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#set-up-managed-login).

**Requisito previo para configurar Amazon MQ**
+ Una instalación de [Docker](https://docs.docker.com/engine/install/) que funcione para ejecutar un script de bash que compruebe si la configuración de OAuth 2.0 se ha realizado correctamente o no.
+ versión AWS CLI >= `2.28.23` para que añadir un nombre de usuario y una contraseña sea opcional durante la creación del agente.

## Configuración de la autenticación OAuth 2.0 con Amazon Cognito mediante AWS CLI
<a name="oauth-tutorial-config-cognito-using-cli"></a>

El siguiente procedimiento muestra cómo configurar la autenticación OAuth 2.0 para sus agentes de Amazon MQ for RabbitMQ que utilizan Amazon Cognito como IdP. Este procedimiento utiliza AWS CLI para crear y configurar los recursos necesarios.

En el siguiente procedimiento, asegúrese de reemplazar los valores de los marcadores de posición, como el ID de configuración y la revisión,*<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>* y *<2>* por sus valores reales.

1. Cree una configuración nueva mediante el comando AWS CLI [create-configuration](https://docs.aws.amazon.com/cli/latest/reference/mq/create-configuration.html) tal y como se muestra en el siguiente ejemplo.

   ```
   aws mq create-configuration \
     --name "rabbitmq-oauth2-config" \
     --engine-type "RABBITMQ" \
     --engine-version "3.13"
   ```

   Este comando devuelve una respuesta de JSON similar a la siguiente.

   ```
   {
       "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. Cree un archivo de configuración llamado **rabbitmq.conf** para utilizar OAuth 2.0 como método de autenticación y autorización, como se muestra en el siguiente ejemplo.

   ```
   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
   ```

   Esta configuración utiliza [alias de ámbito](https://www.rabbitmq.com/docs/oauth2#scope-translation) para asignar los ámbitos definidos en Amazon Cognito a ámbitos compatibles con RabbitMQ.

1. Actualice la configuración mediante el comando AWS CLI [update-configuration](https://docs.aws.amazon.com/cli/latest/reference/mq/update-configuration.html), como se muestra en el siguiente ejemplo. En este comando, añada el identificador de configuración que recibió en la respuesta al paso 1 de este procedimiento. Por ejemplo, **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)"
   ```

   Este comando devuelve una respuesta de JSON similar a la siguiente.

   ```
   {
       "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. Cree un agente con la configuración de OAuth 2.0 creada en el paso 2 de este procedimiento. Para ello, utilice el comando [create-broker](https://docs.aws.amazon.com/cli/latest/reference/mq/create-broker.html) de AWS CLI como se muestra en el siguiente ejemplo. En este comando, indique el identificador de configuración y el número de revisión que obtuvo en las respuestas de los pasos 1 y 2, respectivamente. Por ejemplo, **c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca** y **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>}' \
   ```

   Este comando devuelve una respuesta de JSON similar a la siguiente.

   ```
   {
       "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. Compruebe que el estado del agente pasa de `CREATION_IN_PROGRESS` a `RUNNING` mediante el comando [describe-broker](https://docs.aws.amazon.com/cli/latest/reference/mq/describe-broker.html) de AWS CLI, tal como se muestra en el siguiente ejemplo. En este comando, proporcione el ID de agente que obtuvo en el resultado del paso anterior. Por ejemplo, **b-2a1b5133-a10c-49d2-879b-8c176c34cf73**.

   ```
   aws mq describe-broker \
    --broker-id "<b-2a1b5133-a10c-49d2-879b-8c176c34cf73>"
   ```

   Este comando devuelve una respuesta de JSON similar a la siguiente. La siguiente respuesta es una versión abreviada del resultado completo que devuelve el comando `describe-broker`. Esta respuesta muestra el estado del agente y la estrategia de autenticación utilizada para proteger al agente. En este caso, la estrategia de autenticación `config_managed` indica que el agente utiliza el método de autenticación OAuth 2.

   ```
   {
       "AuthenticationStrategy": "config_managed",
       ...,
       "BrokerState": "RUNNING",
       ...
   }
   ```

    Para iniciar sesión en la consola de administración de RabbitMQ mediante OAuth2, es necesario añadir el punto de conexión del agente como una URL de devolución de llamada válida en el cliente de la aplicación Amazon Cognito correspondiente. Para obtener más información, consulte el paso 5 de la configuración de nuestro ejemplo de [pila de CDK de 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 la autenticación y la autorización de OAuth 2.0 con el siguiente script de `perf-test.sh`.

   Utilice este script de bash para probar la conectividad con su agente de Amazon MQ para RabbitMQ. Este script obtiene un token de Amazon Cognito y verifica si la conexión se configuró correctamente. Si se ha configurado correctamente, verá que su agente publica y consume mensajes.

   Si recibe un error `ACCESS_REFUSED`, puede solucionar los problemas de configuración mediante los registros de CloudWatch de su agente. Encontrará el enlace al grupo de registros de CloudWatch de su agente en la consola de Amazon MQ.

   En este script, deberá proporcionar los siguientes valores:
   + `CLIENT_ID` y `CLIENT_SECRET`: puede encontrar estos valores en la **App clients (Página de clientes de aplicación)** de la consola Amazon Cognito.
   + Dominio de Cognito: puede encontrarlo en la consola de Amazon Cognito. En **Branding (Marca)**, seleccione **Domain (Dominio)**. En la página **Domain (Dominio)**, encontrará este valor en la sección **Resource servers (Servidores de recursos)**.
   + Punto de conexión del agente de Amazon MQ: puede encontrar este valor en **Connections (Conexiones)**, en la página de detalles del agente de la consola de 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
   ```

## Configuración de OAuth 2.0 y autenticación simple con Amazon Cognito
<a name="oauth-tutorial-config-both-auth-methods-using-cli"></a>

Al crear un agente con autenticación OAuth 2.0, puede especificar uno de los siguientes métodos de autenticación:
+ **Solo con OAuth 2.0**: para usar este método, no proporciones un nombre de usuario ni una contraseña al crear el agente. El [procedimiento anterior](#oauth-tutorial-config-cognito-using-cli) muestra cómo utilizar únicamente el método de autenticación OAuth 2.0.
+ **Tanto la autenticación OAuth 2.0 como la autenticación simple**: para utilizar este método, proporcione un nombre de usuario y una contraseña al crear el agente. Además, añada `auth_backends.2 = internal` a la configuración de su agente, como se muestra en el siguiente procedimiento.

En el siguiente procedimiento, asegúrese de reemplazar los valores de los marcadores de posición, como *<ConfigurationId>* y *<Revision>*, por sus valores reales.

1. Para utilizar ambos métodos de autenticación, cree la configuración de agente, como se muestra en el siguiente ejemplo.

   ```
   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:*/*
   ```

   Esta configuración utiliza [alias de ámbito](https://www.rabbitmq.com/docs/oauth2#scope-translation) para asignar los ámbitos definidos en Amazon Cognito a ámbitos compatibles con RabbitMQ.

1. Cree un agente que utilice los dos métodos de autenticación, como se muestra en el siguiente ejemplo.

   ```
   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. Compruebe que el estado del agente y la configuración para establecer el método de autenticación se hayan realizado correctamente, tal como se describe en los pasos 5 y 6 del procedimiento [Configuración de la autenticación OAuth 2.0 con Amazon Cognito](#oauth-tutorial-config-cognito-using-cli).