기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
RabbitMQ용 Amazon MQ에 SSL 인증서 인증 사용
이 자습서에서는 프라이빗 인증 기관을 사용하여 RabbitMQ용 Amazon MQ 브로커에 대한 SSL 인증서 인증을 구성하는 방법을 설명합니다.
참고
SSL 인증서 인증 플러그인은 RabbitMQ용 Amazon MQ 버전 4 이상에서만 사용할 수 있습니다. RabbitMQ
SSL 인증서 인증을 구성하기 위한 사전 조건
SSL 인증서 인증은 상호 TLS(mTLS)를 사용하여 X.509 인증서를 사용하여 클라이언트를 인증합니다. AWS RabbitMQ용 Amazon MQ mTLS 통합을 위한 CDK 스택을
이 CDK 스택은 인증 기관, 클라이언트 인증서 및 IAM 역할을 포함하여 필요한 모든 AWS 리소스를 자동으로 생성합니다. 스택에서 생성한 리소스의 전체 목록은 패키지 README를 참조하세요.
참고
CDK 스택을 배포하기 전에 RABBITMQ_TEST_USER_NAME 환경 변수를 설정합니다. 이 값은 클라이언트 인증서의 일반 이름(CN)으로 사용되며 자습서 단계에서 사용하는 사용자 이름과 일치해야 합니다. 예: export RABBITMQ_TEST_USER_NAME="myuser"
CDK 스택을 사용하는 대신 리소스를 수동으로 설정하는 경우 RabbitMQ용 Amazon MQ 브로커에서 SSL 인증서 인증을 구성하기 전에 동등한 인프라가 있는지 확인합니다.
Amazon MQ를 설정하기 위한 사전 조건
AWS CLI 버전 >= 2.28.23: 브로커 생성 중에 사용자 이름과 암호를 선택적으로 추가할 수 있습니다.
AWS CLI를 사용하여 RabbitMQ에서 SSL 인증서 인증 구성
이 절차에서는 AWS CLI를 사용하여 필요한 리소스를 생성하고 구성합니다. 다음 절차에서는 configurationID, Revision 및 <c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca>와 같은 자리 표시자 값을 실제 값으로 바꿔야 <2>합니다.
-
다음 예제와 같이
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 명령을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", ... } -
다음
ssl.sh스크립트를 사용하여 SSL 인증서 인증을 확인합니다.이 bash 스크립트를 사용하여 RabbitMQ용 Amazon MQ 브로커에 대한 연결을 테스트합니다. 이 스크립트는 클라이언트 인증서를 인증에 사용하고 연결이 제대로 구성되었는지 확인합니다. 성공적으로 구성되면 브로커가 메시지를 게시하고 소비하는 것을 볼 수 있습니다.
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 -