Uso de la autenticación y autorización de OAuth 2.0 para Amazon MQ para RabbitMQ
En este tutorial se describe cómo configurar la autenticación de OAuth 2.0 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
En esta página
Requisitos previos para configurar la autenticación OAuth 2.0
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
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
. -
Cree un servidor de recursos llamado
rabbitmqen el grupo de usuarios con los siguientes ámbitos definidos:read:all,write:all,configure:allytag: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) 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 y Creación de un cliente de aplicaciones. -
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.
-
Requisito previo para configurar Amazon MQ
-
Una instalación de Docker
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.23para 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
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.
-
Cree una configuración nueva mediante el comando AWS CLI create-configuration 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" } -
Cree un archivo de configuración llamado
rabbitmq.confpara 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:administratorEsta configuración utiliza alias de ámbito
para asignar los ámbitos definidos en Amazon Cognito a ámbitos compatibles con RabbitMQ. -
Actualice la configuración mediante el comando AWS CLI update-configuration, 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": [] } -
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 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-eb15b38b22cay2.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" } -
Compruebe que el estado del agente pasa de
CREATION_IN_PROGRESSaRUNNINGmediante el comando describe-broker 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ónconfig_managedindica 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
. -
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_IDyCLIENT_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
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 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 = internala 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.
-
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
para asignar los ámbitos definidos en Amazon Cognito a ámbitos compatibles con RabbitMQ. -
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>"}]' -
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.