使用Terraform介绍三大AWS治理支柱

发布: (2025年12月14日 GMT+8 04:30)
4 min read
原文: Dev.to

Source: Dev.to

三大治理支柱

为了让你动手实践新的基础设施技能,我来介绍三个将构成业务基础的 AWS 资源:Organizations(组织)Accounts(账户)Policies(策略)

AWS Organization

AWS Organizations 与组织单元 (Organizational Units)

Organization(组织) 充当整个云基础设施的控制塔,为多个 AWS 账户提供集中管理。其层级结构为:

  • Organization Root(组织根) – 所有内容的唯一父容器。
  • Organizational Units(组织单元,OUs) – 逻辑分组(例如 ProductionDevelopmentSecurity),帮助你按功能、环境或业务单元对账户进行划分。

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 基础设施栈。

Back to Blog

相关文章

阅读更多 »