

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan otentikasi dan otorisasi IAM untuk Amazon MQ untuk RabbitMQ
<a name="rabbitmq-iam-tutorial"></a>

Prosedur berikut menunjukkan cara mengaktifkan otentikasi dan otorisasi AWS IAM untuk Amazon MQ untuk broker RabbitMQ. Setelah mengaktifkan IAM, pengguna dapat mengautentikasi menggunakan kredensional AWS IAM untuk mengakses API Manajemen RabbitMQ dan terhubung melalui AMQP. Untuk detail tentang cara kerja otentikasi IAM dengan Amazon MQ untuk RabbitMQ, lihat. [Otentikasi dan otorisasi IAM untuk Amazon MQ untuk RabbitMQ](iam-for-amq-for-rabbitmq.md)

## Prasyarat
<a name="iam-tutorial-prerequisites"></a>
+ AWS kredensi administrator untuk AWS akun yang memiliki Amazon MQ untuk broker RabbitMQ
+ Lingkungan shell yang dikonfigurasi dengan kredensi administrator ini (menggunakan profil AWS CLI atau variabel lingkungan)
+ AWS CLI diinstal dan dikonfigurasi
+ `jq`prosesor JSON baris perintah diinstal
+ `curl`alat baris perintah diinstal

## Mengkonfigurasi otentikasi dan otorisasi IAM menggunakan AWS CLI
<a name="iam-tutorial-procedure"></a>

1. **Tetapkan variabel lingkungan**

   Tetapkan variabel lingkungan yang diperlukan untuk broker Anda:

   ```
   export AWS_DEFAULT_REGION=<region>
   export BROKER_ID=<broker-id>
   ```

1. **Aktifkan token JWT keluar**

   Aktifkan federasi identitas web keluar untuk AWS akun Anda:

   ```
   ISSUER_IDENTIFIER=$(aws iam enable-outbound-web-identity-federation --query 'IssuerIdentifier' --output text)
   echo $ISSUER_IDENTIFIER
   ```

   Output menampilkan URL pengenal penerbit unik untuk akun Anda dalam format. `https://<id>.tokens.sts.global.api.aws`

1. **Buat dokumen kebijakan IAM**

   Buat dokumen kebijakan yang memberikan izin untuk mendapatkan token identitas web:

   ```
   cat > policy.json << 'EOF'
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "sts:GetWebIdentityToken",
                   "sts:TagGetWebIdentityToken"
               ],
               "Resource": "*"
           }
       ]
   }
   EOF
   ```

1. **Buat kebijakan kepercayaan**

   Ambil identitas penelepon Anda dan buat dokumen kebijakan kepercayaan:

   ```
   CALLER_ARN=$(aws sts get-caller-identity --query Arn --output text)
   cat > trust-policy.json << EOF
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "$CALLER_ARN"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   EOF
   ```

1. **Buat peran IAM**

   Buat peran IAM dan lampirkan kebijakan:

   ```
   aws iam create-role --role-name RabbitMqAdminRole --assume-role-policy-document file://trust-policy.json
   aws iam put-role-policy --role-name RabbitMqAdminRole --policy-name RabbitMqAdminRolePolicy --policy-document file://policy.json
   ```

1. **Konfigurasikan pengaturan OAuth2 RabbitMQ**

   Buat file konfigurasi RabbitMQ dengan pengaturan OAuth2 otentikasi dan otorisasi:

   ```
   cat > rabbitmq.conf << EOF
   auth_backends.1 = oauth2
   auth_backends.2 = internal
   
   auth_oauth2.jwks_url = ${ISSUER_IDENTIFIER}/.well-known/jwks.json
   auth_oauth2.resource_server_id = rabbitmq
   auth_oauth2.scope_prefix = rabbitmq/
   
   auth_oauth2.additional_scopes_key = sub
   auth_oauth2.scope_aliases.1.alias = arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/RabbitMqAdminRole
   auth_oauth2.scope_aliases.1.scope = rabbitmq/tag:administrator rabbitmq/read:*/* rabbitmq/write:*/* rabbitmq/configure:*/*
   auth_oauth2.https.hostname_verification = wildcard
   
   management.oauth_enabled = true
   EOF
   ```

