使用清单启用其它检索功能 - Amazon AppConfig
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用清单启用其它检索功能

Amazon AppConfig 代理还提供以下附加功能来协助您检索应用程序的配置。

了解代理清单

要启用这些 Amazon AppConfig 代理功能,请创建清单。清单是您提供的一组配置数据,用于控制代理可以执行的操作。清单是用 JSON 编写的。它包含一组顶级密钥,这些密钥对应于您已使用 Amazon AppConfig 部署的不同配置。

清单可以包含多个配置。此外,清单中的每个配置都可以标识一个或多个用于指定配置的代理功能。清单的内容使用以下格式:

{ "application_name:environment_name:configuration_name": { "agent_feature_to_enable_1": { "feature-setting-key": "feature-setting-value" }, "agent_feature_to_enable_2": { "feature-setting-key": "feature-setting-value" } } }

以下是具有两个配置的清单的 JSON 示例。第一个配置(MyApp)不使用任何 Amazon AppConfig 代理功能。第二个配置(My2ndApp)使用将配置复制到磁盘多账户检索 功能:

{ "MyApp:Test:MyAllowListConfiguration": {}, "My2ndApp:Beta:MyEnableMobilePaymentsFeatureFlagConfiguration": { "credentials": { "roleArn": "arn:us-west-1:iam::123456789012:role/MyTestRole", "roleExternalId": "00b148e2-4ea4-46a1-ab0f-c422b54d0aac", "roleSessionName": "AwsAppConfigAgent", "credentialsDuration": "2h" }, "writeTo": { "path": "/tmp/aws-appconfig/my-2nd-app/beta/my-enable-payments-feature-flag-configuration.json" } } }
如何提供代理清单

可以将清单作为文件存储在 Amazon AppConfig 代理可以读取的位置。或者,可以将清单存储为 Amazon AppConfig 配置并将代理指向它。要提供代理清单,必须使用以下值之一设置 MANIFEST 环境变量:

清单位置 环境变量值 应用场景

文件

file:/path/to/agent-manifest.json

如果清单不经常更改,请使用此方法。

Amazon AppConfig 配置

application-name:environment-name:configuration-name

使用此方法进行动态更新。可以按照存储其它 Amazon AppConfig 配置的相同方式,将存储在 Amazon AppConfig 中的清单更新和部署为配置。

环境变量

清单内容(JSON)

如果清单不经常更改,请使用此方法。此方法在容器环境中很有用,在此类环境中,设置环境变量比公开文件更容易。

有关为 Amazon AppConfig 代理设置变量的更多信息,请参阅与使用案例相关的主题:

将 Amazon AppConfig 代理配置为从多个账户检索配置

可以通过在 Amazon AppConfig 代理清单中输入凭证覆盖,将 Amazon AppConfig 代理配置为从多个 Amazon Web Services 账户检索配置。凭证覆盖 包括 Amazon Identity and Access Management(IAM)角色的 Amazon 资源名称(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:us-west-1:iam::123456789012:role/MyTestRole", "roleExternalId": "00b148e2-4ea4-46a1-ab0f-c422b54d0aac", "roleSessionName": "AWSAppConfigAgent", "credentialsDuration": "2h" } } }

在检索配置之前,代理从清单中读取配置的凭证详细信息,然后代入为该配置指定的 IAM 角色。可以在单个清单中为不同的配置指定一组不同的凭证覆盖。下图显示 Amazon AppConfig 代理在账户 A(检索账户)中运行时,如何代入为账户 B 和账户 C(供应商账户)指定的单独角色,然后调用 GetLatestConfiguration API 操作,来从在这些账户中运行的 Amazon AppConfig 检索配置数据:

该图显示了 Amazon AppConfig 代理如何跨单独的 Amazon Web Services 账户使用 Amazon Identity and Access Management(IAM)角色。

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

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

开始前的准备工作

在 IAM 中创建权限策略和角色之前,请收集以下信息。

  • 每个 Amazon Web Services 账户的 ID。检索 账户是将调用其它账户来获取配置数据的账户。供应商 账户是将向检索账户提供配置数据的账户。

  • 检索账户中由 Amazon AppConfig 使用的 IAM 角色的名称。以下是 Amazon AppConfig 在默认情况下使用的角色列表:

    • 对于 Amazon Elastic Compute Cloud(Amazon EC2),Amazon AppConfig 使用实例角色。

    • 对于 Amazon Lambda,Amazon AppConfig 使用 Lambda 执行角色。

    • 对于 Amazon Elastic Container Service(Amazon ECS)和 Amazon Elastic Kubernetes Service(Amazon EKS),Amazon AppConfig 使用容器角色。

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

创建权限策略

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

创建 IAM policy
  1. 以供应商账户登录 Amazon Web Services Management Console。

  2. 访问:https://console.aws.amazon.com/iam/,打开 IAM 控制台。

  3. 在导航窗格中,选择 Policies (策略),然后选择 Create policy (创建策略)

  4. 选择 JSON 选项。

  5. 策略编辑器中,用以下策略语句替换默认 JSON。使用供应商账户详细信息更新每个示例资源占位符

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "appconfig:StartConfigurationSession", "appconfig:GetLatestConfiguration" ], "Resource": "arn:partition:appconfig:region:vendor_account_ID:application/vendor_application_ID/environment/vendor_environment_ID/configuration/vendor_configuration_ID" } ] }

    示例如下:

    { "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" } ] }
  6. 选择下一步

  7. 策略名称字段中,输入名称。

  8. (可选)对于添加标签,添加一个或多个标签键值对,以组织、跟踪或控制此策略的访问权限。

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

  10. 在每个将为检索账户提供配置数据的 Amazon Web Services 账户中重复该过程。

