本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS CDK 和 AWS 部署和管理 AWS Control Tower 控件 CloudFormation
由 Iker Reina Fuente (AWS) 和 Ivan Girardi (AWS) 编写
代码存储库:aws-control-tower-controls- | 环境:生产 | 技术:安全、身份、合规; CloudNative;基础架构;管理和治理 |
AWS 服务:AWS CloudFormation;AWS Control Tower;AWS Organizations;AWS CDK |
Summary
此模式描述了如何使用 AWS CloudFormation 和 AWS Cloud Development Kit (AWS CDK) 以基础设施即代码 (IaC) 的形式实施和管理预防、侦查和主动式 AWS Control Tower 控制措施。控制(也称为防护机制)是一项高级规则,可为您的整个 AWS Control Tower 环境提供持续的管理。例如,您可以使用控件来要求记录您的 Amazon Web Services account,然后配置在发生特定安全相关事件时的自动通知。
AWS Control Tower 可帮您实施预防性、侦查性和主动控制措施,以管理您的 AWS 资源并监控多个 Amazon Web Services account 的合规性。每个控件都会强制执行一条规则。在此模式中,您使用提供的 IaC 模板来指定要在环境中部署哪些控件。
AWS Control Tower 控制适用于整个组织单位 (OU),该控制会影响组织单位内的每个 Amazon Web Services account。因此,当用户在您的登录区中的任何账户中执行任何操作时,该操作将受到管理 OU 的控制的约束。
实施 AWS Control Tower 控制,有助于为您的 AWS 登录区建立强大的安全基础。通过使用这种模式将控件部署为 IaC through CloudFormation 和 AWS CDK,您可以标准化着陆区域中的控件,并更有效地部署和管理它们。此解决方案在部署期间使用 cdk_nag
要将 AWS Control Tower 控件作为 IaC 部署,您也可以使用 HashiCorp Terraform 代替 AWS CDK。有关更多信息,请参阅使用 Terraform 部署和管理 AWS Control Tower 控件。
目标受众
建议具有使用 AWS Control Tower、AWS CDK 和 AWS Org CloudFormation anizations 经验的用户使用此模式。
先决条件和限制
先决条件
活跃的 Amazon Web Services account 作为一个组织在 AWS Organizations 和 AWS Control Tower 登录区进行管理。有关说明,请参阅创建账户结构
(AWS Well-Architected Labs)。 Node Package Manager (npm),已为 AWS CDK 安装和配置
。 AWS CDK 的 先决条件。
在部署账户中承担现有 AWS Identity and Access Management (IAM) 角色的权限。
在组织的管理账户中承担 IAM 角色的权限,该角色可用于引导 AWS CDK。该角色必须具有修改和部署 CloudFormation 资源的权限。有关更多信息,请参阅 AWS CDK 文档中的引导。
在组织的管理账户中创建 IAM 角色和策略的权限。有关更多信息,请参阅 IAM 文档中的访问 IAM 资源所需权限。
使用标识符 CT.CLOUDFORMATION.PR.1 应用基于服务控制策略(SCP)的控制。必须激活 SCP 才能部署主动控制。有关说明,请参阅禁止在 AWS CloudFormation 注册表中管理资源类型、模块和挂钩。
限制
此模式提供了跨 Amazon Web Services account(从部署账户到组织管理账户)部署此解决方案的说明。出于测试目的,您可直接在管理账户中部署此解决方案,但未明确提供此配置的说明。
产品版本
Python 版本 3.9 或更高版本
npm 版本 8.9.0 或更高版本
架构
目标架构
本部分概括介绍此解决方案,以及由示例代码建立的架构。下图显示了跨 OU 中的各个账户部署的控件。
![组织单位中所有 Amazon Web Services account 部署的控制架构图](images/pattern-img/7d0d5e37-58ac-4621-b6b0-cb8c1c767ab0/images/787b7ca0-9d29-4294-a407-6019e38f08c7.png)
AWS Control Tower 控件是根据其行为和指导分类的。
控制行主要包含三种类型:
预防性控制旨在防止行动发生。这些策略是通过 AWS Organizations 中的服务控制策略(SCP)实施的。预防性控制的状态为强制实施或未启用。所有 AWS 区域都支持预防性控制。
Det@@ ective 控件旨在在特定事件发生时对其进行检测并记录操作 CloudTrail。这些都是通过 AWS Config 规则实施。检测性控制的状态为合规、违规或未启用。检测性控制仅适用于 AWS Control Tower 支持的 AWS 区域。
主动控制会扫描将由 AWS 配置的资源, CloudFormation 并检查它们是否符合贵公司的政策和目标。不合规的资源将不会被配置。这些都是使用 AWS CloudFormation 挂钩实现的。主动控制的状态为通过、失败或跳过。
控制指南是指有关如何将每个控制应用于您的 OU 的推荐做法。AWS Control Tower 提供三类指导:强制性、强烈推荐和选择性。控制指导与其行为无关。有关更多信息,请参阅控制行为和指导。
工具
Amazon Web Services
AWS Cloud Development Kit (AWS CDK) 是一个软件开发框架,可帮助您在代码中定义和预调配 Amazon Web Services Cloud 基础设施。AWS CDK Toolkit 是与 AWS CDK 应用程序交互的主要工具。
AWS CloudFormation 可帮助您设置 AWS 资源,快速一致地配置这些资源,并在 AWS 账户和区域的整个生命周期中对其进行管理。
AWS Config 提供 Amazon Web Services account 中资源及其配置方式的详细视图。它可以帮助您确定资源之间的关联方式,以及它们的配置如何随时间变化。
AWS Control Tower 可帮您按照规范性最佳实践设置和管理 AWS 多账户环境。
AWS Organizations 是一项账户管理服务,使您可将多个 Amazon Web Services account 整合到您所创建的组织中并进行集中管理。
其他工具
代码存储库
此模式的代码可在使用 AWS CDK 存储库 GitHub 部署 AWS Control Tower 控件中找到
最佳实践
遵循最低权限原则(IAM 文档)。此模式中提供的示例 IAM policy 和信任策略包括所需最低权限,并且在管理账户中创建的 AWS CDK 堆栈受这些权限的限制。
遵循 AWS Control Tower 管理员最佳实践(AWS Control Tower 文档)。
遵循使用 AWS CDK 开发和部署云基础设施最佳实践(AWS CDK 文档)。
引导 AWS CDK 时,自定义引导模板以定义策略和应能够读取和写入管理账户中任何资源的受信任账户。有关更多信息,请参阅自定义引导。
使用代码分析工具(例如 cfn_nag)
来扫描生成的模板。 CloudFormation cfn-nag 工具在 CloudFormation 模板中寻找可能表明基础架构不安全的模式。你也可以使用 cdk-nag 通过 cloudformation-include 模块来检查你的 CloudFormation 模板。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
在管理账户中创建 IAM 角色。 |
| DevOps 工程师,通用 AWS |
引导 AWS CDK。 |
| DevOps 工程师,通用 AWS,Python |
克隆存储库。 | 在 bash Shell 中输入以下命令:这将使用来自的 AWS CDK 存储库克隆 Deploy AWS Control Tower 控件
| DevOps 工程师,通用 AWS |
编辑 AWS CDK 配置文件。 |
|
任务 | 描述 | 所需技能 |
---|---|---|
承担部署账户中的 IAM 角色。 | 在部署账户,承担有权在管理账户中部署 AWS CDK 堆栈的 IAM 角色。有关在 AWS CLI 中承担 IAM 角色的更多信息,请参见 在 AWS CLI 中使用 IAM 角色。 | DevOps 工程师,通用 AWS |
激活 环境。 | 如果您使用 Linux 或 macOS:
如果您使用的是 Windows:
| DevOps 工程师,通用 AWS |
安装依赖项。 | 激活虚拟环境后,输入以下命令运行 install_deps.sh 脚本。此命令安装必需的依赖项。
| DevOps 工程师,通用 AWS,Python |
部署 堆栈。 | 输入以下命令以合成和部署 CloudFormation 堆栈。
| DevOps 工程师,通用 AWS,Python |
相关资源
AWS 文档
关于控件(AWS Control Tower 文档)
控件库(AWS Control Tower 文档)
AWS CDK Toolkit 命令(AWS CDK 文档)
使用 Terraform (AWS Prescriptive Guidance) 部署和管理 AWS Control Tower 控件
其他资源
其他信息
constants.py 文件示例
下面是更新后的 constants.py 文件的示例。
ACCOUNT_ID = 111122223333 AWS_CONTROL_TOWER_REGION = us-east-2 ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role" GUARDRAILS_CONFIGURATION = [ { "Enable-Control": { "AWS-GR_ENCRYPTED_VOLUMES", ... }, "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...], }, { "Enable-Control": { "AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED", ... }, "OrganizationalUnitIds": ["ou-2222-22222222"...], }, ]
IAM policy
以下示例策略允许在将 AWS CDK 堆栈从部署账户部署到管理账户时启用或禁用 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:DescribeOrganizationalUnit", "organizations:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy", "ssm:GetParameters" ], "Resource": "*" } ] }
信任策略
以下自定义信任策略允许部署账户中特定 IAM 角色承担管理账户中的 IAM 角色。替换以下内容:
<DEPLOYMENT-ACCOUNT-ID>
是部署账户的 ID<DEPLOYMENT-ROLE-NAME>
是部署账户中允许在管理账户中担任该角色的角色的名称
{ “Version”: “2012-10-17”, “Statement”: [ { “Effect”: “Allow”, “Principal”: { “AWS”: “arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME>” }, “Action”: “sts:AssumeRole”, “Condition”: {} } ] }