使用 Account Factory 自定义 (AFC) 自定义账户 - AWS Control Tower

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

使用 Account Factory 自定义 (AFC) 自定义账户

AWS Control Tower 允许您在从 AWS Control Tower 控制台配置新资源和现有资源 AWS 账户 时对其进行自定义。在您设置账户出厂自定义后,AWS Control Tower 会自动执行此过程以备将来配置,因此您无需维护任何管道。配置资源后,可以立即使用自定义帐户。

您的自定义账户是在账户工厂、 AWS CloudFormation 模板或 Terraform 中配置的。您将定义一个用作自定义账户蓝图的模板。您的蓝图描述了配置账户时所需的特定资源和配置。还提供由 AWS 合作伙伴构建和管理的预定义蓝图。有关合作伙伴管理的蓝图的更多信息,请参阅AWS Service Catalog 入门库。

注意

AWS Control Tower 包含主动控件, AWS CloudFormation 用于监控 AWS 控制塔中的资源。或者,您也可以在着陆区(Landing zone)中激活这些控件。当你应用主动控制措施时,他们会进行检查以确保你要部署到账户的资源符合贵组织的政策和程序。有关主动控制的更多信息,请参阅主动控制

您的账户蓝图存储在中 AWS 账户,就我们而言,该账户被称为中心账户。蓝图以 Service Catalog 产品的形式存储。我们称此产品为蓝图,以将其与任何其他 Service Catalog 产品区分开来。要详细了解如何创建 Service Catalog 产品,请参阅《AWS Service Catalog 管理员指南》中的创建产品

将蓝图应用于现有账户

您也可以按照 AWS Control Tower 控制台中的更新账户步骤将自定义蓝图应用于现有账户。有关更多信息,请参阅 在控制台中更新账户

开始前的准备工作

在开始使用 AWS Control Tower Account Factory 创建自定义账户之前,您必须部署 AWS Control Tower 着陆区环境,并且必须在 AWS Control Tower 注册一个组织单位 (OU),您新创建的账户将存放在那里。

有关使用 AFC 的更多信息,请参阅 AWS Control Tower 中使用 AWS Control Tower 中的账户出厂自定义自动进行账户自定义。

为定制做准备
  • 您可以创建一个新账户作为中心账户,也可以使用现有账户 AWS 账户。我们强烈建议您不要使用 AWS Control Tower 管理账户作为蓝图中心账户。

  • 如果您计划注册 AWS 账户 AWS Control Tower 并对其进行自定义,则必须先将该AWSControlTowerExecution角色添加到这些账户,就像您注册到 AWS Control Tower 的任何其他账户一样。

  • 如果您计划使用具有市场订阅要求的合作伙伴蓝图,则必须先从 AWS Control Tower 管理账户配置这些蓝图,然后再将合作伙伴蓝图部署为账户出厂自定义蓝图。

注意

每个 AWS Control Tower 账户可以部署一个蓝图。

Account Factory 定制注意事项 (AFC)

  • AFC 仅支持使用单个 AWS Service Catalog 蓝图产品进行自定义。

  • AWS Service Catalog 蓝图产品必须在中心账户中创建,并且必须与 AWS Control Tower 着陆区主区域位于同一区域。

  • 必须使用正确的名称、权限和信任策略创建 AWSControlTowerBlueprintAccess IAM 角色。

  • AWS Control Tower 支持蓝图的两个部署选项:仅部署到主区域,或者部署到受 AWS Control Tower 管理的所有区域。无法选择区域。

  • 在成员账户中更新蓝图时,无法更改蓝图中心账户 ID 和 AWS Service Catalog 蓝图产品。

  • AWS Control Tower 不支持在单个蓝图更新操作中移除现有蓝图和添加新蓝图。您可以移除蓝图,然后通过单独的操作添加新蓝图。

  • AWS Control Tower 会根据您是在创建或注册自定义账户还是非自定义账户来改变行为。如果您没有使用蓝图创建或注册自定义账户,AWS Control Tower 会在 AWS Control Tower 管理账户中创建账户出厂预配置的产品(通过服务目录)。如果您在使用蓝图创建或注册账户时指定了自定义,则 AWS Control Tower 不会在 AWS Control Tower 管理账户中创建账户出厂预配置的产品。

如果出现蓝图错误

应用蓝图时出错

如果在将蓝图应用于账户(无论是新账户还是注册到 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

当您通过账户工厂启用蓝图时,AWS Control Tower 会指示 AWS CloudFormation 您 StackSet 代表您创建蓝图。 AWS CloudFormation 需要访问您的托管账户才能在中创建 AWS CloudFormation 堆栈。 StackSet尽管 AWS CloudFormation 已通过该AWSControlTowerExecution角色在托管账户中拥有管理员权限,但该角色不能由 AWS CloudFormation担任。

作为启用蓝图的一部分,AWS Control Tower 在成员账户中创建一个角色,该角色 AWS CloudFormation 可以假设该角色完成 StackSet 管理任务。通过账户工厂启用自定义蓝图的最简单方法是使用 allow-all 策略,因为这些策略与任何蓝图模板兼容。

但是,最佳实践建议您必须限制目标账户 AWS CloudFormation 中的权限。您可以提供自定义策略,AWS Control Tower 将其应用于其创建的角色 AWS CloudFormation 以供使用。例如,如果您的蓝图创建了一个名为重要内容的 SSM 参数,则可以提供以下策略

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFormationActionsOnStacks", "Effect": "Allow", "Action": "cloudformation:*", "Resource": "arn:aws:cloudformation:*:*:stack/*" }, { "Sid": "AllowSsmParameterActions", "Effect": "Allow", "Action": [ "ssm:PutParameter", "ssm:DeleteParameter", "ssm:GetParameter", "ssm:GetParameters" ], "Resource": "arn:*:ssm:*:*:parameter/something-important" } ] }

所有 AFC 自定义策略都需要该AllowCloudFormationActionsOnStacks声明; AWS CloudFormation 使用此角色创建堆栈实例,因此需要权限才能对堆栈执行 AWS CloudFormation 操作。该AllowSsmParameterActions部分特定于正在启用的模板。

解决权限问题

使用受限策略启用蓝图时,您可能会发现没有足够的权限来启用该蓝图。要解决这些问题,请修改您的政策文件并更新成员账户的蓝图偏好以使用更正后的政策。要检查该策略是否足以启用蓝图,请确保已授予 AWS CloudFormation 权限,并且您可以使用该角色直接创建堆栈。

创建基于 Terraform 的 Service Catalog 产品所需的额外权限

使用适用于 AFC 的 Terraform 配置文件创建 AWS Service Catalog 外部产品时,除了创建模板中定义的资源所需的权限外,还 AWS Service Catalog 需要向 AFC 自定义 IAM 策略添加某些权限。如果您选择默认的完整管理员策略,则无需添加这些额外权限。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources", "resource-groups:DeleteGroup", "resource-groups:Tag" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Effect": "Allow" }, { "Action": "s3:GetObject", "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/servicecatalog:provisioning": "true" } } } ] }

有关使用中的 “外部” 产品类型创建 Terraform 产品的更多信息 AWS Service Catalog,请参阅《Service Catalog 管理员指南》中的 “步骤 5:创建启动角色”。