

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
<a name="oauth-tutorial"></a>

Questo tutorial descrive come configurare [l'autenticazione OAuth 2.0](oauth-for-amq-for-rabbitmq.md) 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](https://www.rabbitmq.com/docs/oauth2-examples).

**Topics**
+ [Prerequisiti per configurare l'autenticazione OAuth 2.0](#oauth-tutorial-prerequisites)
+ [Configurazione dell'autenticazione OAuth 2.0 con Amazon Cognito utilizzandoAWS CLI](#oauth-tutorial-config-cognito-using-cli)
+ [Configurazione di OAuth 2.0 e autenticazione semplice con Amazon Cognito](#oauth-tutorial-config-both-auth-methods-using-cli)

## Prerequisiti per configurare l'autenticazione OAuth 2.0
<a name="oauth-tutorial-prerequisites"></a>

Puoi impostare le risorse di Amazon Cognito richieste in questo tutorial distribuendo lo stack AWS CDK Amazon Cognito stack for RabbitMQ [OAuth](https://github.com/aws-samples/amazon-mq-samples/tree/main/rabbitmq-samples/rabbitmq-oauth2-cognito-sample) 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**
+ Configura un endpoint Amazon Cognito creando un pool di utenti. A tale scopo, consulta il blog intitolato [Come usare OAuth 2.0 in Amazon Cognito: scopri](https://aws.amazon.com/blogs/security/how-to-use-oauth-2-0-in-amazon-cognito-learn-about-the-different-oauth-2-0-grants/) le diverse sovvenzioni OAuth 2.0.
+ Crea un server di risorse chiamato `rabbitmq` nel pool di utenti con i seguenti ambiti definiti:,, e. `read:all` `write:all` `configure:all` `tag:administrator` Questi ambiti verranno associati alle autorizzazioni RabbitMQ.

  Per informazioni sulla creazione di un server di risorse, consulta [Definizione di un server di risorse per il pool di utenti (Console di gestione AWS)](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html#cognito-user-pools-define-resource-servers-console) nella *Amazon Cognito Developer Guide*.
+ Crea i seguenti client applicativi:
  + Client applicativo per il tipo di pool di utenti`Machine-to-Machine application`. Si tratta di un client riservato con un client segreto che verrà utilizzato per i client RabbitMQ AMQP. [Per ulteriori informazioni sui client applicativi e sulla creazione di un client, consulta [Tipi di client di app e Creazione di un client di](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html#user-pool-settings-client-app-client-types) app.](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html#cognito-user-pools-app-idp-settings-console-create)
  + Client applicativo per il tipo di pool di utenti`Single-page application`. Si tratta di un client pubblico che verrà utilizzato per accedere gli utenti alla console di gestione di RabbitMQ. È necessario aggiornare questo client dell'applicazione per includere l'endpoint del broker Amazon MQ for RabbitMQ che creerai nella procedura seguente come URL di callback consentito. Per ulteriori informazioni, consulta [Configurazione dell'accesso gestito con la console Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#set-up-managed-login).

**Prerequisito per configurare Amazon MQ**
+ Un'installazione [Docker](https://docs.docker.com/engine/install/) 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
<a name="oauth-tutorial-config-cognito-using-cli"></a>

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](https://docs.aws.amazon.com/cli/latest/reference/mq/create-configuration.html), 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"
   }
   ```

1. 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](https://www.rabbitmq.com/docs/oauth2#scope-translation) per mappare gli ambiti definiti in Amazon Cognito a ambiti compatibili con RabbitMQ.

1. Aggiorna la configurazione utilizzando il comando [update-configuration](https://docs.aws.amazon.com/cli/latest/reference/mq/update-configuration.html) 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": []
   }
   ```

1. 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](https://docs.aws.amazon.com/cli/latest/reference/mq/create-broker.html) 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"
   }
   ```

1. Verificate che lo stato del broker passi da `CREATION_IN_PROGRESS` a`RUNNING`, utilizzando il AWS CLI comando [describe-broker](https://docs.aws.amazon.com/cli/latest/reference/mq/describe-broker.html), 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](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) di esempio. 

1. 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_ID`e`CLIENT_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
<a name="oauth-tutorial-config-both-auth-methods-using-cli"></a>

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](#oauth-tutorial-config-cognito-using-cli) 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](https://www.rabbitmq.com/docs/oauth2#scope-translation) per mappare gli ambiti definiti in Amazon Cognito a ambiti compatibili con RabbitMQ.

1. 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>}}"}]'
   ```

1. 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](#oauth-tutorial-config-cognito-using-cli) procedura.