

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

# RabbitMQ 配置中支持 ARN
<a name="arn-support-rabbitmq-configuration"></a>

适用于 RabbitMQ 的亚马逊 MQ 支持某些 RabbitMQ 配置设置值的 AWS ARN。[这是由 RabbitMQ 社区插件 rabbitmq-aws 启用的。](https://github.com/amazon-mq/rabbitmq-aws)该插件由亚马逊 MQ 开发和维护，也可以在非亚马逊 MQ 管理的自托管 RabbitMQ 代理中使用。

**重要注意事项**  
aws 插件检索到的已解析的 ARN 值将在运行时直接传递给 RabbitMQ 进程。它们不会存储在 RabbitMQ 节点的其他地方。
适用于 RabbitMQ 的 Amazon MQ 需要一个可以由亚马逊 MQ 代入的 IAM 角色才能访问已配置的 ARN。这是通过设置进行配置的`aws.arns.assume_role_arn`。
使用包含 IAM 角色的代理配置调用 or CreateBroker 或 UpdateBroker API 的用户必须拥有该角色的`iam:PassRole`权限。
IAM 角色必须与 RabbitMQ 代理存在于同一个 AWS 账户中。配置中的所有 ARN 都必须与 RabbitMQ 代理位于同一 AWS 区域。
Amazon MQ 在担任 IAM 角色`aws:SourceArn`时会添加 IAM 全局条件密钥`aws:SourceAccount`。这些值必须用于附加到该角色的 IAM 策略中，以实现[混乱的副手保护](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

**Topics**
+ [支持的密钥](#arn-support-supported-keys)
+ [IAM 政策示例](#arn-support-iam-policy-samples)
+ [相关经纪人隔离状态](#arn-support-quarantine-states)
+ [示例方案](#arn-support-example-scenario)

## 支持的密钥
<a name="arn-support-supported-keys"></a>

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

### AMQP 终端节点
<a name="arn-support-amqp-endpoint"></a>


| 配置键 | 说明 | 
| --- | --- | 
| aws.arns.ssl\_options.cacertfile | 用于 SSL/TLS 客户端连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。 | 

### RabbitMQ 管理插件
<a name="arn-support-management-plugin"></a>


| 配置键 | 说明 | 
| --- | --- | 
| aws.arns.management.ssl.cacertfile | 管理接口 SSL/TLS 连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。 | 

### RabbitMQ OAuth 2.0 插件
<a name="arn-support-oauth2-plugin"></a>


| 配置键 | 说明 | 
| --- | --- | 
| aws.arns.auth\_oauth2.https.cacertfile | OAuth 2.0 HTTPS 连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。 | 

### RabbitMQ HTTP 身份验证插件
<a name="arn-support-http-plugin"></a>


| 配置键 | 说明 | 
| --- | --- | 
| 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 需要使用 AWS Secrets Manager 来存储私钥。 | 

### RabbitMQ LDAP 插件
<a name="arn-support-ldap-plugin"></a>


| 配置键 | 说明 | 
| --- | --- | 
| aws.arns.auth\_ldap.ssl\_options.cacertfile | LDAP SSL/TLS 连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。 | 
| aws.arns.auth\_ldap.ssl\_options.certfile | 亚马逊 MQ 和 LDAP 服务器之间双向 TLS 连接的证书文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。 | 
| aws.arns.auth\_ldap.ssl\_options.keyfile | 用于亚马逊 MQ 和 LDAP 服务器之间双向 TLS 连接的私钥文件。亚马逊 MQ 需要使用 AWS Secrets Manager 来存储私钥。 | 
| aws.arns.auth\_ldap.dn\_lookup\_bind.password | LDAP DN 查找绑定的密码。Amazon MQ 要求使用 AWS Secrets Manager 将密码存储为纯文本值。 | 
| aws.arns.auth\_ldap.other\_bind.password | LDAP 其他绑定的密码。Amazon MQ 要求使用 AWS Secrets Manager 将密码存储为纯文本值。 | 

## IAM 政策示例
<a name="arn-support-iam-policy-samples"></a>

有关包括代入角色策略文档和角色策略文档在内的 IAM 策略示例，请参阅 [CDK 示例实现](https://github.com/aws-samples/amazon-mq-samples/blob/main/rabbitmq-samples/rabbitmq-ldap-activedirectory-sample/lib/rabbitmq-activedirectory-stack.ts#L232)。

[使用 LDAP 身份验证和授权](rabbitmq-ldap-tutorial.md)有关如何设置 AWS Secrets Manager 和 Amazon S3 资源的步骤，请参阅。

## 相关经纪人隔离状态
<a name="arn-support-quarantine-states"></a>

有关与 ARN 支持问题相关的经纪人隔离状态的信息，请参阅：
+ [RABBITMQ\_INVALID\_ASSUMEROLE](troubleshooting-action-required-codes-invalid-assumerole.md)
+ [RabbitMQ\_INVALID\_ARN\_LDAP](troubleshooting-action-required-codes-invalid-arn-ldap.md)
+ [RABBITMQ\_INVALID\_ARN](troubleshooting-action-required-codes-invalid-arn.md)

## 示例方案
<a name="arn-support-example-scenario"></a>
+ 代理`b-f0fc695e-2f9c-486b-845a-988023a3e55b`已配置为使用 IAM 角色`<role>`访问 AWS Secrets Manager 密钥 `<arn>`
+ 如果提供给 Amazon MQ 的角色没有 AWS Secrets Manager 密钥的读取权限，则 RabbitMQ 日志中将显示以下错误：

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

  此外，经纪人将进入`INVALID_ASSUMEROLE`隔离状态。有关更多信息，请参阅 [INVALID](troubleshooting-action-required-codes-invalid-assumerole.md) \_ASSUMEROLE。
+ LDAP 身份验证尝试将失败，并显示以下错误：

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