

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# RabbitMQ 組態中的 ARN 支援
<a name="arn-support-rabbitmq-configuration"></a>

Amazon MQ for RabbitMQ 支援某些 RabbitMQ 組態設定值的 AWS ARNs。這是由 RabbitMQ 社群外掛程式 [Detectormq-aws](https://github.com/amazon-mq/rabbitmq-aws) 啟用。此外掛程式由 Amazon MQ 開發和維護，也可用於非由 Amazon MQ 管理的自我託管 RabbitMQ 代理程式。 Amazon MQ

**重要考量**  
aws 外掛程式擷取的已解析 ARN 值會在執行時間直接傳遞至 RabbitMQ 程序。它們不會存放在 RabbitMQ 節點的其他位置。
Amazon MQ for RabbitMQ 需要 IAM 角色，Amazon MQ 可以擔任該角色來存取設定的 ARNs。這是透過設定 來設定`aws.arns.assume_role_arn`。
使用包含 IAM 角色的代理程式組態呼叫 CreateBroker 或 UpdateBroker APIs 的使用者必須具有該角色的 `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 擔任以存取其他 AWS 資源的 IAM 角色 ARN。使用任何其他 ARN 組態時為必要。

### AMQP 端點
<a name="arn-support-amqp-endpoint"></a>


| 組態金鑰 | Description | 
| --- | --- | 
| aws.arns.ssl\$1options.cacertfile | SSL/TLS 用戶端連線的憑證授權機構檔案。Amazon MQ 需要使用 Amazon S3 或 來存放憑證。 | 

### RabbitMQ 管理外掛程式
<a name="arn-support-management-plugin"></a>


| 組態金鑰 | Description | 
| --- | --- | 
| aws.arns.management.ssl.cacertfile | 管理介面 SSL/TLS 連線的憑證授權機構檔案。Amazon MQ 需要使用 Amazon S3 或 來存放憑證。 | 

### RabbitMQ OAuth 2.0 外掛程式
<a name="arn-support-oauth2-plugin"></a>


| 組態金鑰 | Description | 
| --- | --- | 
| aws.arns.auth\$1oauth2.https.cacertfile | OAuth 2.0 HTTPS 連線的憑證授權機構檔案。Amazon MQ 需要使用 Amazon S3 或 來存放憑證。 | 

### RabbitMQ HTTP 身分驗證外掛程式
<a name="arn-support-http-plugin"></a>


| 組態金鑰 | Description | 
| --- | --- | 
| aws.arns.auth\$1http.ssl\$1options.cacertfile | HTTP 身分驗證 SSL/TLS 連線的憑證授權機構檔案。Amazon MQ 需要使用 Amazon S3 或 來存放憑證。 | 
| aws.arns.auth\$1http.ssl\$1options.certfile | Amazon MQ 與 HTTP 身分驗證伺服器之間交互 TLS 連線的憑證檔案。Amazon MQ 需要使用 Amazon S3 或 來存放憑證。 | 
| aws.arns.auth\$1http.ssl\$1options.keyfile | Amazon MQ 與 HTTP 身分驗證伺服器之間交互 TLS 連線的私有金鑰檔案。Amazon MQ 需要使用 AWS Secrets Manager 來存放私有金鑰。 | 

### RabbitMQ LDAP 外掛程式
<a name="arn-support-ldap-plugin"></a>


| 組態金鑰 | Description | 
| --- | --- | 
| aws.arns.auth\$1ldap.ssl\$1options.cacertfile | LDAP SSL/TLS 連線的憑證授權機構檔案。Amazon MQ 需要使用 Amazon S3 或 來存放憑證。 | 
| aws.arns.auth\$1ldap.ssl\$1options.certfile | Amazon MQ 與 LDAP 伺服器之間交互 TLS 連線的憑證檔案。Amazon MQ 需要使用 Amazon S3 或 來存放憑證。 | 
| aws.arns.auth\$1ldap.ssl\$1options.keyfile | Amazon MQ 與 LDAP 伺服器之間交互 TLS 連線的私有金鑰檔案。Amazon 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)。

如需如何設定 AWS Secrets Manager 和 Amazon S3 資源的步驟[使用 LDAP 身分驗證和授權](rabbitmq-ldap-tutorial.md)，請參閱 。

## 存取驗證
<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 支援問題相關中介裝置隔離狀態的資訊，請參閱：
+ [偵錯工具\$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\$1ASSUMEROLE](troubleshooting-action-required-codes-invalid-assumerole.md)。
+ 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 '.'
  ```