View a markdown version of this page

Utilizzo dell'autenticazione e dell'autorizzazione OAuth 2.0 per Amazon MQ for RabbitMQ - Amazon MQ

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo dell'autenticazione e dell'autorizzazione OAuth 2.0 per Amazon MQ for RabbitMQ

Questo tutorial descrive come configurare l'autenticazione OAuth 2.0 per i broker Amazon MQ for RabbitMQ utilizzando Amazon Cognito come provider OAuth 2.0.

Nota

Amazon Cognito non è disponibile in Cina (Pechino) e Cina (Ningxia).

Importante

Questo tutorial è specifico per Amazon Cognito, ma puoi utilizzare altri provider di identità ()IdPs. Per ulteriori informazioni, consulta Esempi di autenticazione OAuth 2.0.

Prerequisiti per configurare l'autenticazione OAuth 2.0

Puoi impostare le risorse di Amazon Cognito richieste in questo tutorial distribuendo lo stack AWS CDK Amazon Cognito stack for RabbitMQ OAuth 2. Se stai configurando Amazon Cognito manualmente, assicurati di soddisfare i seguenti prerequisiti prima di configurare OAuth 2.0 sui tuoi broker Amazon MQ for RabbitMQ:

Prerequisiti per configurare Amazon Cognito
Prerequisito per configurare Amazon MQ
  • Un'installazione Docker funzionante per eseguire uno script bash che verifica se la configurazione di OAuth 2.0 è riuscita o meno.

  • AWS CLIversione >= 2.28.23 per rendere opzionale l'aggiunta di un nome utente e una password durante la creazione del broker.

Configurazione dell'autenticazione OAuth 2.0 con Amazon Cognito utilizzandoAWS CLI

La procedura seguente mostra come configurare l'autenticazione OAuth 2.0 per i broker Amazon MQ for RabbitMQ utilizzando Amazon Cognito come IdP. Questa procedura serve a creare e configurare le risorse AWS CLI necessarie.

Nella procedura seguente, assicuratevi di sostituire i valori segnaposto, come ConfigurationID e Revision, con i relativi valori <c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca> effettivi<2>.

  1. Create una nuova configurazione utilizzando il AWS CLI comando create-configuration, come illustrato nell'esempio seguente.

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

    Questo comando restituisce una risposta simile all'esempio seguente.

    { "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. Crea un file di configurazione chiamato rabbitmq.conf per utilizzare OAuth 2.0 come metodo di autenticazione e autorizzazione, come illustrato nell'esempio seguente.

    auth_backends.1 = oauth2 # FIXME: Update this value with the token signing key URL of your Amazon Cognito user pool. # If you used theAWS CDKstack to deploy Amazon Cognito, this is one of the stack outputs. auth_oauth2.jwks_uri = ${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

    Questa configurazione utilizza alias di ambito per mappare gli ambiti definiti in Amazon Cognito a ambiti compatibili con RabbitMQ.

  3. Aggiorna la configurazione utilizzando il comando update-configuration AWS CLI come mostrato nell'esempio seguente. In questo comando, aggiungi l'ID di configurazione ricevuto nella risposta del passaggio 1 di questa procedura. Ad esempio, 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)"

    Questo comando restituisce una risposta simile all'esempio seguente.

    { "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. Crea un broker con la configurazione OAuth 2.0 creata nel passaggio 2 di questa procedura. A tale scopo, utilizzate il AWS CLI comando create-broker come illustrato nell'esempio seguente. In questo comando, fornite l'ID di configurazione e il numero di revisione ottenuti rispettivamente nelle risposte dei passaggi 1 e 2. Ad esempio 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>}' \

    Questo comando restituisce una risposta simile all'esempio seguente.

    { "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. Verificate che lo stato del broker passi da CREATION_IN_PROGRESS aRUNNING, utilizzando il AWS CLI comando describe-broker, come illustrato nell'esempio seguente. In questo comando, fornisci l'ID broker che hai ottenuto nel risultato del passaggio precedente. Ad esempio,. b-2a1b5133-a10c-49d2-879b-8c176c34cf73

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

    Questo comando restituisce una risposta simile all'esempio seguente. La risposta seguente è una versione abbreviata dell'output completo restituito dal describe-broker comando. Questa risposta mostra lo stato del broker e la strategia di autenticazione utilizzata per proteggere il broker. In questo caso, la strategia di config_managed autenticazione indica che il broker utilizza il metodo di autenticazione OAuth 2.

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

    Per accedere alla console di gestione di RabbitMQ utilizzando OAuth2, l'endpoint del broker deve essere aggiunto come URL di callback valido nel client dell'app Amazon Cognito corrispondente. Per ulteriori informazioni, consulta la Fase 5 della configurazione del nostro stack Amazon Cognito CDK di esempio.

  6. Verifica l'autenticazione e l'autorizzazione OAuth 2.0 con lo script seguente. perf-test.sh

    Usa questo script bash per testare la connettività al tuo broker Amazon MQ for RabbitMQ. Questo script ottiene un token da Amazon Cognito e verifica se la connessione è stata configurata correttamente. Se è configurato correttamente, vedrai il tuo broker pubblicare e consumare messaggi.

    Se ricevi un ACCESS_REFUSED errore, puoi risolvere i problemi delle impostazioni di configurazione utilizzando CloudWatch i log del tuo broker. Puoi trovare il link per il gruppo di CloudWatch log del tuo broker nella console Amazon MQ.

    In questo script, dovrai fornire i seguenti valori:

    • CLIENT_IDeCLIENT_SECRET: puoi trovare questi valori nella pagina App client della console Amazon Cognito.

    • Dominio Cognito: puoi trovarlo nella console Amazon Cognito. In Branding, scegli Dominio. Nella pagina Dominio, puoi trovare questo valore nella sezione Server di risorse.

    • Endpoint del broker Amazon MQ: puoi trovare questo valore in Connessioni nella pagina dei dettagli del broker della 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

Configurazione di OAuth 2.0 e autenticazione semplice con Amazon Cognito

Quando crei un broker con autenticazione OAuth 2.0, puoi specificare uno dei seguenti metodi di autenticazione:

  • Solo OAuth 2.0: per utilizzare questo metodo, non fornire nome utente e password durante la creazione del broker. La procedura precedente mostra come utilizzare solo il metodo di autenticazione OAuth 2.0.

  • Sia OAuth 2.0 che l'autenticazione semplice: per utilizzare questo metodo, fornisci un nome utente e una password durante la creazione del broker. Inoltre, aggiungili auth_backends.2 = internal alla configurazione del broker, come illustrato nella procedura seguente.

Nella procedura seguente, assicuratevi di sostituire i valori segnaposto, ad esempio <ConfigurationId> e<Revision>, con i valori effettivi.

  1. Per utilizzare entrambi i metodi di autenticazione, create la configurazione del broker, come illustrato nell'esempio seguente.

    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_uri = ${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:*/*

    Questa configurazione utilizza alias di ambito per mappare gli ambiti definiti in Amazon Cognito a ambiti compatibili con RabbitMQ.

  2. Crea un broker che utilizzi entrambi i metodi di autenticazione, come mostrato nell'esempio seguente.

    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. Verifica che lo stato del broker e la configurazione per l'impostazione del metodo di autenticazione abbiano avuto esito positivo, come descritto nei passaggi 5 e 6 della Configurazione dell'autenticazione OAuth 2.0 con Amazon Cognito procedura.