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

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

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

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

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

注意

AWSControl Tower 包含主动控件, AWS CloudFormation 用于监控AWS控制塔中的资源。或者,您也可以在登录区中激活这些控制功能。当您应用主动控制功能时,它们会进行检查以确保您要部署到账户的资源符合您组织的政策和程序。有关主动控制功能的更多信息,请参阅主动控制功能

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

将蓝图应用于现有账户

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

开始前的准备工作

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

有关使用的更多信息AFC,请参阅 Cont AWSrol Tower 中使用 Account Factory 自定义自动进行账户自定义。

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

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

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

注意

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

Account Factory 自定义的注意事项 () AFC

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

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

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

  • AWSControl Tower 支持蓝图的两个部署选项:仅部署到主区域,或者部署到受AWS控制塔管理的所有区域。不可以选择具体区域。

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

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

  • AWSControl Tower 会根据您是在创建或注册自定义帐户还是非自定义帐户来更改行为。如果您没有使用蓝图创建或注册自定义帐户,Control Tower 会在 Cont AWS rol Tower 管理帐户中创建一个 Account Factory 配置的产品(通过 Service Catalog)。AWS如果您在使用蓝图创建或注册账户时指定了自定义,则 Cont AWS rol Tower 不会在 Control Tower 管理账户中创建 Account Factory AWS 配置的产品。

如果出现蓝图错误

应用蓝图时出现错误

如果在将蓝图应用于帐户(无论是新帐户还是注册到 Contro AWS l Tower 的现有帐户)的过程中出现错误,则恢复过程相同。该帐户将存在,但它不是自定义的,也不会注册到 Cont AWS rol Tower。要继续,请按照步骤将账户注册到 Cont AWS rol Tower,并在注册时添加蓝图。

创建 AWSControlTowerBlueprintAccess 角色时出现错误,以及解决办法

通过 Cont AWS rol 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 角色,以防止对资源进行意外更改。

  • 登录一个未在 Cont AWS rol Tower 中注册、因此不受此约束的账户SCP。

  • 暂时对其进行编辑SCP以允许该操作。

  • (强烈不推荐)使用您的 Cont AWS rol Tower 管理帐户作为中心帐户,因此不受限制SCP。

根据以下内容为AFC蓝图自定义策略文档 CloudFormation

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

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

但是,最佳实践建议您必须限制目标账户 AWS CloudFormation 中的权限。您可以提供自定义策略,Cont AWS rol 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" } ] }

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

解决权限问题

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

创建基于 Terraform 的 Service Catalog 产品所需的其他权限

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

{ "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:创建启动角色”。