使用Terraform介绍三大AWS治理支柱
Source: Dev.to
三大治理支柱
为了让你动手实践新的基础设施技能,我来介绍三个将构成业务基础的 AWS 资源:Organizations(组织)、Accounts(账户) 和 Policies(策略)。

AWS Organizations 与组织单元 (Organizational Units)
Organization(组织) 充当整个云基础设施的控制塔,为多个 AWS 账户提供集中管理。其层级结构为:
- Organization Root(组织根) – 所有内容的唯一父容器。
- Organizational Units(组织单元,OUs) – 逻辑分组(例如 Production、Development、Security),帮助你按功能、环境或业务单元对账户进行划分。
Organizations 与 Accounts(账户)(位于 OUs 中)以及 Policies(策略)(可以在层级的任何级别附加)协同工作。
AWS Organization 账户
单个 AWS 账户是最基本的安全和资源边界。每个账户拥有独立的计费、访问控制和资源配额。使用多个账户可以提供:
- 天然的冲击半径(blast‑radius)隔离
- 简化的合规边界
- 更清晰的成本分配
账户会继承其父 OU 或组织根上应用的任何策略,从而形成自上而下的治理级联。
服务控制策略 (Service Control Policies, SCPs)
Service Control Policies(服务控制策略) 是一种护栏,定义了账户中任何实体能够拥有的最大权限,且不受 IAM 权限的影响。典型用例包括:
- 防止账户离开组织
- 限制允许的 AWS 区域
- 阻止删除关键资源,例如 CloudTrail 日志
SCP 可以附加到组织根、OU 或单个账户,并沿层级向下传播。
Terraform 模块
在本节中,我们将为治理资源创建可复用的 Terraform 模块。这些模块将存放在名为 terraform-aws-governance 的 GitHub 仓库中,作为 AWS 基础设施的构建块。
选择合适的粒度
在构建基础设施即代码(IaC)时,常见的三种组织方式:
- Monolithic(单体) – 单个大型 Terraform 配置。启动快,但随着规模增长会变得笨重且风险高。
- One‑repo‑per‑module(每模块一个仓库) – 每个模块独立仓库。隔离性最高,但一致性和版本管理更困难。
- Grouped modules(分组模块) – 将相关模块放在同一仓库(我们选择的方式)。在可复用性与可维护性之间取得平衡,并且与 Terragrunt 编排配合良好。
我们采用分组方式,因为治理资源本身就是相互关联且经常一起变更的。
核心模块
我们将从三个基础模块开始:
- organization – 创建带有基础安全策略的 AWS 组织
- organizational-unit – 创建可自定义策略的组织单元
- account – 在指定的 OU 中创建新 AWS 账户
每个模块都是无状态且幂等的,意味着可以重复执行而不会产生副作用。
仓库结构
terraform-aws-governance/
├── organization/
│ ├── main.tf
│ ├── variables.tf
│ └── outputs.tf
├── organizational-unit/
│ ├── main.tf
│ ├── variables.tf
│ └── outputs.tf
└── account/
├── main.tf
├── variables.tf
└── outputs.tf
这些模块可以配合 Terragrunt 编排,构建完整且治理良好的 AWS 基础设施栈。