1. **Perbarui konfigurasi broker**

   Terapkan konfigurasi baru ke broker Anda:

   ```
   # Retrieve the configuration ID
   CONFIG_ID=$(aws mq describe-broker --broker-id $BROKER_ID --query 'Configurations[0].Id' --output text)
   
   # Create a new configuration revision
   REVISION=$(aws mq update-configuration --configuration-id $CONFIG_ID --data "$(cat rabbitmq.conf | base64 --wrap=0)" --query 'LatestRevision.Revision' --output text)
   
   # Apply the configuration to the broker
   aws mq update-broker --broker-id $BROKER_ID --configuration Id=$CONFIG_ID,Revision=$REVISION
   
   # Reboot the broker to apply changes
   aws mq reboot-broker --broker-id $BROKER_ID
   ```

   Tunggu status broker kembali `RUNNING` sebelum melanjutkan ke langkah berikutnya.

1. **Dapatkan token JWT**

   Asumsikan peran IAM dan dapatkan token identitas web:

   ```
   # Assume the RabbitMqAdminRole
   ROLE_CREDS=$(aws sts assume-role --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/RabbitMqAdminRole --role-session-name rabbitmq-session)
   
   # Configure the session with temporary credentials
   export AWS_ACCESS_KEY_ID=$(echo "$ROLE_CREDS" | jq -r '.Credentials.AccessKeyId')
   export AWS_SECRET_ACCESS_KEY=$(echo "$ROLE_CREDS" | jq -r '.Credentials.SecretAccessKey')
   export AWS_SESSION_TOKEN=$(echo "$ROLE_CREDS" | jq -r '.Credentials.SessionToken')
   
   # Obtain the web identity token
   TOKEN_RESPONSE=$(aws sts get-web-identity-token \
       --audience "rabbitmq" \
       --signing-algorithm ES384 \
       --duration-seconds 300 \
       --tags Key=scope,Value="rabbitmq/tag:administrator")
   
   # Extract the token
   TOKEN=$(echo "$TOKEN_RESPONSE" | jq -r '.WebIdentityToken')
   ```

1. **Akses API Manajemen RabbitMQ**

   Gunakan token JWT untuk mengakses API Manajemen RabbitMQ:

   ```
   BROKER_URL=<broker-id>.mq.<region>.on.aws
   
   curl -u ":$TOKEN" \
       -X GET https://${BROKER_URL}/api/overview \
       -H "Content-Type: application/json"
   ```

   Respons yang berhasil mengonfirmasi bahwa otentikasi IAM berfungsi dengan benar. Tanggapan tersebut berisi informasi ikhtisar broker dalam format JSON.

1. **Connect melalui AMQP menggunakan token JWT**

   Uji konektivitas AMQP menggunakan token JWT dengan alat uji sempurna:

   ```
   BROKER_DNS=<broker-endpoint>
   CONNECTION_STRING=amqps://:${TOKEN}@${BROKER_DNS}:5671
   
   docker run -it --rm --ulimit nofile=40960:40960 pivotalrabbitmq/perf-test:latest \
       --queue-pattern 'test-queue-%d' --queue-pattern-from 1 --queue-pattern-to 1 \
       --producers 1 --consumers 1 \
       --uri ${CONNECTION_STRING} \
       --flag persistent --rate 1
   ```

   Jika Anda menerima `ACCESS_REFUSED` kesalahan, Anda dapat memecahkan masalah pengaturan konfigurasi Anda dengan menggunakan CloudWatch log untuk broker Anda. Anda dapat menemukan tautan untuk grup CloudWatch log Log untuk broker Anda di konsol Amazon MQ.