翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon MQ for RabbitMQ での OAuth 2.0 認証と認可の使用
このチュートリアルでは、Amazon Cognito を OAuth 2.0 プロバイダーとして使用して、Amazon MQ for RabbitMQ ブローカーの OAuth 2.0 認証を設定する方法について説明します。 Amazon MQ RabbitMQ Amazon Cognito OAuth
注記
Amazon Cognito は、中国 (北京) および中国 (寧夏) では利用できません。
重要
このチュートリアルは Amazon Cognito に固有のものですが、他の ID プロバイダー (IdPsを使用できます。詳細については、OAuth 2.0 認証の例
このページの内容
OAuth 2.0 認証を設定するための前提条件
このチュートリアルで必要な Amazon Cognito リソースを設定するには、RabbitMQ OAuth 2 プラグイン用の AWS CDK スタックである Amazon Cognito スタックをデプロイします。 Amazon Cognito RabbitMQ OAuth
Amazon Cognito をセットアップするための前提条件
-
ユーザープールを作成して Amazon Cognito エンドポイントを設定します。これを行うには、「How to use OAuth 2.0 in Amazon Cognito: Learn about the different OAuth 2.0 grants
」というタイトルのブログを参照してください。 -
ユーザープール
rabbitmq
に という名前のリソースサーバーを作成し、、read:all
、write:all
configure:all
、および のスコープを定義しますtag:administrator
。これらのスコープは RabbitMQ アクセス許可に関連付けられます。リソースサーバーの作成の詳細については、「Amazon Cognito デベロッパーガイド」の「ユーザープールのリソースサーバーの定義 (AWS Management Console)」を参照してください。 Amazon Cognito
-
次のアプリケーションクライアントを作成します。
-
タイプのユーザープールのアプリケーションクライアント
Machine-to-Machine application
。これは、RabbitMQ AMQP クライアントに使用されるクライアントシークレットを持つ機密クライアントです。アプリケーションクライアントとその作成の詳細については、「アプリケーションクライアントタイプ」および「アプリケーションクライアントの作成」を参照してください。 -
タイプのユーザープールのアプリケーションクライアント
Single-page application
。これは、RabbitMQ マネジメントコンソールへのユーザーのログインに使用されるパブリッククライアントです。このアプリケーションクライアントを更新して、次の手順で作成する Amazon MQ for RabbitMQ ブローカーのエンドポイントを許可されたコールバック URL として含める必要があります。詳細については、Amazon Cognito コンソールを使用したマネージドログインの設定」を参照してください。
-
Amazon MQ をセットアップするための前提条件
-
OAuth 2.0 のセットアップが成功したかどうかを確認する bash スクリプトを実行するための Docker
のインストール。 -
AWS CLI version >=
2.28.23
ブローカーの作成時にユーザー名とパスワードの追加をオプションにします。
を使用して Amazon Cognito で OAuth 2.0 認証を設定する AWS CLI
次の手順は、Amazon Cognito を IdP として使用して Amazon MQ for RabbitMQ ブローカーの OAuth 2.0 認証を設定する方法を示しています。 Amazon Cognito IdP この手順では AWS CLI 、 を使用して必要なリソースを作成および設定します。
次の手順では、configurationID や Revision、<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>
、<2>
などのプレースホルダー値を実際の値に置き換えてください。
-
次の例に示すように、create-configuration AWS CLI コマンドを使用して新しい設定を作成します。
aws mq create-configuration \ --name "
rabbitmq-oauth2-config
" \ --engine-type "RABBITMQ" \ --engine-version "3.13"このコマンドは、次の例のようなレスポンスを返します。
{ "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" } -
次の例に示すように、OAuth 2.0
rabbitmq.conf
を認証および認可方法として使用する という設定ファイルを作成します。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この設定では、スコープエイリアス
を使用して、Amazon Cognito で定義されたスコープを RabbitMQ 互換スコープにマッピングします。 -
次の例に示すように、update-configuration AWS CLI コマンドを使用して設定を更新します。このコマンドでは、この手順のステップ 1 のレスポンスで受け取った設定 ID を追加します。例えば、
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)"このコマンドは、次の例のようなレスポンスを返します。
{ "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": [] } -
この手順のステップ 2 で作成した OAuth 2.0 設定を使用してブローカーを作成します。これを行うには、次の例に示すように create-broker AWS CLI コマンドを使用します。このコマンドでは、ステップ 1 と 2 のレスポンスで取得した設定 ID とリビジョン番号をそれぞれ指定します。例えば、
c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca
と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>
}' \このコマンドは、次の例のようなレスポンスを返します。
{ "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" } -
次の例に示すように、describe-broker AWS CLI コマンドを使用して
RUNNING
、ブローカーのステータスが からCREATION_IN_PROGRESS
に移行していることを確認します。このコマンドでは、前のステップの結果で取得したブローカー ID を指定します。例:b-2a1b5133-a10c-49d2-879b-8c176c34cf73
。aws mq describe-broker \ --broker-id "
<b-2a1b5133-a10c-49d2-879b-8c176c34cf73>
"このコマンドは、次の例のようなレスポンスを返します。次のレスポンスは、
describe-broker
コマンドが返す完全な出力の省略バージョンです。このレスポンスは、ブローカーのステータスと、ブローカーの保護に使用される認証戦略を示します。この場合、config_managed
認証戦略はブローカーが OAuth 2 認証方法を使用していることを示します。{ "AuthenticationStrategy": "config_managed", ..., "BrokerState": "RUNNING", ... }
OAuth2 を使用して RabbitMQ マネジメントコンソールにログインするには、ブローカーエンドポイントを、対応する Amazon Cognito アプリケーションクライアントの有効なコールバック URL として追加する必要があります。詳細については、サンプルの Amazon Cognito CDK スタック
のセットアップのステップ 5 を参照してください。 -
次の
perf-test.sh
スクリプトを使用して、OAuth 2.0 の認証と認可を検証します。この bash スクリプトを使用して、Amazon MQ for RabbitMQ ブローカーへの接続をテストします。このスクリプトは Amazon Cognito からトークンを取得し、接続が正しく設定されているかどうかを確認します。正常に設定されると、ブローカーがメッセージを発行して使用します。
ACCESS_REFUSED
エラーが発生した場合は、ブローカーの CloudWatch ログを使用して設定のトラブルシューティングを行うことができます。ブローカーの CloudWatch ロググループのリンクは、Amazon MQ コンソールにあります。このスクリプトでは、次の値を指定する必要があります。
-
CLIENT_ID
およびCLIENT_SECRET
: これらの値は、Amazon Cognito コンソールのアプリクライアントページで確認できます。 -
Cognito ドメイン: これは Amazon Cognito コンソールで確認できます。ブランディング で、ドメイン を選択します。ドメインページで、この値はリソースサーバーセクションにあります。
-
Amazon MQ ブローカーエンドポイント: この値は、Amazon MQ コンソールのブローカーの詳細ページの Connections にあります。
#! /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 -
Amazon Cognito による OAuth 2.0 と簡易認証の設定
OAuth 2.0 認証を使用してブローカーを作成する場合、次のいずれかの認証方法を指定できます。
-
OAuth 2.0 のみ: この方法を使用するには、ブローカーの作成時にユーザー名とパスワードを指定しないでください。前の手順は、OAuth 2.0 認証方法のみを使用する方法を示しています。
-
OAuth 2.0 と簡易認証の両方: この方法を使用するには、ブローカーの作成時にユーザー名とパスワードを指定します。また、次の手順に示すように、ブローカー設定
auth_backends.2 = internal
に を追加します。
次の手順では、<ConfigurationId>
や <Revision>
などのプレースホルダー値を実際の値に置き換えてください。
-
両方の認証方法を使用するには、次の例に示すように、ブローカー設定を作成します。
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:*/*この設定では、スコープエイリアス
を使用して、Amazon Cognito で定義されたスコープを RabbitMQ 互換スコープにマッピングします。 -
次の例に示すように、両方の認証方法を使用するブローカーを作成します。
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>
"}]' -
Amazon Cognito による OAuth 2.0 認証の設定 手順のステップ 5 と 6 で説明されているように、ブローカーのステータスと認証方法の設定が成功したことを確認します。