RabbitMQ 配置中支持 ARN - Amazon MQ
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

RabbitMQ 配置中支持 ARN

适用于 RabbitMQ 的亚马逊 MQ 支持 Amazon ARNs 某些 RabbitMQ 配置设置的值。这是由 RabbitMQ 社区插件 rabbitmq-aws 启用的。该插件由亚马逊 MQ 开发和维护,也可以在非亚马逊 MQ 管理的自托管 RabbitMQ 代理中使用。

重要注意事项
  • aws 插件检索到的已解析的 ARN 值将在运行时直接传递给 RabbitMQ 进程。它们没有存储在 RabbitMQ 节点上的其他地方。

  • 适用于 RabbitMQ 的 Amazon MQ 需要一个可以由亚马逊 MQ 代入的 IAM 角色才能访问已配置的。 ARNs这是通过设置进行配置的aws.arns.assume_role_arn

  • 调 UpdateBroker APIs 用 CreateBroker 或使用包含 IAM 角色的代理配置的用户必须拥有该角色的iam:PassRole权限。

  • IAM 角色必须与 RabbitMQ 代理存在于同一个 Amazon 账户中。配置 ARNs 中的所有内容都必须与 RabbitMQ 代理位于同一 Amazon 区域。

  • Amazon MQ 在担任 IAM 角色aws:SourceArn时会添加 IAM 全局条件密钥aws:SourceAccount。必须将这些值用于附加到角色的 IAM 策略中,以实现混乱的副手保护

支持的密钥

必需的 IAM 角色
aws.arns.assume_role_arn

Amazon MQ 为访问其他资源而扮演的 IAM 角色 ARN。 Amazon 使用任何其他 ARN 配置时为必填项。

配置键 说明
aws.arns.ssl_options.cacertfile 用于 SSL/TLS 客户端连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。
配置键 说明
aws.arns.management.ssl.cacertfile 管理接口 SSL/TLS 连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。
配置键 说明
aws.arns.auth_oauth2.https.cacertfile OAuth 2.0 HTTPS 连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。
配置键 说明
aws.arns.auth_http.ssl_options.cacertfile 用于 HTTP 身份验证 SSL/TLS 连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。
aws.arns.auth_http.ssl_options.certfile 亚马逊 MQ 和 HTTP 身份验证服务器之间双向 TLS 连接的证书文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。
aws.arns.auth_http.ssl_options.keyfile 用于 Amazon MQ 和 HTTP 身份验证服务器之间双向 TLS 连接的私钥文件。亚马逊 MQ 需要使用 Amazon Secrets Manager 来存储私钥。
配置键 说明
aws.arns.auth_ldap.ssl_options.cacertfile LDAP SSL/TLS 连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。
aws.arns.auth_ldap.ssl_options.certfile Amazon MQ 和 LDAP 服务器之间双向 TLS 连接的证书文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。
aws.arns.auth_ldap.ssl_options.keyfile 用于亚马逊 MQ 和 LDAP 服务器之间双向 TLS 连接的私钥文件。亚马逊 MQ 需要使用 Amazon Secrets Manager 来存储私钥。
aws.arns.auth_ldap.dn_lookup_bind.password LDAP DN 查找绑定的密码。Amazon MQ 要求使用 Amazon Secrets Manager 将密码存储为纯文本值。
aws.arns.auth_ldap.other_bind.password LDAP 其他绑定的密码。Amazon MQ 要求使用 Amazon Secrets Manager 将密码存储为纯文本值。

IAM 政策示例

有关包括代入角色策略文档和角色策略文档在内的 IAM 策略示例,请参阅 CDK 示例实现

使用 LDAP 身份验证和授权有关如何设置 Amazon Secrets Manager 和 Amazon S3 资源的步骤,请参阅。

访问验证

为了解决无法获取 ARN 值的情况,aws 插件支持一个 RabbitMQ 管理 API 终端节点,可以调用该终端节点来检查 Amazon MQ 是否能够成功担任该角色并进行解析。 Amazon ARNs这样就无需更新代理配置、使用新的配置修订版更新代理以及重启代理来测试配置更改。

注意

使用此 API 需要现有的 RabbitMQ 管理员用户。除了其他访问方法外,Amazon MQ 还建议使用内部用户创建测试代理。请参阅同时启用 OAuth 2.0 和简单(内部)身份验证。然后,可以使用该用户访问验证 API。

注意

尽管 aws 插件支持将新角色作为输入传递给验证 API,但 Amazon MQ 不支持此参数。用于验证的 IAM 角色应与代理配置aws.arns.assume_role_arn中的值相匹配。

相关经纪人隔离状态

有关与 ARN 支持问题相关的经纪人隔离状态的信息,请参阅:

示例方案

  • 代理b-f0fc695e-2f9c-486b-845a-988023a3e55b已配置为使用 IAM 角色<role>访问 Amazon Secrets Manager 密钥 <arn>

  • 如果提供给 Amazon MQ 的角色没有 Amazon Secrets Manager 密钥的读取权限,则 RabbitMQ 日志中将显示以下错误:

    [error] <0.254.0> aws_arn_config: {handle_assume_role,{error,{assume_role_failed,"Amazon service is unavailable"}}}

    此外,经纪人将进入INVALID_ASSUMEROLE隔离状态。有关更多信息,请参阅 INVALID _ASSUMEROLE。

  • LDAP 身份验证尝试将失败,并显示以下错误:

    [error] <0.254.0> LDAP bind failed: invalid_credentials
  • 使用适当的权限修复 IAM 角色

  • 调用验证端点以验证 RabbitMQ 现在是否可以访问该密钥:

    curl -4su 'guest:guest' -XPUT -H 'content-type: application/json' <broker-endpoint>/api/aws/arn/validate -d '{"assume_role_arn":"arn:aws:iam::<account-id>:role/<role-name>","arns":["arn:aws:secretsmanager:<region>:<account-id>:secret:<secret-name>"]}' | jq '.'