기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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
-
환경 변수 설정
브로커에 필요한 환경 변수를 설정합니다.
export AWS_DEFAULT_REGION=<region>export BROKER_ID=<broker-id> -
아웃바운드 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. -
IAM 정책 문서 생성
웹 자격 증명 토큰을 가져올 수 있는 권한을 부여하는 정책 문서를 생성합니다.
cat > policy.json << 'EOF' { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "sts:GetWebIdentityToken", "sts:TagGetWebIdentityToken" ], "Resource": "*" } ] } EOF -
신뢰 정책 생성
호출자 자격 증명을 검색하고 신뢰 정책 문서를 생성합니다.
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 -
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 -
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 -
브로커 구성 업데이트
브로커에 새 구성을 적용합니다.
# 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전에 브로커 상태가 로 돌아갈 때까지 기다립니다. -
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') -
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 형식의 브로커 개요 정보가 포함되어 있습니다.
-
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 1ACCESS_REFUSED오류가 발생하면 브로커에 대한 CloudWatch 로그를 사용하여 구성 설정 문제를 해결할 수 있습니다. Amazon MQ 콘솔에서 브로커의 CloudWatch Logs 로그 그룹에 대한 링크를 찾을 수 있습니다.