4.9 KiB
4.9 KiB
title, type, tags, date
| title | type | tags | date | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| CTP Topic 16 Cross-account Terraform modules | source |
|
2026-04-14 |
Source File
Summary(用中文描述)
- 核心主题:跨账号 Terraform 模块的中心化部署方案,解决多账号 AWS 环境中一个模块内跨账号创建资源的安全与自动化问题
- 问题域:原有的 Gruntwork 流水线针对单账号设计,在多账号场景下存在安全风险(一账号被攻破可能波及全局)
- 方法/机制:基于 Shared Account(共享账号) 的中心化部署架构,Jenkins + ECS Deploy Runner + Assume Role 三者联动
- 结论/价值:实现安全性(账号间无直接信任关系)、自动化(Jenkins 自动识别跨账号模块)、可复用性(模块代码不硬编码特定账号角色)
Key Claims(用中文描述)
- Shared Account 作为中转站:Jenkins 托管在 Shared Account,当检测到
cross-account.json标记文件时触发 ECS Deploy Runner - Assume Role 双角色机制:ECS Deploy Runner 通过 Assume Role 访问目标账号的两个角色——
TF state bucket accessor(读取状态文件)和cross-account ECS deploy runner role(执行资源部署) - Blast Radius 控制:避免 Workload 账号之间直接互访,权限控制在受严格审计的 Shared Account
- Terragrunt HCL 全局配置:通过根目录
terragrunt.hcl定义远程状态存储和角色切换逻辑,支持本地开发与 Jenkins 自动部署的差异化角色处理
Key Quotes
"Cross-account Terraform Modules 指在一个模块内通过配置多个 Provider,实现在多个 AWS 账号中同时创建或管理资源的功能" — Fibos,核心概念定义 "Shared Account 是整个 Landing Zone 的核心管理账号,托管 Jenkins、镜像仓库等公共服务,并作为跨账号部署的信任源" — Fibos,架构定位 "ECS Deploy Runner 运行在 ECS 上的 Docker 容器,负责执行 Terraform plan 和 apply 命令,是流水线中的实际执行单元" — Fibos,EDR 定义
Key Concepts
- Cross-account Terraform Modules:在一个 Terraform 模块中通过配置多个 Provider,实现在多个 AWS 账号中同时创建或管理资源的功能
- Shared Account:Landing Zone 核心管理账号,托管 Jenkins 及公共服务,作为跨账号部署的信任源
- ECS Deploy Runner:运行在 ECS 上的 Docker 容器,负责执行 Terraform plan/apply,是流水线的实际执行单元
- TF State Bucket Accessor:专门定义的 IAM 角色,仅允许部署工具访问目标账号 S3 桶中的 Terraform 状态文件
- Cross-account ECS Deploy Runner Role:部署在目标账号中的角色,允许 Shared Account 的执行器通过 Assume Role 获取资源创建权限
- cross-account.json:约定俗成的标记文件,放置于模块目录中,用于告知 Jenkins 该模块需要调用跨账号部署逻辑
- Root Terragrunt HCL:全局 Terragrunt 配置文件,定义远程状态存储和角色切换逻辑
Key Entities
- Fibos:主讲人,分享了团队基于 Shared Account 的跨账号 Terraform 部署方案
- Gruntwork:参考架构来源,原有 Gruntwork 流水线主要针对单账号设计
- Jenkins:CI/CD 引擎,托管在 Shared Account,负责检测模块类型并触发部署流程
- AWS Landing Zone:多账号架构框架,Shared Account + Workload Account 的分层设计
Connections
- ctp-topic-9-ci-cd-with-gruntwork ← foundation ← ctp-topic-16-cross-account-terraform-modules
- ECS Deploy Runner ← depends_on ← Shared Account
- Cross-account Terraform Modules ← uses ← ECS Deploy Runner
- ECS Deploy Runner ← assumes ← Cross-account ECS Deploy Runner Role
- ECS Deploy Runner ← reads_state ← TF State Bucket Accessor
- Root Terragrunt HCL ← configures ← Cross-account Terraform Modules
- ctp-topic-48-terraform-vs-terragrunt ← related ← Root Terragrunt HCL
- AWS-Landing-Zone ← enables ← Shared Account
Contradictions
- 与 ctp-topic-9-ci-cd-with-gruntwork(单账号 Gruntwork 流水线):原有 Gruntwork 流水线主要针对单账号设计,不处理跨账号场景;本方案通过 Shared Account 中心化架构扩展支持多账号,同时保留 Gruntwork 模块复用优势。两者为演进关系而非冲突。
- 与 ctp-topic-32-using-atlantis-cicd-for-infrastructure-deployments(Atlantis 替代 Jenkins):Atlantis 在 merge 前应用变更,每个 Landing Zone 部署单台 EC2 实例;本方案的 ECS Deploy Runner 运行在容器中,更适合跨账号大规模部署。Atlantis 的跨账号访问通过各账户 IAM 角色实现,与本方案 Assume Role 机制类似,但执行载体不同。