2. AWS环境治理的挑战与原则
当团队从“一个人一个账号点控制台”走向“多团队、多环境、多账号”时,IaC 的难度并不在于 Terraform 或 CloudFormation 语法本身,而在于治理边界。AWS 的账号既是资源容器,也是安全、计费、配额和合规的天然边界。环境治理的本质,是在这些边界之间建立可预测、可审计、可自动化的规则,而不是靠人工约定。
多账号与多环境带来的四组核心矛盾
第一组矛盾是隔离与共享。生产、预发、测试、开发通常需要独立账号,避免测试流量、误删操作或权限扩散影响生产。但共享服务(如集中日志、镜像仓库、CI/CD 角色、DNS、VPC 对等)又必须跨账号复用。如果每个账号各自为政,网络和权限会迅速碎片化;如果全部塞进一个账号,爆炸半径又无法控制。
第二组矛盾是合规与交付速度。合规要求往往体现为“谁在什么条件下能改什么资源、变更是否留痕、关键配置是否持续满足基线”。例如要求所有 S3 存储桶默认加密、禁止公网访问、CloudTrail 必须开启并集中投递。若这些规则只写在文档里,交付越快,漂移越多;若全部靠人工审批,交付又会被拖慢。
第三组矛盾是成本可见性与责任归属。多账号下,账单天然按账号拆分,但一个业务可能横跨多个账号,一个账号也可能承载多个项目。没有统一标签和成本分摊策略,就会出现“账单能看,但不知道谁该负责”的局面。IaC 如果不把标签、预算、生命周期策略写进模板,成本治理就只能事后补救。
第四组矛盾是安全边界与运维便利。安全团队希望最小权限、强制 MFA、禁止长期密钥;开发和运维希望快速获取权限、方便排障。两者并非不可调和,但必须通过角色、权限边界、临时凭证和自动化审批来落地,而不是靠共享管理员账号。
治理原则:把规则前移到模板和流水线
面对上述矛盾,环境治理应遵循几条可操作的原则。
- 账号即边界,环境即账号。 生产、预发、测试、开发分别使用独立账号,共享服务放在独立的基础设施账号或共享服务账号。账号之间的访问通过 IAM 角色和资源策略显式授权,而不是复制密钥。
- 策略即代码,基线可验证。 把加密、日志、网络、标签等要求写成 AWS Config 规则、SCP、IAM 权限边界或 IaC 模块中的强制参数。每次部署后自动检查,而不是依赖评审记忆。
- 最小权限与临时凭证。 人和流水线都通过角色获取短期凭证;长期 Access Key 只保留给无法使用角色的极少数场景,并纳入轮换和监控。
- 标签即成本与归属。 所有可计费资源必须带统一标签,至少包括
Environment、Owner、Project、CostCenter。标签缺失应视为部署失败,而不是事后补录。 - 变更可追溯、可回滚。 IaC 的每次变更都通过版本控制和流水线执行,保留计划、审批、执行和结果记录。生产变更必须能回答“谁、何时、改了什么、为什么”。
落地策略:从账号结构到流水线控制
一个可落地的治理结构通常包含三层:组织层、账号层、资源层。组织层用 AWS Organizations 和 SCP 定义不可逾越的红线,例如禁止关闭 CloudTrail、禁止在非批准区域创建资源、禁止删除集中日志桶。账号层用 IAM 角色、权限边界和基线模板定义“这个账号能做什么”。资源层用 IaC 模块和标签策略定义“每个资源长什么样”。
下面这张图展示了一个典型的多账号治理拓扑:管理账号负责组织与策略,安全账号集中日志与审计,共享服务账号提供 CI/CD 和镜像仓库,业务账号按环境隔离,所有账号的日志和关键事件汇聚到安全账号。
在这个结构中,SCP 是“不可逾越的红线”,它不授予权限,只限制权限上限。例如,可以在组织根或生产 OU 上附加一条 SCP,拒绝 cloudtrail:StopLogging、s3:DeleteBucket 以及所有非批准区域的资源创建。这样即使某个账号的管理员误操作,也无法关闭审计或把资源开到未批准区域。
IAM 权限边界则用于约束“角色最多能有多大权限”。例如,CI/CD 角色需要跨账号部署,可以给它 sts:AssumeRole 权限,但权限边界限制它只能扮演目标账号中带有特定标签的部署角色,不能直接创建 IAM 用户或修改组织策略。
标签策略是成本与归属的抓手。可以在 Organizations 中定义标签键 Environment、Owner、Project、CostCenter,并要求所有支持标签的资源必须携带。IaC 模块中把这些标签作为必填变量,缺失时计划阶段就报错。这样成本分配报告才能按项目和环境聚合,预算告警才能定位到负责人。
一个可参考的治理检查清单
下面这份清单可以直接用于新账号接入或季度治理复盘。它不追求大而全,而是覆盖最容易出问题的控制点。
| 控制域 | 检查项 | 判断依据 |
|---|---|---|
| 账号结构 | 生产、预发、测试、开发是否独立账号 | Organizations 账号列表与 OU 归属 |
| 审计 | CloudTrail 是否开启并集中投递到安全账号 | 安全账号日志桶有各账号轨迹 |
| 合规 | Config 规则是否覆盖加密、公网、标签 | Config 聚合器无不合规资源或已豁免 |
| 权限 | 是否存在长期 Access Key | IAM 凭证报告与轮换记录 |
| 成本 | 可计费资源是否带齐四个标签 | 成本分配报告按标签聚合无“未分配” |
| 变更 | 生产变更是否经流水线且可回滚 | 流水线执行记录与 IaC 版本历史 |
最后需要强调,多账号、多环境、合规、成本与安全之间的矛盾,无法通过单一工具消除,只能通过分层策略持续平衡。组织层定红线,账号层定边界,资源层定基线,流水线负责执行和留痕。IaC 的价值,正是把这些规则从“口头约定”变成“可版本化、可审查、可自动验证”的代码。只有规则前移,环境治理才不会随着账号数量增长而失控。