Amazon MQ for RabbitMQ での IAM 認証と認可の使用 - Amazon MQ

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon MQ for RabbitMQ での IAM 認証と認可の使用

次の手順は、Amazon MQ for RabbitMQ AWS ブローカーの IAM 認証と認可を有効にする方法を示しています。IAM を有効にすると、ユーザーは IAM AWS 認証情報を使用して RabbitMQ Management API にアクセスし、AMQP 経由で接続するための認証を行うことができます。Amazon MQ for RabbitMQ での IAM 認証の仕組みの詳細については、「」を参照してくださいAmazon MQ for RabbitMQ の IAM 認証と認可

前提条件

  • AWS Amazon MQ for RabbitMQ ブローカーを所有する AWS アカウントの管理者認証情報

  • これらの管理者認証情報で設定されたシェル環境 (CLI AWS プロファイルまたは環境変数を使用)

  • AWS CLI のインストールと設定

  • jq コマンドライン JSON プロセッサがインストールされている

  • curl コマンドラインツールのインストール

を使用した IAM 認証と認可の設定 AWS CLI

  1. 環境変数を設定する

    ブローカーに必要な環境変数を設定します。

    export AWS_DEFAULT_REGION=<region> export BROKER_ID=<broker-id>
  2. アウトバウンド JWT トークンを有効にする

    AWS アカウントのアウトバウンドウェブ ID フェデレーションを有効にします。

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

    出力には、アカウントの一意の発行者識別子 URL が 形式で表示されますhttps://<id>.tokens.sts.global.api.aws

  3. IAM ポリシードキュメントを作成する

    ウェブ ID トークンを取得するアクセス許可を付与するポリシードキュメントを作成します。

    cat > policy.json << 'EOF' { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "sts:GetWebIdentityToken", "sts:TagGetWebIdentityToken" ], "Resource": "*" } ] } EOF
  4. 信頼ポリシーを作成する

    発信者 ID を取得し、信頼ポリシードキュメントを作成します。

    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
  5. IAM ロールを作成する

    IAM ロールを作成し、ポリシーをアタッチします。

    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
  6. RabbitMQ OAuth2 設定を構成する

    OAuth2 認証および認可設定を使用して RabbitMQ 設定ファイルを作成します。

    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
  7. ブローカー設定を更新する

    新しい設定をブローカーに適用します。

    # 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

    ブローカーのステータスが に戻るのを待ってRUNNINGから、次のステップに進みます。

  8. JWT トークンを取得する

    IAM ロールを引き受け、ウェブ ID トークンを取得します。

    # 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')
  9. RabbitMQ 管理 API にアクセスする

    JWT トークンを使用して RabbitMQ Management API にアクセスします。

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

    応答が成功すると、IAM 認証が正しく動作していることが確認されます。レスポンスには、JSON 形式のブローカーの概要情報が含まれています。

  10. JWT トークンを使用して AMQP 経由で接続する

    パフォーマンステストツールで JWT トークンを使用して AMQP 接続をテストします。

    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

    ACCESS_REFUSED エラーが発生した場合は、ブローカーの CloudWatch ログを使用して設定をトラブルシューティングできます。ブローカーの CloudWatch Logs ロググループのリンクは、Amazon MQ コンソールにあります。