

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

# Amazon MQ for RabbitMQ での SSL 証明書認証の使用
<a name="rabbitmq-ssl-tutorial"></a>

このチュートリアルでは、プライベート認証機関を使用して Amazon MQ for RabbitMQ ブローカーの SSL 証明書認証を設定する方法について説明します。

**注記**  
SSL 証明書認証プラグインは、Amazon MQ for RabbitMQ バージョン 4 以降でのみ使用できます。

**Topics**
+ [SSL 証明書認証を設定するための前提条件](#rabbitmq-ssl-tutorial-prerequisites)
+ [CLI を使用した RabbitMQ での SSL AWS 証明書認証の設定](#rabbitmq-ssl-tutorial-configure-cli)

## SSL 証明書認証を設定するための前提条件
<a name="rabbitmq-ssl-tutorial-prerequisites"></a>

SSL 証明書認証は、相互 TLS (mTLS) を使用して X.509 証明書を使用してクライアントを認証します。このチュートリアルで必要な AWS リソースを設定するには、[AWS Amazon MQ for RabbitMQ mTLS 統合用の CDK スタック](https://github.com/aws-samples/amazon-mq-samples/blob/main/rabbitmq-samples/rabbitmq-mtls-sample/)をデプロイします。

この CDK スタックは、認証機関、クライアント証明書、IAM ロールなど、必要なすべての AWS リソースを自動的に作成します。スタックによって作成されたリソースの完全なリストについては、パッケージ README を参照してください。

**注記**  
CDK スタックをデプロイする前に、 `RABBITMQ_TEST_USER_NAME`環境変数を設定します。この値はクライアント証明書の共通名 (CN) として使用され、チュートリアルのステップで使用するユーザー名と一致する必要があります。例: `export RABBITMQ_TEST_USER_NAME="myuser"`

CDK スタックを使用する代わりにリソースを手動で設定する場合は、Amazon MQ for RabbitMQ ブローカーで SSL 証明書認証を設定する前に、同等のインフラストラクチャが整っていることを確認してください。

### Amazon MQ をセットアップするための前提条件
<a name="rabbitmq-ssl-tutorial-prerequisite-cli"></a>

AWS CLI バージョン >= 2.28.23。ブローカーの作成時にユーザー名とパスワードをオプションで追加します。

## CLI を使用した RabbitMQ での SSL AWS 証明書認証の設定
<a name="rabbitmq-ssl-tutorial-configure-cli"></a>

この手順では、 CLI AWS を使用して必要なリソースを作成および設定します。次の手順では、configurationID や Revision、 `<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>` などのプレースホルダー値を実際の値に置き換え`<2>`てください。

1. 次の例に示すように、`create-configuration` AWS CLI コマンドを使用して新しい設定を作成します。

   ```
   aws mq create-configuration \
     --name "rabbitmq-ssl-config" \
     --engine-type "RABBITMQ" \
     --engine-version "4.2"
   ```

   このコマンドでは、次の例のようなレスポンスが返されます。

   ```
   {
       "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-ssl-config on RabbitMQ 4.2",
           "Revision": 1
       },
       "Name": "rabbitmq-ssl-config"
   }
   ```

1. 次の例に示すように、SSL 証明書認証を使用する`rabbitmq.conf`ように という設定ファイルを作成します。テンプレート内のすべてのプレースホルダー値 ( でマーク) を`${...}`、デプロイされた AWS CDK 前提条件スタック出力または同等のインフラストラクチャの実際の値に置き換えます。

   ```
   auth_mechanisms.1 = EXTERNAL
   ssl_cert_login_from = common_name
   
   auth_backends.1 = internal
   
   # Reject if no client cert
   ssl_options.verify = verify_peer
   ssl_options.fail_if_no_peer_cert = true
   
   # AWS integration for secure credential retrieval
   # For more information, see https://github.com/amazon-mq/rabbitmq-aws
   
   # FIXME: Replace the ${...} placeholders with actual ARN values
   # from your deployed prerequisite CDK stack outputs.
   aws.arns.assume_role_arn = ${AmazonMqAssumeRoleArn}
   aws.arns.ssl_options.cacertfile = ${CaCertArn}
   ```

1. 次の例に示すように、`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-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "Created": "2025-07-17T16:57:04.520931+00:00",
       "Id": "c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca",
       "LatestRevision": {
           "Created": "2025-07-17T16:57:39.172000+00:00",
           "Revision": 2
       },
       "Name": "rabbitmq-ssl-config",
       "Warnings": []
   }
   ```

1. この手順のステップ 2 で作成した SSL 証明書認証設定を使用してブローカーを作成します。これを行うには、次の例に示すように `create-broker` AWS CLI コマンドを使用します。このコマンドでは、ステップ 1 と 2 のレスポンスで取得した設定 ID とリビジョン番号をそれぞれ指定します。例えば、`c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca` と `2` です。

   ```
   aws mq create-broker \
     --broker-name "rabbitmq-ssl-test-1" \
     --engine-type "RABBITMQ" \
     --engine-version "4.2" \
     --host-instance-type "mq.m7g.large" \
     --deployment-mode "SINGLE_INSTANCE" \
     --logs '{"General": true}' \
     --publicly-accessible \
     --configuration '{"Id": "<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>","Revision": <2>}' \
     --users '[{"Username":"testuser","Password":"testpassword"}]'
   ```

   このコマンドでは、次の例のようなレスポンスが返されます。

   ```
   {
       "BrokerArn": "arn:aws:mq:us-west-2:123456789012:broker:rabbitmq-ssl-test-1:b-2a1b5133-a10c-49d2-879b-8c176c34cf73",
       "BrokerId": "b-2a1b5133-a10c-49d2-879b-8c176c34cf73"
   }
   ```

1. 次の例に示すように `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`認証戦略はブローカーが SSL 証明書認証方法を使用していることを示します。

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

1. 次の`ssl.sh`スクリプトを使用して SSL 証明書認証を検証します。

   この bash スクリプトを使用して、Amazon MQ for RabbitMQ ブローカーへの接続をテストします。このスクリプトは、認証にクライアント証明書を使用し、接続が正しく設定されているかどうかを確認します。正常に設定されると、ブローカーがメッセージを発行して消費します。

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

   このスクリプトでは、次の値を指定する必要があります。
   + `USERNAME`: クライアント証明書の共通名 (CN)。
   + `CLIENT_KEYSTORE`: クライアントキーストアファイルへのパス (PKCS12 形式）。前提条件の CDK スタックを使用した場合、デフォルトのパスは です`$(pwd)/certs/client-keystore.p12`。
   + `KEYSTORE_PASSWORD`: クライアントキーストアのパスワード。前提条件の CDK スタックを使用した場合、デフォルトのパスワードは です`changeit`。
   + `BROKER_DNS`: この値は、Amazon MQ コンソールのブローカーの詳細ページの **Connections** にあります。

   ```
   #! /bin/bash
   set -e
   
   # Client information
   ## FIXME: Update this value with the client ID and secret of your confidential application client
   USERNAME=<client_cert_common_name>
   CLIENT_KEYSTORE=$(pwd)/certs/client-keystore.p12
   KEYSTORE_PASSWORD=changeit
   
   BROKER_DNS=<broker_dns>
   CONNECTION_STRING=amqps://${BROKER_DNS}:5671 
   
   # Produce/consume messages using the above connection string
   QUEUES_COUNT=1
   PRODUCERS_COUNT=1
   CONSUMERS_COUNT=1
   PRODUCER_RATE=1
   
   finch run --rm --ulimit nofile=40960:40960 \
       -v ${CLIENT_KEYSTORE}:/certs/client-keystore.p12:ro \
       -e JAVA_TOOL_OPTIONS="-Djavax.net.ssl.keyStore=/certs/client-keystore.p12 -Djavax.net.ssl.keyStorePassword=${KEYSTORE_PASSWORD} -Djavax.net.ssl.keyStoreType=PKCS12" \
       pivotalrabbitmq/perf-test:latest \
       --queue-pattern 'test-queue-cert-%d' --queue-pattern-from 1 --queue-pattern-to $QUEUES_COUNT \
       --producers $PRODUCERS_COUNT --consumers $CONSUMERS_COUNT \
       --id "cert-test${QUEUES_COUNT}q${PRODUCERS_COUNT}p${CONSUMERS_COUNT}c${PRODUCER_RATE}r" \
       --uri ${CONNECTION_STRING} \
       --sasl-external \
       --use-default-ssl-context \
       --flag persistent --rate $PRODUCER_RATE
   ```