

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 2.0. OAuth 

**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 utilizzando AWS CLI](#oauth-tutorial-config-cognito-using-cli)
+ [Configurazione 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 Amazon Cognito richieste in questo tutorial distribuendo lo stack AWS CDK Amazon Cognito stack for [RabbitMQ 2 plug-in](https://github.com/aws-samples/amazon-mq-samples/tree/main/rabbitmq-samples/rabbitmq-oauth2-cognito-sample). OAuth Se stai configurando Amazon Cognito manualmente, assicurati di soddisfare i seguenti prerequisiti prima di configurare la OAuth versione 2.0 sui 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 le OAuth diverse](https://aws.amazon.com/blogs/security/how-to-use-oauth-2-0-in-amazon-cognito-learn-about-the-different-oauth-2-0-grants/) sovvenzioni 2.0.
+ Crea un server di risorse chiamato `rabbitmq` nel pool di utenti con i seguenti ambiti definiti:`read:all`,, `write:all` e. `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. Devi 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 OAuth 2.0 è riuscita o meno.
+ AWS CLI versione >= `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 utilizzando AWS 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 AWS CLI a creare e configurare le risorse 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. Create un file di configurazione chiamato **rabbitmq.conf** a 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 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
   ```

   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 OAuth 2 metodi di autenticazione.

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

    Per accedere alla console di gestione 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 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:
+ **OAuth Solo 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.
+ **Autenticazione OAuth 2.0 e semplice**: per utilizzare questo metodo, fornisci un nome utente e una password durante la creazione del broker. Inoltre, `auth_backends.2 = internal` aggiungetelo 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_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:*/*
   ```

   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.