变更审批与 PR Review 流程
High Contrast
Dark Mode
Light Mode
Sepia
Forest
2 min read317 words

变更审批与 PR Review 流程

核心问题:基础设施变更风险极高——怎样通过流程和工具保证每次变更都经过审查、测试和审批?


IaC 变更的四眼原则

没有人应该能够独自把未经审查的基础设施变更推到生产。最小审批流程:

flowchart LR DEV["工程师\n提交 PR"] AUTO["自动检查\n(CI Gates)"] REVIEW["同伴审查\n(Peer Review)"] APPLY["自动应用\n(Atlantis/Actions)"] DEV --> AUTO AUTO -->|通过| REVIEW REVIEW -->|批准| APPLY REVIEW -->|拒绝| DEV AUTO -->|失败| DEV

GitHub CODEOWNERS

CODEOWNERS 文件定义哪些人必须审批哪些文件的变更:

# .github/CODEOWNERS
# 所有 Terraform 变更必须经过 SRE 团队审批
infra/**/*.tf                @myorg/sre-team
# 生产环境变更额外需要 SRE Lead 审批
infra/environments/production/  @myorg/sre-team @myorg/sre-lead
# K8s RBAC 变更必须经过安全团队
k8s/**/rbac*.yaml             @myorg/security-team
# Helm Charts 变更必须经过应用团队 Lead
charts/**                     @myorg/platform-team
# ArgoCD Application 配置必须经过平台团队
clusters/**                   @myorg/platform-team @myorg/sre-team

PR Review 清单

# IaC PR Review Checklist
## Terraform 变更
- [ ] 有无 `-/+` 替换(删除重建)操作?是否知晓影响?
- [ ] 有无意外 `-`(删除)操作?
- [ ] state 变更是否符合预期?
- [ ] 安全组规则是否遵循最小权限?
- [ ] 是否有新的 IAM 权限授予?最小权限原则?
- [ ] 资源名称、标签是否符合命名规范?
- [ ] Checkov/tfsec 扫描是否通过?
- [ ] 变更影响范围:是 production 还是 staging?
## Kubernetes 变更
- [ ] 镜像 tag 是否具体版本(非 latest)?
- [ ] 是否设置了 resources requests/limits?
- [ ] 是否配置了 readiness/liveness 探针?
- [ ] PodDisruptionBudget 是否考虑了可用性?
- [ ] 是否有敏感信息明文写入?
- [ ] RBAC 变更是否必要,权限是否最小?
## 通用
- [ ] 是否有对应的测试或验证步骤?
- [ ] 是否更新了相关文档/CHANGELOG?
- [ ] 部署后怎样验证变更生效?
- [ ] 如果变更失败,回滚步骤是什么?

Atlantis:PR 驱动的 Terraform 工作流

Atlantis 把 Terraform plan/apply 的触发权交给 PR 评论:

# atlantis.yaml
version: 3
automerge: false
projects:
- name: prod-vpc
dir: infra/environments/production/vpc
terraform_version: v1.6.0
autoplan:
when_modified: ["*.tf", "../../../modules/vpc/**/*.tf"]
enabled: true
apply_requirements:
- approved          # 需要 CODEOWNERS 批准
- mergeable         # PR 无冲突
- undiverged        # 与 main 没有分叉
- name: prod-eks
dir: infra/environments/production/eks
depends_on: [prod-vpc]
apply_requirements:
- approved
- mergeable
# PR 中评论 atlantis 命令
atlantis plan          # 触发 plan
atlantis plan -p prod-vpc  # 只 plan 指定 project
atlantis apply         # 触发 apply(需要已批准)
atlantis unlock        # 解锁当前 PR 的状态

变更风险等级矩阵

变更类型 风险 审批要求
新增资源(+) 1 个 reviewer
就地更新(~) 1-2 个 reviewer
数据库配置变更 2 个 reviewer + 备份确认
删除资源(-) 2 个 reviewer + DBA 确认(数据库)
替换资源(-/+) 极高 变更冻结窗口外 + Lead 审批
RBAC/安全变更 security-team 审批
生产 IAM 策略 极高 CISO/安全负责人

变更冻结(Change Freeze)

生产发布前后、节假日期间,设置自动拒绝生产变更:

# Atlantis 项目级冻结策略
projects:
- name: prod-all
apply_requirements:
- approved
- mergeable
- custom:
name: no-change-freeze
command: |
# 检查当前是否在变更冻结窗口
current_hour=$(date -u +%H)
day_of_week=$(date -u +%u)
# 工作日 UTC 8:00-18:00 才能 apply
if [ "$day_of_week" -gt 5 ] || [ "$current_hour" -lt 8 ] || [ "$current_hour" -ge 18 ]; then
echo "变更冻结:仅工作日 UTC 8:00-18:00 允许生产变更"
exit 1
fi

完整 IaC 安全防线

代码提交阶段:
✅ pre-commit hooks:terraform fmt / validate / tfsec
✅ CODEOWNERS 自动分配 reviewer
PR 阶段(CI Gates):
✅ terraform fmt -check(格式检查)
✅ terraform validate(语法检查)
✅ tfsec / checkov(安全扫描)
✅ terraform plan(变更预览,自动评论到 PR)
✅ OPA/Conftest(策略检查)
审批阶段:
✅ CODEOWNERS 必须审批
✅ 变更风险评估
✅ 变更时间窗口检查
Apply 阶段:
✅ Atlantis apply(仅审批通过后可触发)
✅ terraform apply -input=false(非交互模式)
运行时防线:
✅ Gatekeeper Constraints(阻止不合规资源进集群)
✅ AWS Config Rules(云资源合规持续检查)
✅ Falco(运行时威胁检测)
---
## 本书总结
恭喜!你已完成《基础设施即代码实战指南》全部 12 章。
| 阶段 | 掌握的技能 |
|------|-----------|
| **Ansible(Ch02–03)** | 批量管理服务器配置,Role 复用,多环境管理,密钥安全 |
| **Terraform(Ch04–05)** | 声明式云资源管理,模块化,多账号,CI/CD 集成 |
| **Kubernetes(Ch06–07)** | Pod/Deployment/Service,存储,自动扩缩容 |
| **Helm(Ch08)** | 应用打包,版本管理,私有仓库 |
| **GitOps(Ch09)** | ArgoCD,声明式部署,漂移检测 |
| **可观测性(Ch10)** | Prometheus + Grafana 监控栈,告警 |
| **多集群(Ch11)** | RBAC,Namespace 隔离,环境晋级 |
| **安全合规(Ch12)** | 静态扫描,策略执行,变更审批 |
## 推荐下一步
- **[DevOps 实战指南](../../devops-guide/README.md)**——复习 Linux 服务器运维基础
- **[网络工程实战指南](../../networking-guide/README.md)**——深入理解 VPC/子网/安全组背后的网络原理
- **参加 CKA 认证**(Certified Kubernetes Administrator)——系统检验 Kubernetes 知识
> **从这里再出发**:
> - 把本书的 Ansible Playbook 应用到你的真实服务器
> - 用 Terraform 把下一个项目的 AWS 资源代码化
> - 把最重要的生产应用迁移到 Kubernetes + GitOps

全书完。 掌握 IaC 不是一蹴而就,每一步都值得动手实践。