

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

# 将 Amazon AppConfig Agent 配置为从多个账户检索配置


您可以通过在 Amazon AppConfig 代理清单中输入凭据覆盖 Amazon Web Services 账户 来配置 Amazon AppConfig 代理以从多个中检索配置。*证书覆盖*包括 (IAM) 角色的 Amazon 资源名称 Amazon Identity and Access Management (ARN)、角色 ID、会话名称以及代理可以担任该角色的时长。

可以在清单的“凭证”部分中输入这些详细信息。“凭证”部分使用以下格式：

```
{
    "application_name:environment_name:configuration_name": {
        "credentials": {
            "roleArn": "arn:partition:iam::account_ID:role/roleName",
            "roleExternalId": "string",
            "roleSessionName": "string",
            "credentialsDuration": "time_in_hours" 
        }
    }
}
```

示例如下：

```
{
    "My2ndApp:Beta:MyEnableMobilePaymentsFeatureFlagConfiguration": {
        "credentials": {
            "roleArn": "arn:aws:us-west-1:iam::123456789012:role/MyTestRole",
            "roleExternalId": "00b148e2-4ea4-46a1-ab0f-c422b54d0aac",
            "roleSessionName": "AWSAppConfigAgent",
            "credentialsDuration": "2h" 
        }
    }
}
```

在检索配置之前，代理从清单中读取配置的凭证详细信息，然后代入为该配置指定的 IAM 角色。可以在单个清单中为不同的配置指定一组不同的凭证覆盖。下图显示 Amazon AppConfig 代理在账户 A（检索账户）中运行时，如何扮演为账户 B 和账户 C（供应商账户）指定的不同角色，然后调用 [GetLatestConfiguration](https://docs.amazonaws.cn/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html)API 操作来检索在这些账户中 Amazon AppConfig 运行的配置数据：

![\[该图显示了 Amazon AppConfig 代理如何跨不同角色处理 Amazon Identity and Access Management (IAM) 角色 Amazon Web Services 账户。\]](http://docs.amazonaws.cn/appconfig/latest/userguide/images/agent multi-account.png)


## 配置从供应商账户检索配置数据的权限


Amazon AppConfig 在检索账户中运行的代理需要权限才能从供应商帐户检索配置数据。您可以通过在每个供应商账户中创建 Amazon Identity and Access Management (IAM) 角色来授予代理权限。 Amazon AppConfig 检索账户中的代理扮演此角色从供应商账户获取数据。完成本节中的过程，来创建 IAM 权限策略、IAM 角色并将代理覆盖添加到清单中。

**开始前的准备工作**  
在 IAM 中创建权限策略和角色之前，请收集以下信息。
+  IDs 适合每个 Amazon Web Services 账户。*检索* 账户是将调用其它账户来获取配置数据的账户。*供应商* 账户是将向检索账户提供配置数据的账户。
+ 检索账户 Amazon AppConfig 中使用的 IAM 角色的名称。以下是默认情况下使用的 Amazon AppConfig角色列表：
  + 对于亚马逊弹性计算云 (Amazon EC2) Amazon AppConfig ，使用实例角色。
  + 对于 Amazon Lambda， Amazon AppConfig 使用 Lambda 执行角色。
  + 对于亚马逊弹性容器服务 (Amazon ECS) 和亚马逊 Elastic Kubernetes Service (Amazon Amazon AppConfig EKS)，使用容器角色。

  如果您通过指定`ROLE_ARN`环境变量将 A Amazon AppConfig gent 配置为使用不同的 IAM 角色，请记下该名称。

**创建权限策略**  
使用 IAM 控制台通过以下过程创建权限策略。完成将为检索账户提供配置数据的每个 Amazon Web Services 账户 步骤中的步骤。

**创建 IAM policy**

1. 登录供应商账户。 Amazon Web Services 管理控制台 

1. 使用 [https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择 **策略**，然后选择 **创建策略**。

1. 选择 **JSON** 选项。

1. 在**策略编辑器**中，用以下策略语句替换默认 JSON。*example resource placeholder*使用供应商账户的详细信息更新每个账户。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "appconfig:StartConfigurationSession",
                   "appconfig:GetLatestConfiguration"
               ],
               "Resource": "arn:aws:appconfig:us-east-1:111122223333:application/vendor_application_ID/environment/vendor_environment_ID/configuration/vendor_configuration_ID"
           }
       ]
   }
   ```

------

   示例如下：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [{
           "Effect": "Allow",
           "Action": [
               "appconfig:StartConfigurationSession",
               "appconfig:GetLatestConfiguration"
           ],
           "Resource": "arn:aws:appconfig:us-east-2:111122223333:application/abc123/environment/def456/configuration/hij789"
       }
      ]
   }
   ```

