RabbitMQ용 Amazon MQ에 대한 IAM 인증 및 권한 부여 사용 - Amazon MQ

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

RabbitMQ용 Amazon MQ에 대한 IAM 인증 및 권한 부여 사용

다음 절차에서는 RabbitMQ용 Amazon MQ 브로커에 대해 AWS IAM 인증 및 권한 부여를 활성화하는 방법을 보여줍니다. IAM을 활성화한 후 사용자는 AWS IAM 자격 증명을 사용하여 RabbitMQ 관리 API에 액세스하고 AMQP를 통해 연결할 수 있습니다. IAM 인증이 RabbitMQ용 Amazon MQ에서 작동하는 방식에 대한 자세한 내용은 섹션을 참조하세요RabbitMQ용 Amazon MQ에 대한 IAM 인증 및 권한 부여.

사전 조건

  • AWS RabbitMQ용 Amazon MQ 브로커를 소유한 AWS 계정의 관리자 자격 증명

  • 이러한 관리자 자격 증명으로 구성된 셸 환경( AWS CLI 프로필 또는 환경 변수 사용)

  • AWS CLI 설치 및 구성

  • jq 명령줄 JSON 프로세서 설치됨

  • curl 명령줄 도구 설치됨

를 사용하여 IAM 인증 및 권한 부여 구성 AWS CLI

  1. 환경 변수 설정

    브로커에 필요한 환경 변수를 설정합니다.

    export AWS_DEFAULT_REGION=<region> export BROKER_ID=<broker-id>
  2. 아웃바운드 JWT 토큰 활성화

    AWS 계정에 대해 아웃바운드 웹 자격 증명 페더레이션을 활성화합니다.

    ISSUER_IDENTIFIER=$(aws iam enable-outbound-web-identity-federation --query 'IssuerIdentifier' --output text) echo $ISSUER_IDENTIFIER

    출력에는 계정의 고유한 발급자 식별자 URL이 형식으로 표시됩니다https://<id>.tokens.sts.global.api.aws.

  3. IAM 정책 문서 생성

    웹 자격 증명 토큰을 가져올 수 있는 권한을 부여하는 정책 문서를 생성합니다.

    cat > policy.json << 'EOF' { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "sts:GetWebIdentityToken", "sts:TagGetWebIdentityToken" ], "Resource": "*" } ] } EOF
  4. 신뢰 정책 생성

    호출자 자격 증명을 검색하고 신뢰 정책 문서를 생성합니다.

    CALLER_ARN=$(aws sts get-caller-identity --query Arn --output text) cat > trust-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "$CALLER_ARN" }, "Action": "sts:AssumeRole" } ] } EOF
  5. IAM 역할 생성

    IAM 역할을 생성하고 정책을 연결합니다.

    aws iam create-role --role-name RabbitMqAdminRole --assume-role-policy-document file://trust-policy.json aws iam put-role-policy --role-name RabbitMqAdminRole --policy-name RabbitMqAdminRolePolicy --policy-document file://policy.json
  6. RabbitMQ OAuth2 설정 구성

    OAuth2 인증 및 권한 부여 설정을 사용하여 RabbitMQ 구성 파일을 생성합니다.

    cat > rabbitmq.conf << EOF auth_backends.1 = oauth2 auth_backends.2 = internal auth_oauth2.jwks_url = ${ISSUER_IDENTIFIER}/.well-known/jwks.json auth_oauth2.resource_server_id = rabbitmq auth_oauth2.scope_prefix = rabbitmq/ auth_oauth2.additional_scopes_key = sub auth_oauth2.scope_aliases.1.alias = arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/RabbitMqAdminRole auth_oauth2.scope_aliases.1.scope = rabbitmq/tag:administrator rabbitmq/read:*/* rabbitmq/write:*/* rabbitmq/configure:*/* auth_oauth2.https.hostname_verification = wildcard management.oauth_enabled = true EOF
  7. 브로커 구성 업데이트

    브로커에 새 구성을 적용합니다.

    # Retrieve the configuration ID CONFIG_ID=$(aws mq describe-broker --broker-id $BROKER_ID --query 'Configurations[0].Id' --output text) # Create a new configuration revision REVISION=$(aws mq update-configuration --configuration-id $CONFIG_ID --data "$(cat rabbitmq.conf | base64 --wrap=0)" --query 'LatestRevision.Revision' --output text) # Apply the configuration to the broker aws mq update-broker --broker-id $BROKER_ID --configuration Id=$CONFIG_ID,Revision=$REVISION # Reboot the broker to apply changes aws mq reboot-broker --broker-id $BROKER_ID

    다음 단계로 진행하기 RUNNING 전에 브로커 상태가 로 돌아갈 때까지 기다립니다.

  8. JWT 토큰 가져오기

    IAM 역할을 수임하고 웹 자격 증명 토큰을 얻습니다.

    # Assume the RabbitMqAdminRole ROLE_CREDS=$(aws sts assume-role --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/RabbitMqAdminRole --role-session-name rabbitmq-session) # Configure the session with temporary credentials export AWS_ACCESS_KEY_ID=$(echo "$ROLE_CREDS" | jq -r '.Credentials.AccessKeyId') export AWS_SECRET_ACCESS_KEY=$(echo "$ROLE_CREDS" | jq -r '.Credentials.SecretAccessKey') export AWS_SESSION_TOKEN=$(echo "$ROLE_CREDS" | jq -r '.Credentials.SessionToken') # Obtain the web identity token TOKEN_RESPONSE=$(aws sts get-web-identity-token \ --audience "rabbitmq" \ --signing-algorithm ES384 \ --duration-seconds 300 \ --tags Key=scope,Value="rabbitmq/tag:administrator") # Extract the token TOKEN=$(echo "$TOKEN_RESPONSE" | jq -r '.WebIdentityToken')
  9. RabbitMQ 관리 API에 액세스

    JWT 토큰을 사용하여 RabbitMQ 관리 API에 액세스합니다.

    BROKER_URL=<broker-id>.mq.<region>.on.aws curl -u ":$TOKEN" \ -X GET https://${BROKER_URL}/api/overview \ -H "Content-Type: application/json"

    응답이 성공하면 IAM 인증이 올바르게 작동하는지 확인합니다. 응답에는 JSON 형식의 브로커 개요 정보가 포함되어 있습니다.

  10. JWT 토큰을 사용하여 AMQP를 통해 연결

    성능 테스트 도구와 함께 JWT 토큰을 사용하여 AMQP 연결을 테스트합니다.

    BROKER_DNS=<broker-endpoint> CONNECTION_STRING=amqps://:${TOKEN}@${BROKER_DNS}:5671 docker run -it --rm --ulimit nofile=40960:40960 pivotalrabbitmq/perf-test:latest \ --queue-pattern 'test-queue-%d' --queue-pattern-from 1 --queue-pattern-to 1 \ --producers 1 --consumers 1 \ --uri ${CONNECTION_STRING} \ --flag persistent --rate 1

    ACCESS_REFUSED 오류가 발생하면 브로커에 대한 CloudWatch 로그를 사용하여 구성 설정 문제를 해결할 수 있습니다. Amazon MQ 콘솔에서 브로커의 CloudWatch Logs 로그 그룹에 대한 링크를 찾을 수 있습니다.