本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Terraform 部署和管理 AWS Control Tower 控件
由 Iker Reina Fuente (AWS) 和 Ivan Girardi () 创作 AWS
摘要
此模式描述了如何使用 AWS Control Tower 控件、 HashiCorp Terraform 和基础设施即代码 (IaC) 来实施和管理预防、侦查和主动安全控制。控制(也称为护栏)是一条高级规则,可为您的整体 AWS Control Tower 环境提供持续的治理。例如,您可以使用控件要求记录您的信息, AWS 账户 然后在发生特定的安全相关事件时配置自动通知。
AWS Control Tower 帮助您实施预防、侦查和主动控制,以管理您的 AWS 资源并监控多个资源的合规性 AWS 账户。每个控件都会强制执行一条规则。在此模式中,您使用提供的 IaC 模板来指定要在环境中部署哪些控件。
AWS Control Tower 控件适用于整个组织单位 (OU),而控制会影响组织单位 AWS 账户 内的每个单位。因此,当用户在您的登录区中的任何账户中执行任何操作时,该操作将受到管理 OU 的控制的约束。
实施 AWS Control Tower 控制措施有助于为您的 AWS 着陆区(Landing zone)奠定坚实的安全基础。通过使用此模式通过 Terraform 将控件部署为 IaC,可以标准化登录区中的控件,并更有效地部署和管理它们。
要将 AWS Control Tower 控件部署为 IaC,也可以使用 AWS Cloud Development Kit (AWS CDK) 代替 Terraform。有关更多信息,请参阅使用 AWS CDK 和部署和管理 AWS Control Tower 控件 AWS CloudFormation。
目标受众
建议有使用 Terraform 和经验的 AWS Control Tower用户使用此模式。 AWS Organizations
先决条件和限制
先决条件
作为一个组织在 AWS Organizations 和一个 AWS Control Tower 着陆区进行主动 AWS 账户 管理。有关说明,请参阅 AWS Control Tower 文档中的入门。
管理账户中的一个 AWS Identity and Access Management (IAM) 角色,有权部署此模式。有关所需权限和示例策略的更多信息,请参阅此模式的 “其他信息” 部分中的IAM角色的最低权限权限。
在管理账户中IAM担任该角色的权限。
使用标识符 CT 应用基于服务控制策略 (SCP) 的控制。 CLOUDFORMATION.PR.1。SCP必须激活此功能才能部署主动控制。有关说明,请参阅不允许在 AWS CloudFormation 注册表中管理资源类型、模块和挂钩。
TerraformCLI,已安装
(Terraform 文档)。 Terraform P AWS rovider,已配置
(Terraform 文档)。 Terraform 后端,已配置
(Terraform 文档)。
限制
产品版本
AWS Control Tower 3.2 或更高版本
对于 460.39 及以上版本:
Terraform P AWS rovider 版本 4.67 或更高版本
架构
本部分概括介绍此解决方案,以及由示例代码建立的架构。下图显示了跨 OU 中的各个账户部署的控件。

