本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对适用于 RabbitMQ 的亚马逊 MQ 使用 IAM 身份验证和授权
以下过程演示如何为 Amazon MQ for RabbitMQ 代理启用 AWS IAM 身份验证和授权。启用 IAM 后,用户可以使用 AWS IAM 凭证进行身份验证,以访问 RabbitMQ 管理 API 并通过 AMQP 进行连接。有关 IAM 身份验证如何与适用于 RabbitMQ 的 Amazon MQ 配合使用的详细信息,请参阅。适用于 RabbitMQ 的亚马逊 MQ 的 IAM 身份验证和授权
先决条件
-
AWS 拥有 Amazon MQ for RabbitMQ 经纪商的 AWS 账户的管理员证书
-
使用这些管理员凭据(使用 AWS CLI 配置文件或环境变量)配置的 shell 环境
-
AWS 已安装并配置 CLI
-
jq已安装命令行 JSON 处理器 -
curl已安装命令行工具
使用配置 IAM 身份验证和授权 AWS CLI
-
设置环境变量
为您的经纪商设置所需的环境变量:
export AWS_DEFAULT_REGION=<region>export BROKER_ID=<broker-id> -
启用出站 JWT 令牌
为您的 AWS 账户启用出站 Web 联合身份验证:
ISSUER_IDENTIFIER=$(aws iam enable-outbound-web-identity-federation --query 'IssuerIdentifier' --output text) echo $ISSUER_IDENTIFIER输出以以下格式显示您账户的唯一发行人标识符网址
https://<id>.tokens.sts.global.api.aws。 -
创建 IAM 策略文档
创建授予获取 Web 身份令牌权限的策略文档:
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 角色并获取 Web 身份令牌:
# 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 1如果您收到
ACCESS_REFUSED错误,则可以使用代理 CloudWatch 日志对配置设置进行故障排除。您可以在 Amazon MQ 控制台中找到您的代理的 CloudWatch 日志日志组链接。