------

1. 选择**下一步**。

1. 在**策略名称**字段中，输入名称。

1. （可选）对于**添加标签**，添加一个或多个标签键值对，以组织、跟踪或控制此策略的访问权限。

1. 选择**创建策略**。系统将让您返回到 **Policies** 页面。

1. 在每个 Amazon Web Services 账户 将为检索帐户提供配置数据的操作中重复此过程。

**创建 IAM 角色**  
使用 IAM 控制台通过以下过程创建 IAM 角色。完成将为检索账户提供配置数据的每个 Amazon Web Services 账户 步骤中的步骤。

**创建 IAM 角色**

1. 登录供应商账户。 Amazon Web Services 管理控制台 

1. 使用 [https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**，然后选择**创建策略**。

1. 对于 **Trusted entity type**（可信实体类型），选择 **Amazon Web Services 账户**。

1. 在 **Amazon Web Services 账户**部分中，选择**其它 Amazon Web Services 账户**。

1. 在**账户 ID** 字段中，输入检索账户 ID。

1. （可选）作为此代入角色的安全最佳实践，请选择**需要外部 ID** 并输入字符串。

1. 选择**下一步**。

1. 在**添加权限**页面上，使用**搜索**字段来查找您在前面过程中创建的策略。选中其名称旁边的复选框。

1. 选择**下一步**。

1. 对于**角色名称**，输入一个名称。

1. （可选）对于**描述**，输入描述。

1. 对于**步骤 1：选择受信任的实体**，选择**编辑**。将默认 JSON 信任策略替换为以下策略。*example resource placeholder*使用取回账户中的信息更新每个。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/appconfig_role_in_retrieval_account"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. （可选）在 **Tags**（标签）中添加一个或多个标签密钥值对，以组织、跟踪或控制此角色的访问权限。

1. 选择 **Create role (创建角色)**。系统将让您返回到 **角色** 页面。

1. 搜索您刚创建的角色。选择该存储桶。在 **ARN** 部分中，复制 ARN。您将在下一个过程中指定此信息。

**向清单中添加凭证覆盖**  
在供应商账户中创建 IAM 角色后，更新检索账户中的清单。具体而言，添加凭证块和用于从供应商账户检索配置数据的 IAM 角色 ARN。以下是 JSON 格式：

```
{
    "vendor_application_name:vendor_environment_name:vendor_configuration_name": {
        "credentials": {
            "roleArn": "arn:partition:iam::vendor_account_ID:role/name_of_role_created_in_vendor_account",
            "roleExternalId": "string",
            "roleSessionName": "string",
            "credentialsDuration": "time_in_hours" 
        }
    }
}
```

示例如下：

```
{
    "My2ndApp:Beta:MyEnableMobilePaymentsFeatureFlagConfiguration": {
        "credentials": {
            "roleArn": "arn:aws:us-west-1:iam::123456789012:role/MyTestRole",
            "roleExternalId": "00b148e2-4ea4-46a1-ab0f-c422b54d0aac",
            "roleSessionName": "AwsAppConfigAgent",
            "credentialsDuration": "2h" 
        }
    }
}
```

**验证多账户检索是否正常工作**  
您可以通过查看代理日志来验证该代理是否能够从多个账户检索配置数据。 Amazon AppConfig 如果检索到的“`YourApplicationName`:`YourEnvironmentName`:`YourConfigurationName`”的初始数据的日志级别为 `INFO`，则充分说明检索取得了成功。如果检索失败，您应该会看到指示失败原因的 `ERROR` 级别日志。以下是成功从供应商账户进行检索的示例：

```
[appconfig agent] 2023/11/13 11:33:27 INFO AppConfig Agent 2.0.x
[appconfig agent] 2023/11/13 11:33:28 INFO serving on localhost:2772
[appconfig agent] 2023/11/13 11:33:28 INFO retrieved initial data for 'MyTestApplication:MyTestEnvironment:MyDenyListConfiguration' in XX.Xms
```