使用清单启用其它检索功能
Amazon AppConfig 代理还提供以下附加功能来协助您检索应用程序的配置。
-
将 Amazon AppConfig 代理配置为从多个账户检索配置:从主账户或检索 Amazon Web Services 账户中使用 Amazon AppConfig 代理,来从多个供应商账户检索配置数据。
-
配置 Amazon AppConfig 代理以将配置副本写入磁盘:使用 Amazon AppConfig 代理将配置数据写入磁盘。此功能使客户能够将从磁盘读取配置数据的应用程序与 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 配置 |
|
使用此方法进行动态更新。可以按照存储其它 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 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
-
以供应商账户登录 Amazon Web Services Management Console。
访问:https://console.aws.amazon.com/iam/
,打开 IAM 控制台。 -
在导航窗格中,选择 Policies (策略),然后选择 Create policy (创建策略)。
-
选择 JSON 选项。
-
在策略编辑器中,用以下策略语句替换默认 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" } ] }
-
选择下一步。
-
在策略名称字段中,输入名称。
-
(可选)对于添加标签,添加一个或多个标签键值对,以组织、跟踪或控制此策略的访问权限。
-
选择创建策略。系统将让您返回到 Policies 页面。
-
在每个将为检索账户提供配置数据的 Amazon Web Services 账户中重复该过程。
创建 IAM 角色
使用 IAM 控制台通过以下过程创建 IAM 角色。在每个将为检索账户提供配置数据的 Amazon Web Services 账户中完成该过程。
创建 IAM 角色
-
以供应商账户登录 Amazon Web Services Management Console。
通过 https://console.aws.amazon.com/iam/
打开 IAM 控制台。 -
在导航窗格中,选择角色,然后选择创建策略。
-
对于 Trusted entity type(可信实体类型),选择 Amazon Web Services 账户。
-
在 Amazon Web Services 账户部分中,选择其它 Amazon Web Services 账户。
-
在账户 ID 字段中,输入检索账户 ID。
-
(可选)作为此代入角色的安全最佳实践,请选择需要外部 ID 并输入字符串。
-
选择下一步。
-
在添加权限页面上,使用搜索字段来查找您在前面过程中创建的策略。选中其名称旁边的复选框。
-
选择下一步。
-
对于角色名称,输入一个名称。
-
(可选)对于描述,输入描述。
-
对于步骤 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" } ] } -
(可选)在 Tags(标签)中添加一个或多个标签密钥值对,以组织、跟踪或控制此角色的访问权限。
-
选择 Create role (创建角色)。系统将让您返回到 角色 页面。
-
搜索您刚创建的角色。选择该存储桶。在 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_DIRECTORY
和 PRELOAD_BACKUP
环境变量,来了解 Using Amazon AppConfig Agent with Amazon EC2 或 Using Amazon AppConfig Agent with Amazon ECS and Amazon EKS。
警告
请注意有关此功能的以下重要信息:
-
保存到磁盘的配置以纯文本 形式存储,便于用户阅读。请勿为包含敏感数据的配置启用此功能。
-
此功能将内容写入本地磁盘。对文件系统权限使用最低权限原则。有关更多信息,请参阅 实施最低权限访问。
启用将配置副本写入磁盘
-
编辑清单。
-
选择您希望 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" } } }
-
保存您的更改。每次部署新的配置数据时,都会更新 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