使用 Account Factory Customization(AFC)功能自定义账户
当您从 AWS Control Tower 控制台为新的和现有的 AWS 账户预置资源时,可以使用 AWS Control Tower 对这些账户进行自定义。在您设置 Account Factory Customization 后,AWS Control Tower 会在将来进行预置时自动执行此流程,因此您无需维护任何管线。资源预置完成后,自定义账户就立即可供使用。
为新账户预置蓝图
您可以在 AWS Control Tower Account Factory 中通过 CloudFormation 模板或使用 Terraform 预置自定义账户。您需要定义一个用作自定义账户蓝图的模板。该蓝图描述了预置账户时所需的特定资源和配置。您也可以使用由 AWS 合作伙伴构建和管理的预定义蓝图。有关合作伙伴管理的蓝图的更多信息,请参阅 AWS Service Catalog 入门库。
将蓝图应用于现有账户
您也可以按照 AWS Control Tower 控制台中的更新账户步骤操作,将自定义蓝图应用于现有账户。有关更多信息,请参阅 在控制台中更新账户。
定义:您的中心账户
您的账户蓝图存储在 AWS 账户中,出于我们的目的,我们将该账户称为中心账户。蓝图以 Service Catalog 产品的形式存储。我们称此产品为蓝图,以将它与任何其他 Service Catalog 产品区分开来。要详细了解如何创建 Service Catalog 产品,请参阅《AWS Service Catalog 管理员指南》中的创建产品。
注意
AWS Control Tower 包含主动控制功能,用于监控 AWS Control Tower 中的 CloudFormation 资源。或者,您也可以在登录区中激活这些控制功能。当您应用主动控制功能时,它们会进行检查以确保您要部署到账户的资源符合您组织的政策和程序。有关主动控制功能的更多信息,请参阅主动控制功能。
有关使用 AFC 的更多信息,请参阅 Automate account customization using Account Factory Customization in AWS Control Tower
先决条件
在开始使用 AWS Control Tower Account Factory 创建自定义账户之前,您必须部署一个 AWS Control Tower 登录区环境,并且必须使用 AWS Control Tower 注册一个组织单元(OU),新创建的账户将存放在该单位中。
自定义准备工作
-
指定中心账户:您可以创建一个新账户作为中心账户,也可以使用现有的 AWS 账户。强烈建议您不要使用 AWS Control Tower 管理账户作为蓝图中心账户。
-
添加必要的角色:如果您计划在 AWS Control Tower 中注册 AWS 账户并对其进行自定义,则必须先将
AWSControlTowerExecution角色添加到这些账户,就像您对注册到 AWS Control Tower 中的任何其他账户所执行的操作那样。 -
配置合作伙伴蓝图(可选):如果您计划使用具有市场订阅要求的合作伙伴蓝图,则必须先从 AWS Control Tower 管理账户配置这些蓝图,然后再将合作伙伴蓝图部署为 Account Factory 自定义蓝图。
主题
注意
每个 AWS Control Tower 账户可以部署一个蓝图。
Account Factory Customization(AFC)的注意事项
-
AFC 仅支持使用单个 AWS Service Catalog 蓝图产品进行自定义。
-
AWS Service Catalog 蓝图产品必须在中心账户中创建,并且必须与 AWS Control Tower 登录区主区域位于同一区域。
-
必须使用正确的名称、权限和信任策略创建
AWSControlTowerBlueprintAccessIAM 角色。 -
AWS Control Tower 支持两种蓝图部署选项:仅部署到主区域,或者部署到受 AWS Control Tower 监管的所有区域。不可以选择具体区域。
-
在成员账户中更新蓝图时,无法更改蓝图中心账户 ID 和 AWS Service Catalog 蓝图产品。
-
AWS Control Tower 不支持在单个蓝图更新操作中删除现有蓝图并添加新蓝图。您可以先删除蓝图,然后通过单独的操作添加新蓝图。
-
AWS Control Tower 会根据您是在创建或注册自定义账户还是非自定义账户来改变行为。如果您不是在使用蓝图创建或注册自定义账户,AWS Control Tower 会在 AWS Control Tower 管理账户中创建 Account Factory 预置产品(通过 Service Catalog)。如果您在使用蓝图创建或注册账户时指定了自定义,则 AWS Control Tower 不会在 AWS Control Tower 管理账户中创建 Account Factory 预置产品。
如果出现蓝图错误
应用蓝图时出现错误
如果在将蓝图应用于账户(无论是新账户还是注册到 AWS Control Tower 的现有账户)的过程中出现错误,则恢复过程相同。该账户将存在,但它不是自定义的,也没有注册到 AWS Control Tower 中。要继续操作,请按照步骤将账户注册到 AWS Control Tower,并在注册时添加蓝图。
创建 AWSControlTowerBlueprintAccess 角色时出现错误,以及解决办法
当您通过 AWS Control Tower 账户创建 AWSControlTowerBlueprintAccess 角色时,必须使用 AWSControlTowerExecution 角色以主体身份登录。如果您以任何其他身份登录,则 CreateRole 操作会被 SCP 阻止,如以下构件所示:
{ "Condition": { "ArnNotLike": { "aws:PrincipalArn": [ "arn:aws:iam::*:role/AWSControlTowerExecution", "arn:aws:iam::*:role/stacksets-exec-*" ] } }, "Action": [ "iam:AttachRolePolicy", "iam:CreateRole", "iam:DeleteRole", "iam:DeleteRolePermissionsBoundary", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy", "iam:UpdateAssumeRolePolicy", "iam:UpdateRole", "iam:UpdateRoleDescription" ], "Resource": [ "arn:aws:iam::*:role/aws-controltower-*", "arn:aws:iam::*:role/*AWSControlTower*", "arn:aws:iam::*:role/stacksets-exec-*" ], "Effect": "Deny", "Sid": "GRIAMROLEPOLICY" }
可采用以下解决办法:
-
(最推荐)担任
AWSControlTowerExecution角色并创建AWSControlTowerBlueprintAccess角色。如果您选择此解决办法,请务必在操作完成后立即注销AWSControlTowerExecution角色,以防止对资源进行意外更改。 -
登录一个未在 AWS Control Tower 中注册的账户,因此不受此 SCP 约束。
-
临时编辑此 SCP 以允许该操作。
-
(强烈不推荐)使用您的 AWS Control Tower 管理账户作为中心账户,这样它就不受 SCP 约束。
基于 CloudFormation 为 AFC 蓝图自定义您的策略文档
当您通过 Account Factory 启用蓝图时,AWS Control Tower 会指示 CloudFormation 代表您创建 StackSet。CloudFormation 需要访问您的托管账户才能在 StackSet 中创建 CloudFormation 堆栈。尽管 CloudFormation 已通过 AWSControlTowerExecution 角色在托管账户中获得了管理员权限,但该角色不能由 CloudFormation 担任。
在启用蓝图的过程中,AWS Control Tower 会在成员账户中创建一个角色,CloudFormation 可担任该角色以完成 StackSet 管理任务。通过 Account Factory 启用自定义蓝图的最简单方法是使用 allow-all 策略,因为这些策略与任何蓝图模板兼容。
但是,最佳实践建议您必须限制目标账户中的 CloudFormation 的权限。您可以提供自定义策略,AWS Control Tower 会将该策略应用于其创建的供 CloudFormation 使用的角色。例如,如果蓝图创建了一个名为 something-important 的 SSM 参数,则您可以提供以下策略:
所有 AFC 自定义策略都需要 AllowCloudFormationActionsOnStacks 语句;CloudFormation 使用此角色创建堆栈实例,因此需要权限才能对堆栈执行 CloudFormation 操作。AllowSsmParameterActions 部分特定于正在启用的模板。
解决权限问题
使用受限策略启用蓝图时,您可能会发现没有足够的权限来启用蓝图。要解决这些问题,请修改您的策略文件,并更新成员账户的蓝图首选项以使用更正后的策略。要检查策略是否足以启用蓝图,请确保已授予 CloudFormation 权限,并且您可以使用该角色直接创建堆栈。
创建基于 Terraform 的 Service Catalog 产品所需的其他权限
当您使用适用于 AFC 的 Terraform 配置文件创建 AWS Service Catalog External 产品时,除了创建模板中定义的资源所需的权限外,AWS Service Catalog 还要求向 AFC 自定义 IAM 策略添加某些其他权限。如果您选择默认的完整 Admin 策略,则无需添加这些额外权限。
有关在 AWS Service Catalog 中使用 External 产品类型创建 Terraform 产品的更多信息,请参阅《Service Catalog 管理员指南》中的第 5 步:创建启动角色。
过渡到 AWS Service Catalog 外部产品类型
AWS Service Catalog 更改了对 Terraform 开源产品及预置产品的支持,引入了一种名为外部的新产品类型。要了解有关此过渡的更多信息,请查看《AWS Service Catalog 管理员指南》中的 Updating existing Terraform Open Source products and provisioned products to the External product type。
此更改会影响您通过 AWS Control Tower Account Factory 自定义创建或注册的现有账户。要将这些账户过渡到外部产品类型,您需要同时在 AWS Service Catalog 和 AWS Control Tower 中进行更改。
过渡到外部产品类型
-
升级现有的 AWS Service Catalog Terraform 参考引擎,使其包含对外部和 Terraform 开源产品类型的支持。有关更新 Terraform 参考引擎的说明,请查看 AWS Service CatalogGitHub 存储库
。 -
在 AWS Service Catalog 中,复制任何现有的 Terraform 开源产品(蓝图),并使这些复制内容采用新的外部产品类型。不要终止现有的 Terraform 开源蓝图。
-
在 AWS Control Tower 中,使用 Terraform 开源蓝图更新每个账户,以使用新的外部蓝图。
-
要更新蓝图,必须先完全移除 Terraform 开源蓝图。有关更多详细信息,请查看从账户中删除蓝图。
-
将新的外部蓝图添加到同一个账户。有关更多详细信息,请查看向 AWS Control Tower 账户添加蓝图。
-
-
在所有使用 Terraform 开源 蓝图的账户更新为外部 蓝图后,返回 AWS Service Catalog,并终止所有使用 Terraform 开源 作为产品类型的产品。
-
今后,所有使用 AWS Control Tower Account Factory 自定义创建或注册的账户都必须使用 CloudFormation 或外部产品类型引用蓝图。
对于使用外部产品类型创建的蓝图,AWS Control Tower 仅支持使用 Terraform 模板和 Terraform 参考引擎进行的账户自定义。要了解更多信息,请查看设置以进行自定义。
注意
在创建新账户时,AWS Control Tower 不支持将 Terraform 开源作为一种产品类型。要了解有关这些更改的更多信息,请查看《AWS Service Catalog 管理员指南》中的将现有 Terraform 开源产品和预置的产品更新为外部 产品类型。如有需要,AWS Service Catalog 将在客户完成该产品类型过渡的过程中提供支持。如需帮助,请联系您的客户代表。