RabbitMQ용 Amazon MQ에 SSL 인증서 인증 사용 - Amazon MQ

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

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 스택을 배포하여이 자습서에 필요한 AWS 리소스를 설정할 수 있습니다.

이 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>합니다.

  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" }
  2. 다음 예제와 같이 라는 구성 파일을 생성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}
  3. 다음 예제와 같이 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": [] }
  4. 이 절차의 2단계에서 생성한 SSL 인증서 인증 구성을 사용하여 브로커를 생성합니다. 이렇게 하려면 다음 예제와 같이 create-broker AWS CLI 명령을 사용합니다. 이 명령에서 1단계와 2단계의 응답에서 얻은 구성 ID와 개정 번호를 각각 입력합니다. 예: c-fa3390a5-7e01-4559-ae0c-eb15b38b22ca2.

    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" }
  5. 다음 예제와 같이 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", ... }
  6. 다음 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.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