AWS Control Tower 控件根据其行为和指导进行分类。
控制行主要包含三种类型:
预防性控制旨在防止行动发生。这些策略是通过中的服务控制策略 (SCPs) 或资源控制策略 (RCPs) 来实现的 AWS Organizations。预防性控制的状态为强制实施或未启用。所有方面都支持预防性控制 AWS 区域。
Det@@ ective 控件旨在在特定事件发生时对其进行检测并记录操作 AWS CloudTrail。这些都是通过AWS Config 规则实现的。检测性控制的状态为合规、违规或未启用。Detective 控件仅适用于 AWS 区域 支持的控件 AWS Control Tower。
主动控制会扫描将由配置的资源, AWS CloudFormation 并检查它们是否符合贵公司的政策和目标。不合规的资源将不会被配置。这些都是用AWS CloudFormation 钩子实现的。主动控制的状态为PASSFAIL、或SKIP。
控制指导是如何将每种控制应用于您的控制的推荐做法OUs。 AWS Control Tower 提供三类指导:必修指导、强烈推荐指导和选修指导。控制指导与其行为无关。有关更多信息,请参阅控制行为和指导。
工具
AWS 服务
AWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在资源的整个生命周期中跨地区对其 AWS 账户 进行管理。
AWS Config提供了您的资源 AWS 账户 及其配置方式的详细视图。它可以帮助您确定资源之间的关联方式,以及它们的配置如何随时间变化。
AWS Control Tower按照规范性最佳实践,帮助您设置和管理 AWS 多账户环境。
AWS Organizations是一项账户管理服务,可帮助您将多个账户整合 AWS 账户 到一个由您创建和集中管理的组织中。
其他工具
HashiCorp Terraform
是一种开源基础设施即代码 (IaC) 工具,可帮助您使用代码来配置和管理云基础架构和资源。
代码存储库
此模式的代码可在使用 Terraform 存储库 GitHub 部署和管理 AWS Control Tower 控件
最佳实践
用于部署此解决方案的IAM角色应遵守最低权限原则(IAM文档)。
遵循AWS Control Tower 管理员最佳实践(AWS Control Tower 文档)。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
克隆存储库。 | 在 bash Shell 中输入以下命令:这将使用来自的 Terraform 存储库克隆部署和管理 AWS Control Tower 控件
| DevOps 工程师 |
编辑 Terraform 后端和配置文件。 |
| DevOps 工程师,Terraform |
编辑 Terraform 提供程序配置文件。 |
| DevOps 工程师,Terraform |
编辑配置文件。 |
| DevOps 工程师,将军AWS,Terraform |
在管理账户中IAM担任该角色。 | 在管理账户中,IAM扮演有权部署 Terraform 配置文件的角色。有关所需权限和示例策略的更多信息,请参阅 “其他信息” 部分中的IAM角色的最低权限权限。有关在中担任IAM角色的更多信息 AWS CLI,请参阅中的使用IAM角色 AWS CLI。 | DevOps 工程师,将军 AWS |
部署配置文件。 |
| DevOps 工程师,将军AWS,Terraform |
任务 | 描述 | 所需技能 |
---|---|---|
运行 | 输入以下命令,以删除此模式部署的资源。
| DevOps 工程师,将军AWS,Terraform |
故障排除
事务 | 解决方案 |
---|---|
| 您尝试启用的控件已经在目标 OU 中启用。如果用户通过、通过 AWS Control Tower 或通过手动启用控件 AWS Management Console,则可能会发生此错误 AWS Organizations。若要部署 Terraform 配置文件,您可以使用以下任一选项。 选项 1:更新 Terraform 当前状态文件 您可以将资源导入至 Terraform 当前状态文件。当您重新运行
选项 2:禁用控件 如果您在非生产环境中工作,可以禁用控制台中的控件。通过重复 Epics 部分部署配置中的步骤来重新启用它。不建议在生产环境中使用此方法,因为有一段时间该控件会被禁用。如果要在生产环境中使用此选项,则可以实施临时控件,例如SCP在中临时应用 AWS Organizations。 |
相关资源
AWS 文档
关于控件(AWS Control Tower 文档)
控件库(AWS Control Tower 文档)
使用 AWS CDK 和 AWS CloudFormation(AWS 规范性指导)部署和管理 AWS Control Tower 控件
其他资源
其他信息
Example variables.tfvars 文件
以下是更新的 variables.tfvars 文件的示例。此示例启用 AWS-GR ENCRYPTED _ VOLUMES 控件(全局 ID:503uicglhjkokaajywfpt6ros
)和 AWS-GR_ _ _ PUBLIC _IP SUBNET AUTO ASSIGN _ DISABLED 控件(全局 ID:)。50z1ot237wl8u1lv5ufau6qqo
有关全局标识符的列表IDs,请参阅 AWS Control Tower 文档中的所有全局标识符。
controls = [ { control_names = [ "503uicglhjkokaajywfpt6ros", ... ], organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...], }, { control_names = [ "50z1ot237wl8u1lv5ufau6qqo", ... ], organizational_unit_ids = ["ou-1111-11111111"...], }, ]
该IAM角色的最低权限权限
这种模式要求您在管理账户中IAM扮演角色。最佳做法是承担具有临时权限的角色,并根据最低权限原则限制权限。以下示例策略允许启用或禁用 AWS Control Tower 控件所需的最少操作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "controltower:EnableControl", "controltower:DisableControl", "controltower:GetControlOperation", "controltower:ListEnabledControls", "organizations:AttachPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:DescribeOrganization", "organizations:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy" ], "Resource": "*" } ] }