

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

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

适用于 RabbitMQ 的亚马逊 MQ 支持 AWS ARNs 某些 RabbitMQ 配置设置的值。[这是由 RabbitMQ 社区插件 rabbitmq-aws 启用的。](https://github.com/amazon-mq/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 代理存在于同一个 AWS 账户中。配置 ARNs 中的所有内容都必须与 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-validation)
+ [

## 相关经纪人隔离状态
](#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\$1options.cacertfile | 用于 SSL/TLS 客户端连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。 | 

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


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

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


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

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


| 配置键 | 说明 | 
| --- | --- | 
| aws.arns.auth\$1http.ssl\$1options.cacertfile | 用于 HTTP 身份验证 SSL/TLS 连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。 | 
| aws.arns.auth\$1http.ssl\$1options.certfile | 亚马逊 MQ 和 HTTP 身份验证服务器之间双向 TLS 连接的证书文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。 | 
| aws.arns.auth\$1http.ssl\$1options.keyfile | 用于 Amazon MQ 和 HTTP 身份验证服务器之间双向 TLS 连接的私钥文件。亚马逊 MQ 需要使用 AWS Secrets Manager 来存储私钥。 | 

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


| 配置键 | 说明 | 
| --- | --- | 
| aws.arns.auth\$1ldap.ssl\$1options.cacertfile | LDAP SSL/TLS 连接的证书颁发机构文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。 | 
| aws.arns.auth\$1ldap.ssl\$1options.certfile | Amazon MQ 和 LDAP 服务器之间双向 TLS 连接的证书文件。亚马逊 MQ 需要使用亚马逊 S3 或来存储证书。 | 
| aws.arns.auth\$1ldap.ssl\$1options.keyfile | 用于亚马逊 MQ 和 LDAP 服务器之间双向 TLS 连接的私钥文件。亚马逊 MQ 需要使用 AWS Secrets Manager 来存储私钥。 | 
| aws.arns.auth\$1ldap.dn\$1lookup\$1bind.password | LDAP DN 查找绑定的密码。Amazon MQ 要求使用 AWS Secrets Manager 将密码存储为纯文本值。 | 
| aws.arns.auth\$1ldap.other\$1bind.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-validation"></a>

为了解决无法获取 ARN 值的情况，aws 插件支持一个 [RabbitMQ 管理 API 终端节点，可以调用该终端节点](https://github.com/amazon-mq/rabbitmq-aws/blob/main/API.md)来检查 Amazon MQ 是否能够成功担任该角色并进行解析。 AWS ARNs这样就无需更新代理配置、使用新的配置修订版更新代理以及重启代理来测试配置更改。

**注意**  
使用此 API 需要现有的 RabbitMQ 管理员用户。除了其他访问方法外，Amazon MQ 还建议使用内部用户创建测试代理。请参阅[同时启用 OAuth 2.0 和简单（内部）身份验证](oauth-tutorial.md#oauth-tutorial-config-both-auth-methods-using-cli)。然后，可以使用该用户访问验证 API。

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

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

有关与 ARN 支持问题相关的经纪人隔离状态的信息，请参阅：
+ [RABBITMQ\$1INVALID\$1ASSUMEROLE](troubleshooting-action-required-codes-invalid-assumerole.md)
+ [RabbitMQ\$1INVALID\$1ARN\$1LDAP](troubleshooting-action-required-codes-invalid-arn-ldap.md)
+ [RABBITMQ\$1INVALID\$1ARN](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) \$1ASSUMEROLE。
+ 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 '.'
  ```