---
title: "CTP Topic 16 Cross-account Terraform modules"
type: cloud-learning
source-type: video
category: "DevOps & SRE/03_Terraform"
tags:
  - Terraform
  - Cross-Account
  - Modules
  - CTP
date-added: 2026-04-14
video-source: "nas:///volume2/work/Public Cloud Learning Sessions/CTP _ Topic 16_ Cross-account Terraform modules.mp4"
audio-source: ""
status: summarized (Gemini 摘要)
---

# CTP Topic 16 Cross-account Terraform modules

**Source:** NAS `/volume2/work/Public Cloud Learning Sessions/CTP _ Topic 16_ Cross-account Terraform modules.mp4`

**Type:** VIDEO | **Category:** 03_Terraform

**Status:** ✅ 已完成（Gemini 摘要）

---

## 摘要

> 本次会议由 Fibos 主讲，重点探讨了在多账号 AWS 环境中如何实现和管理 **Cross-account Terraform Modules（跨账号 Terraform 模块）**。在复杂的云架构中，经常需要在一个模块内跨多个账号创建资源（例如在 InfoBlocks 账号配置 DNS，同时在 Workload 账号部署应用）。然而，原有的 Gruntwork 流水线主要针对单账号设计，且直接赋予账号间互访权限存在巨大的安全风险（如某一账号被攻破可能波及全局）。
>
> 为了解决这一问题，团队设计了一套基于 **Shared Account（共享账号）** 的中心化部署方案。核心思路是利用托管 Jenkins 的 Shared Account 作为中转站。当 Jenkins 检测到模块目录中存在 `cross-account.json` 标记文件时，会触发 Shared Account 中的 ECS Deploy Runner。该 Runner 被授予特殊权限，能够通过 Assume Role 方式访问目标账号的两个关键角色：一是用于读取状态文件的 `TF state bucket accessor`，二是用于执行资源部署的 `cross-account ECS deploy runner role`。
>
> 这种架构实现了三大目标：首先是**安全性**，避免了 Workload 账号之间的直接信任，将权限控制集中在受严格审计的 Shared Account；其次是**自动化**，通过 Jenkins 自动识别模块类型并选择正确的部署路径；最后是**可复用性**，模块代码中不再硬编码特定账号的角色，提高了代码的灵活性。Fibos 还详细演示了如何通过修改根目录的 `terragrunt.hcl` 配置文件来支持这种全局性的角色切换逻辑，并简要介绍了本地开发与 Jenkins 自动部署在角色处理上的差异。

---

## 关键概念

- **Cross-account Modules**: 指在一个 Terraform 模块中通过配置多个 Provider，实现在多个 AWS 账号中同时创建或管理资源的功能。
- **Shared Account**: 整个落地分区（Landing Zone）中的核心管理账号，托管 Jenkins、镜像仓库等公共服务，并作为跨账号部署的信任源。
- **ECS Deploy Runner (EDR)**: 运行在 ECS 上的 Docker 容器，负责执行具体的 Terraform plan 和 apply 命令，是流水线中的实际执行单元。
- **TF state bucket accessor**: 一种专门定义的 IAM 角色，仅允许部署工具访问存储在目标账号 S3 桶中的 Terraform 状态文件。
- **Cross-account ECS deploy runner role**: 部署在目标账号中的角色，允许 Shared Account 的执行器通过切换角色来获取在该账号内创建资源的权限。
- **cross-account.json**: 一个约定俗成的标记文件，放置在模块目录中，用于告知 Jenkins 该模块需要调用跨账号部署逻辑。
- **Root Terragrunt HCL**: 全局 Terragrunt 配置文件，用于定义所有模块通用的远程状态存储（Remote State）和角色切换逻辑。

---

## 相关视频

> [!info]+ 交叉引用
> [[Gruntwork Pipeline Deep Dive]] — 了解基础的单账号 Gruntwork 流水线工作原理。
> [[AWS Multi-account Security Best Practices]] — 探讨为何要限制账号间的直接访问权限（Blast Radius 控制）。
> [[Terragrunt Advanced Configuration]] — 深入学习如何利用 Terragrunt 的继承机制管理复杂环境。

## 相关视频

> 配对视频笔记链接（生成后填入）

---

*最后更新: 2026-04-14*