创建 IAM 角色

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

创建 IAM 角色
  1. 以供应商账户登录 Amazon Web Services Management Console。

  2. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  3. 在导航窗格中,选择角色,然后选择创建策略

  4. 对于 Trusted entity type(可信实体类型),选择 Amazon Web Services 账户

  5. Amazon Web Services 账户部分中,选择其它 Amazon Web Services 账户

  6. 账户 ID 字段中,输入检索账户 ID。

  7. (可选)作为此代入角色的安全最佳实践,请选择需要外部 ID 并输入字符串。

  8. 选择下一步

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

  10. 选择下一步

  11. 对于角色名称,输入一个名称。

  12. (可选)对于描述,输入描述。

  13. 对于步骤 1:选择受信任的实体,选择编辑。将默认 JSON 信任策略替换为以下策略。使用检索账户中的信息更新每个示例资源占位符

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::retrieval_account_ID:role/appconfig_role_in_retrieval_account" }, "Action": "sts:AssumeRole" } ] }
  14. (可选)在 Tags(标签)中添加一个或多个标签密钥值对,以组织、跟踪或控制此角色的访问权限。

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

  16. 搜索您刚创建的角色。选择该存储桶。在 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: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

配置 Amazon AppConfig 代理以将配置副本写入磁盘

可以将 Amazon AppConfig 代理配置为以纯文本形式自动将配置副本存储到磁盘。此功能使客户能够将从磁盘读取配置数据的应用程序与 Amazon AppConfig 集成。

此功能不是为用作配置备份功能而设计的。Amazon AppConfig代理无法读取复制到磁盘的配置文件。如果要将配置备份到磁盘,请参阅 BACKUP_DIRECTORYPRELOAD_BACKUP 环境变量,来了解 Using Amazon AppConfig Agent with Amazon EC2Using Amazon AppConfig Agent with Amazon ECS and Amazon EKS

警告

请注意有关此功能的以下重要信息:

  • 保存到磁盘的配置以纯文本 形式存储,便于用户阅读。请勿为包含敏感数据的配置启用此功能。

  • 此功能将内容写入本地磁盘。对文件系统权限使用最低权限原则。有关更多信息,请参阅 实施最低权限访问

启用将配置副本写入磁盘
  1. 编辑清单。

  2. 选择您希望 Amazon AppConfig 写入磁盘的配置,并添加 writeTo 元素。示例如下:

    { "application_name:environment_name:configuration_name": { "writeTo": { "path": "path_to_configuration_file" } } }

    示例如下:

    { "MyTestApp:MyTestEnvironment:MyNewConfiguration": { "writeTo": { "path": "/tmp/aws-appconfig/mobile-app/beta/enable-mobile-payments" } } }
  3. 保存您的更改。每次部署新的配置数据时,都会更新 configuration.json 文件。

验证将配置副本写入磁盘是否正常工作

可以通过查看 Amazon AppConfig 代理日志来验证配置的副本是否正在写入磁盘。带有短语“INFO 将配置‘application:environment:configuration’写入 file_path”的 INFO 日志条目表示 Amazon AppConfig 代理将配置副本写入磁盘。

示例如下:

[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 'MobileApp:Beta:EnableMobilePayments' in XX.Xms [appconfig agent] 2023/11/13 17:05:49 INFO wrote configuration 'MobileApp:Beta:EnableMobilePayments' to /tmp/configs/your-app/your-env/your-config.json