Uso de la autenticación y la autorización OAuth 2.0 para Amazon MQ para RabbitMQ - Amazon MQ

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 la autorización OAuth 2.0 para Amazon MQ para RabbitMQ

En este tutorial se describe cómo configurar la autenticación OAuth 2.0 para sus agentes de Amazon MQ para RabbitMQ que utilizan Amazon Cognito como proveedor de la versión 2.0. OAuth

nota

Amazon Cognito no está disponible en China (Pekín) ni en China (Ningxia).

importante

Este tutorial es específico de Amazon Cognito, pero puede utilizar otros proveedores de identidad ()IdPs. Para obtener más información, consulte los ejemplos de autenticación OAuth 2.0.

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 AWS CDK pila, el complemento Amazon Cognito stack for OAuth RabbitMQ 2. Si va a configurar Amazon Cognito manualmente, asegúrese de cumplir los siguientes requisitos previos antes de configurar la OAuth versión 2.0 en su Amazon MQ para agentes de RabbitMQ:

Requisitos previos para configurar Amazon Cognito
Requisito previo para configurar Amazon MQ
  • Una instalación de Docker que funcione para ejecutar un script bash que verifique si la configuración OAuth 2.0 se ha realizado correctamente o no.

  • AWS CLI versión >= 2.28.23 para que añadir un nombre de usuario y una contraseña sea opcional durante la creación del bróker.

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 corredores de Amazon MQ para RabbitMQ que utilizan Amazon Cognito como IDP. Este procedimiento se 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> por sus valores <2> reales.

  1. Cree una nueva configuración mediante el AWS CLI comando create-configuration, 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 similar a la del siguiente ejemplo.

    { "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. Cree un archivo de configuración llamado rabbitmq.conf a usar 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 para asignar los ámbitos definidos en Amazon Cognito a ámbitos compatibles con RabbitMQ.

  3. Actualice la configuración mediante el comando update-configuration, como se muestra en el siguiente ejemplo AWS CLI . 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 similar a la del siguiente ejemplo.

    { "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. Cree un broker con la configuración OAuth 2.0 que creó en el paso 2 de este procedimiento. Para ello, utilice el AWS CLI comando create-broker 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 similar a la del siguiente ejemplo.

    { "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. Compruebe que el estado del bróker pasa de CREATION_IN_PROGRESS aRUNNING, mediante el AWS CLI comando describe-broker, tal como se muestra en el siguiente ejemplo. En este comando, proporcione el ID de corredor 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 similar a la del siguiente ejemplo. La siguiente respuesta es una versión abreviada del resultado completo que devuelve el describe-broker comando. Esta respuesta muestra el estado del agente y la estrategia de autenticación utilizada para protegerlo. En este caso, la estrategia de config_managed autenticación indica que el agente utiliza OAuth dos métodos de autenticación.

    { "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.

  6. Verifique la autenticación y la autorización OAuth 2.0 con el siguiente perf-test.sh script.

    Utilice este script bash para probar la conectividad con su bróker de Amazon MQ for 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 ACCESS_REFUSED error, puede solucionar los problemas de configuración utilizando los CloudWatch registros de su agente. Encontrará el enlace al grupo de CloudWatch registros 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 página de clientes de aplicaciones de la consola Amazon Cognito.

    • Dominio de Cognito: lo encontrará en la consola de Amazon Cognito. En Marca, selecciona Dominio. En la página Dominio, encontrarás este valor en la sección Servidores de recursos.

    • Punto de enlace del corredor de Amazon MQ: puede encontrar este valor en Conexiones, en la página de detalles del corredor 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 la OAuth versión 2.0 y la 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:

  • OAuth Solo en la versión 2.0: para usar este método, no proporcione un nombre de usuario ni una contraseña al crear el corredor. 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 simple: para usar este método, proporcione un nombre de usuario y una contraseña al crear el corredor. Además, auth_backends.2 = internal añádalo a la configuración de su corredor, 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 su 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.

  2. Cree un agente que utilice ambos 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>"}]'
  3. Compruebe que el estado del corredor y la configuración para configurar el método de autenticación se hayan realizado correctamente, tal como se describe en los pasos 5 y 6 del Configuración de la autenticación OAuth 2.0 con Amazon Cognito procedimiento.