设置以进行自定义
以下几节将介绍针对自定义流程设置 Account Factory 的步骤。在开始这些步骤之前,建议您为中心账户设置委派管理员。
摘要
-
第 1 步:创建所需的角色。创建一个 IAM 角色以授予 AWS Control Tower 访问(中心)账户的权限,Service Catalog 产品(也称为蓝图)存储在该账户中。
-
第 2 步:创建 AWS Service Catalog 产品。创建为自定义账户设定基准所需的 AWS Service Catalog 产品(也称为“蓝图产品”)。
-
第 3 步:审查您的自定义蓝图。检查您创建的 AWS Service Catalog 产品(蓝图)。
-
第 4 步:调用您的蓝图以创建自定义账户。创建账户时,在 AWS Control Tower 控制台的 Account Factory 的相应字段中输入蓝图产品信息和角色信息。
第 1 步:创建所需的角色
在开始自定义账户之前,您必须设置一个包含 AWS Control Tower 和您的中心账户之间的信任关系的角色。担任该角色后,将授予 AWS Control Tower 用于管理中心账户的访问权限。必须将该角色命名为 AWSControlTowerBlueprintAccess。
AWS Control Tower 将担任此角色,在 AWS Service Catalog 中代表您创建产品组合资源,并将您的蓝图作为 Service Catalog 产品添加到该产品组合中,然后在账户预置期间与您的成员账户共享该产品组合和蓝图。
您需要按照以下几节中的说明创建 AWSControlTowerBlueprintAccess
角色。
导航到 IAM 控制台以设置所需的角色。
在已注册的 AWS Control Tower 账户中设置角色
-
在 AWS Control Tower 管理账户中以主体身份进行联合身份验证或登录。
-
在管理账户中,以联合主体身份担任或切换到您选择用作蓝图中心账户的已注册 AWS Control Tower 账户中的
AWSControlTowerExecution
角色。 -
以已注册 AWS Control Tower 账户中的
AWSControlTowerExecution
角色,创建具有适当权限和信任关系的AWSControlTowerBlueprintAccess
角色。
注意
为了遵守 AWS 最佳实践指导,请务必在创建 AWSControlTowerBlueprintAccess
角色后立即注销 AWSControlTowerExecution
角色。
为防止对资源进行意外更改,AWSControlTowerExecution
角色仅供 AWS Control Tower 使用。
如果您的蓝图中心账户未在 AWS Control Tower 中注册,则该账户中将不存在 AWSControlTowerExecution
角色,因此在继续设置 AWSControlTowerBlueprintAccess
角色之前,无需先担任该角色。
在未注册的成员账户中设置角色
-
使用您的首选方法,在您希望指定为中心账户的账户中以主体身份进行联合身份验证或登录。
-
以主体身份登录账户后,创建具有适当权限和信任关系的
AWSControlTowerBlueprintAccess
角色。
必须设置 AWSControlTowerBlueprintAccess 角色才能向以下两个主体授予信任:
-
在 AWS Control Tower 管理账户中运行 AWS Control Tower 的主体(用户)。
-
AWS Control Tower 管理账户中名为
AWSControlTowerAdmin
的角色。
下面是一个信任策略示例,与您需要为自己的角色添加的策略类似。此策略展示了授予最低访问权限的最佳实践。当您制定自己的策略时,请将 YourManagementAccountId
替换为您的 AWS Control Tower 管理账户的实际账户 ID,并将 YourControlTowerUserRole
替换为管理账户的 IAM 角色标识符。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::YourManagementAccountId:role/service-role/AWSControlTowerAdmin", "arn:aws:iam::YourManagementAccountId:role/YourControlTowerUserRole" ] }, "Action": "sts:AssumeRole" } ] }
所需的权限策略
AWS Control Tower 要求必须将名为 AWSServiceCatalogAdminFullAccess
的托管策略附加到 AWSControlTowerBlueprintAccess
角色。当 AWS Service Catalog 允许 AWS Control Tower 管理您的产品组合和 AWS Service Catalog 产品资源时,此策略为其提供所需的权限。当您在 IAM 控制台中创建角色时,可以附加此策略。
可能需要其他权限
如果您将蓝图存储在 Amazon S3 中,AWS Control Tower 还要求为
AWSControlTowerBlueprintAccess
角色附加AmazonS3ReadOnlyAccess
权限策略。如果您不使用默认的 Admin 策略,则 AWS Service Catalog Terraform 类型的产品要求您向 AFC 自定义 IAM 策略添加一些额外的权限。除了创建您在 terraform 模板中定义的资源所需的权限外,它还需要这些额外权限。
第 2 步:创建 AWS Service Catalog 产品
要创建 AWS Service Catalog 产品,请按照《AWS Service Catalog 管理员指南》的创建产品中的步骤操作。创建 AWS Service Catalog 产品时,您需要将账户蓝图添加为模板。
重要
由于 HashiCorp 更新了 Terraform 许可,AWS Service Catalog 更改了对 Terraform Open Source 产品的支持,并将产品预置为一种称为 External 的新产品类型。要详细了解此更改对 AFC 的影响,包括如何将现有账户蓝图更新为 External 产品类型,请查看 Transition to External product type。
创建蓝图的步骤摘要
-
创建或下载 AWS CloudFormation 模板或 Terraform tar.gz 配置文件,该模板或文件将成为您的账户蓝图。本节稍后的部分将提供一些模板示例。
-
登录您存储 Account Factory 蓝图(有时称为中心账户)的 AWS 账户。
-
导航到 AWS Service Catalog 控制台。选择产品列表,然后选择上传新产品。
-
在产品详细信息窗格中,输入蓝图产品的详细信息,例如名称和描述。
-
选择使用模板文件,然后选择选择文件。选择或粘贴您开发或下载的用作蓝图的模板或配置文件。
-
选择控制台页面底部的创建产品。
您可以从 AWS Service Catalog 参考架构存储库下载 AWS CloudFormation 模板。请查看该存储库中的一个示例,以帮助您针对您的资源制定备份计划
下面是一个示例模板,用于一家名为 Best Pets 的虚构公司。它可以帮助建立与公司宠物数据库的连接。
Resources: ConnectionStringGeneratorLambdaRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - "sts:AssumeRole" ConnectionStringGeneratorLambda: Type: AWS::Lambda::Function Properties: FunctionName: !Join ['-', ['ConnectionStringGenerator', !Select [4, !Split ['-', !Select [2, !Split ['/', !Ref AWS::StackId]]]]]] Description: Retrieves the connection string for this account to access the Pet Database Role: !GetAtt ConnectionStringGeneratorLambdaRole.Arn Runtime: nodejs16.x Handler: index.handler Timeout: 5 Code: ZipFile: > const response = require("cfn-response"); exports.handler = function (event, context) { const awsAccountId = context.invokedFunctionArn.split(":")[4] const connectionString= "fake connection string that's specific to account " + awsAccountId; const responseData = { Value: connectionString, } response.send(event, context, response.SUCCESS, responseData); return connectionString; }; ConnectionString: Type: Custom::ConnectionStringGenerator Properties: ServiceToken: !GetAtt ConnectionStringGeneratorLambda.Arn PetDatabaseConnectionString: DependsOn: ConnectionString # For example purposes we're using SSM parameter store. # In your template, use secure alternatives to store # sensitive values such as connection strings. Type: AWS::SSM::Parameter Properties: Name: pet-database-connection-string Description: Connection information for the BestPets pet database Type: String Value: !GetAtt ConnectionString.Value
第 3 步:审查您的自定义蓝图
您可以在 AWS Service Catalog 控制台中查看您的蓝图。有关更多信息,请参阅《Service Catalog 管理员指南》中的管理产品。
第 4 步:调用您的蓝图以创建自定义账户
在 AWS Control Tower 控制台中执行创建账户工作流时,您将看到一个可选部分,可在其中输入要用于自定义账户的蓝图的相关信息。
注意
您必须先设置自定义中心账户,并添加至少一个蓝图(Service Catalog 产品),然后才能将这些信息输入 AWS Control Tower 控制台中并开始预置自定义账户。
在 AWS Control Tower 控制台中创建或更新自定义账户。
-
输入包含蓝图的账户的账户 ID。
-
从该账户中选择现有的 Service Catalog 产品(现有蓝图)。
-
如果您有多个版本的蓝图(Service Catalog 产品),请选择合适的版本。
-
(可选)此时,您可以添加或更改蓝图预置策略。蓝图预置策略以 JSON 格式编写并附加到 IAM 角色,因此它可以预置蓝图模板中指定的资源。AWS Control Tower 会在成员账户中创建此角色,这样 Service Catalog 就可以使用 AWS CloudFormation 堆栈集部署资源。该角色命名为
AWSControlTower-BlueprintExecution-bp-
。默认情况下,这里将应用xxxx
AdministratorAccess
策略。 -
根据此蓝图,选择您要在其中部署账户的一个或多个 AWS 区域。
-
如果蓝图包含参数,您可以在 AWS Control Tower 工作流的其他字段中输入相应的参数值。其他值可能包括:GitHub 存储库名称、GitHub 分支、Amazon ECS 集群名称和存储库所有者的 GitHub 身份。
-
如果您的中心账户或蓝图尚未准备就绪,则可以稍后按照账户更新流程自定义账户。
有关更多详细信息,请参阅从蓝图创建自定义账户。