本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
針對 Amazon MQ for RabbitMQ 使用 SSL 憑證身分驗證
本教學課程說明如何使用私有憑證授權機構設定 Amazon MQ for RabbitMQ 代理程式的 SSL 憑證驗證。
注意
SSL 憑證身分驗證外掛程式僅適用於 Amazon MQ for RabbitMQ 第 4 版及更高版本。
設定 SSL 憑證身分驗證的先決條件
SSL 憑證驗證使用交互 TLS (mTLS) 來驗證使用 X.509 憑證的用戶端。您可以部署 AWS Amazon MQ for RabbitMQ mTLS 整合的 CDK 堆疊
此 CDK 堆疊會自動建立所有必要 AWS 的資源,包括憑證授權單位、用戶端憑證和 IAM 角色。如需堆疊所建立資源的完整清單,請參閱套件 README。
注意
部署 CDK 堆疊之前,請設定 RABBITMQ_TEST_USER_NAME環境變數。此值將用作用戶端憑證中的通用名稱 (CN),並且必須符合您在教學課程中使用的使用者名稱。例如:export RABBITMQ_TEST_USER_NAME="myuser"
如果您要手動設定資源,而不是使用 CDK 堆疊,請確保在 Amazon MQ for RabbitMQ 代理程式上設定 SSL 憑證身分驗證之前,已具備同等的基礎設施。
設定 Amazon MQ 的先決條件
AWS CLI 版本 >= 2.28.23,以便在建立代理程式期間選擇性新增使用者名稱和密碼。
使用 CLI 在 RabbitMQ 中設定 SSL AWS 憑證身分驗證
此程序使用 AWS CLI 來建立和設定必要的資源。在下列程序中,請務必使用其實際值取代預留位置值,例如 configurationID 和 Revision<2>,<c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>以及 。
-
使用
create-configurationAWS 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" } -
建立名為 的組態檔案
rabbitmq.conf,以使用 SSL 憑證身分驗證,如下列範例所示。將範本中的所有預留位置值 (以 標示${...}) 取代為您部署 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} -
使用
update-configurationAWS 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": [] } -
使用您在此程序的步驟 2 中建立的 SSL 憑證身分驗證組態來建立代理程式。若要這樣做,請使用
create-brokerAWS 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" } -
使用
describe-brokerAWS CLI 命令,確認代理程式的狀態從 轉換為CREATION_IN_PROGRESSRUNNING,如下列範例所示。在此命令中,提供您在上一個步驟的結果中取得的代理程式 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", ... } -
使用以下
ssl.sh指令碼驗證 SSL 憑證身分驗證。使用此 bash 指令碼來測試 Amazon MQ for RabbitMQ 代理程式的連線能力。此指令碼使用您的用戶端憑證進行身分驗證,並驗證連線是否已正確設定。如果設定成功,您會看到代理程式發佈並取用訊息。
如果您收到
ACCESS_REFUSED錯誤,您可以使用代理程式的 CloudWatch 日誌對組態設定進行疑難排解。您可以在 Amazon MQ 主控台中找到代理程式的 CloudWatch 日誌群組連結。在此指令碼中,您需要提供下列值:
-
USERNAME:用戶端憑證的通用名稱 (CN)。 -
CLIENT_KEYSTORE:用戶端金鑰存放區檔案的路徑 (PKCS12 格式)。如果您使用先決條件 CDK 堆疊,預設路徑為$(pwd)/certs/client-keystore.p12。 -
KEYSTORE_PASSWORD:用戶端金鑰存放區的密碼。如果您使用先決條件 CDK 堆疊,預設密碼為changeit。 -
BROKER_DNS:您可以在 Amazon MQ 主控台的代理程式詳細資訊頁面的連線下找到此值。
#! /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.p12KEYSTORE_PASSWORD=changeitBROKER_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 -