Utilisation de l'authentification et de l'autorisation OAuth 2.0 pour Amazon MQ pour RabbitMQ - Amazon MQ

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de l'authentification et de l'autorisation OAuth 2.0 pour Amazon MQ pour RabbitMQ

Ce didacticiel explique comment configurer l'authentification OAuth 2.0 pour votre Amazon MQ pour les courtiers RabbitMQ utilisant Amazon Cognito comme fournisseur 2.0. OAuth

Note

Amazon Cognito n'est pas disponible en Chine (Pékin) et en Chine (Ningxia).

Important

Ce didacticiel est spécifique à Amazon Cognito, mais vous pouvez utiliser d'autres fournisseurs d'identité ()IdPs. Pour plus d'informations, consultez la section Exemples d'authentification OAuth 2.0.

Conditions préalables à la configuration de l'authentification OAuth 2.0

Vous pouvez définir les ressources Amazon Cognito requises dans ce didacticiel en déployant le plugin AWS CDK stack Amazon Cognito pour OAuth RabbitMQ 2. Si vous configurez Amazon Cognito manuellement, assurez-vous de remplir les conditions préalables suivantes avant de configurer la OAuth version 2.0 sur votre Amazon MQ pour les courtiers RabbitMQ :

Conditions préalables à la configuration d'Amazon Cognito
Prérequis pour configurer Amazon MQ
  • Une installation Docker fonctionnelle pour exécuter un script bash qui vérifie si la configuration OAuth 2.0 est réussie ou non.

  • AWS CLI version >= 2.28.23 pour rendre facultatif l'ajout d'un nom d'utilisateur et d'un mot de passe lors de la création du broker.

Configuration de l'authentification OAuth 2.0 avec Amazon Cognito à l'aide de AWS CLI

La procédure suivante explique comment configurer l'authentification OAuth 2.0 pour votre Amazon MQ pour les courtiers RabbitMQ utilisant Amazon Cognito comme IdP. Cette procédure permet AWS CLI de créer et de configurer les ressources nécessaires.

Dans la procédure suivante, assurez-vous de remplacer les valeurs d'espace réservé, telles que ConfigurationID et Revision<2>, <c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca> par leurs valeurs réelles.

  1. Créez une nouvelle configuration à l'aide de la AWS CLI commande create-configuration comme indiqué dans l'exemple suivant.

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

    Cette commande renvoie une réponse similaire à l'exemple suivant.

    { "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. Créez un fichier de configuration appelé rabbitmq.conf pour utiliser la OAuth version 2.0 comme méthode d'authentification et d'autorisation, comme indiqué dans l'exemple suivant.

    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

    Cette configuration utilise des alias d'étendue pour mapper les étendues définies dans Amazon Cognito à des étendues compatibles avec RabbitMQ.

  3. Mettez à jour la configuration à l'aide de la AWS CLI commande update-configuration, comme indiqué dans l'exemple suivant. Dans cette commande, ajoutez l'ID de configuration que vous avez reçu en réponse à l'étape 1 de cette procédure. Par exemple, 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)"

    Cette commande renvoie une réponse similaire à l'exemple suivant.

    { "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. Créez un broker avec la configuration OAuth 2.0 que vous avez créée à l'étape 2 de cette procédure. Pour ce faire, utilisez la AWS CLI commande create-broker comme indiqué dans l'exemple suivant. Dans cette commande, indiquez l'ID de configuration et le numéro de révision que vous avez obtenus dans les réponses des étapes 1 et 2 respectivement. Par exemple : c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca et 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>}' \

    Cette commande renvoie une réponse similaire à l'exemple suivant.

    { "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. Vérifiez que le statut du courtier passe de àRUNNING, CREATION_IN_PROGRESS à l'aide de la AWS CLI commande describe-broker, comme indiqué dans l'exemple suivant. Dans cette commande, indiquez l'ID du courtier que vous avez obtenu dans le résultat de l'étape précédente. Par exemple,b-2a1b5133-a10c-49d2-879b-8c176c34cf73.

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

    Cette commande renvoie une réponse similaire à l'exemple suivant. La réponse suivante est une version abrégée de la sortie complète renvoyée par la describe-broker commande. Cette réponse indique le statut du courtier et la stratégie d'authentification utilisée pour sécuriser le courtier. Dans ce cas, la stratégie config_managed d'authentification indique que le courtier utilise OAuth 2 méthodes d'authentification.

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

    Pour vous connecter à la console de gestion RabbitMQ en utilisant OAuth2, le point de terminaison du courtier doit être ajouté en tant qu'URL de rappel valide dans le client d'application Amazon Cognito correspondant. Pour plus d'informations, reportez-vous à l'étape 5 de la configuration de notre exemple de stack Amazon Cognito CDK.

  6. Vérifiez l'authentification et l'autorisation OAuth 2.0 à l'aide du perf-test.sh script suivant.

    Utilisez ce script bash pour tester la connectivité à votre courtier Amazon MQ for RabbitMQ. Ce script obtient un jeton auprès d'Amazon Cognito et vérifie si la connexion a été correctement configurée. S'il est correctement configuré, vous verrez votre courtier publier et consommer des messages.

    Si vous recevez un ACCESS_REFUSED message d'erreur, vous pouvez résoudre les problèmes liés à vos paramètres de configuration en utilisant les CloudWatch journaux de votre courtier. Vous trouverez le lien vers le groupe de CloudWatch journaux de votre courtier dans la console Amazon MQ.

    Dans ce script, vous devez fournir les valeurs suivantes :

    • CLIENT_IDet CLIENT_SECRET : vous pouvez trouver ces valeurs sur la page des clients de l'application de la console Amazon Cognito.

    • Domaine Cognito : vous pouvez le trouver sur la console Amazon Cognito. Sous Branding, sélectionnez Domain. Sur la page Domaine, vous pouvez trouver cette valeur dans la section Serveurs de ressources.

    • Point de terminaison du courtier Amazon MQ : vous pouvez trouver cette valeur sous Connexions sur la page de détails du courtier de la console 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

Configuration de la OAuth version 2.0 et authentification simple avec Amazon Cognito

Lorsque vous créez un courtier avec une authentification OAuth 2.0, vous pouvez spécifier l'une des méthodes d'authentification suivantes :

  • OAuth 2.0 uniquement : pour utiliser cette méthode, ne fournissez pas de nom d'utilisateur ni de mot de passe lors de la création du courtier. La procédure précédente montre comment utiliser uniquement la méthode d'authentification OAuth 2.0.

  • Authentification OAuth 2.0 et authentification simple : pour utiliser cette méthode, fournissez un nom d'utilisateur et un mot de passe lors de la création du courtier. Ajoutez également auth_backends.2 = internal à la configuration de votre courtier, comme indiqué dans la procédure suivante.

Dans la procédure suivante, veillez à remplacer les valeurs d'espace réservé, telles que <ConfigurationId> et<Revision>, par leurs valeurs réelles.

  1. Pour utiliser les deux méthodes d'authentification, créez la configuration de votre courtier, comme indiqué dans l'exemple suivant.

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

    Cette configuration utilise des alias d'étendue pour mapper les étendues définies dans Amazon Cognito à des étendues compatibles avec RabbitMQ.

  2. Créez un courtier qui utilise les deux méthodes d'authentification, comme illustré dans l'exemple suivant.

    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. Vérifiez que l'état du courtier et que la configuration de la méthode d'authentification a été correctement configurée, comme décrit aux étapes 5 et 6 de la Configuration de l'authentification OAuth 2.0 avec Amazon Cognito procédure.