Amazon MQ for RabbitMQ での OAuth 2.0 認証と認可の使用
このチュートリアルでは、Amazon Cognito を OAuth 2.0 プロバイダーとして使用して、Amazon MQ for RabbitMQ ブローカーの OAuth 2.0 認証を設定する方法について説明します。
注記
Amazon Cognito は、中国 (北京) および中国 (寧夏) では使用できません。
重要
このチュートリアルは Amazon Cognito に固有のものですが、他の ID プロバイダー (IdP) を使用できます。詳細については、「OAuth 2.0 認証の例
このページの内容
OAuth 2.0 認証を設定するための前提条件
このチュートリアルで必要な Amazon Cognito リソースを設定するには、AWS CDK スタックである RabbitMQ OAuth 2 プラグイン用 Amazon Cognito スタック
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 マネジメントコンソール) のリソースサーバーの定義」を参照してください。
-
以下のアプリケーションクライアントを作成します。
-
タイプ
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。
AWS CLI を使用した Amazon Cognito による OAuth 2.0 認証の設定
次の手順は、Amazon Cognito を IdP として使用して Amazon MQ for RabbitMQ ブローカーの OAuth 2.0 認証を設定する方法を示しています。この手順では、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 コマンドを使用して、ブローカーのステータスが
CREATION_IN_PROGRESSからRUNNINGに移行していることを確認します。このコマンドでは、前のステップの結果で取得したブローカー 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 コンソールのブローカーの詳細ページの [接続] にあります。
#! /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 で説明されているように、ブローカーのステータスと認証方法の設定が成功したことを確認します。