AI 生成的 IaC 防护措施:MyCoCo 如何实现速度的可持续性
Source: Dev.to

TL;DR
问题: AI 生成的 Terraform 能通过 terraform validate,但不符合组织合规——缺少标签、IAM 权限过宽、资源暴露。
解决方案: 在 PR 级别实现基于 OPA 的策略防护栏,在代码进入生产前捕获 AI 的盲点。
影响: MyCoCo 将每个 AI 生成模块的安全发现从 47 降至 3,同时保留 70 % 的速度提升。
关键实现: 针对常见 AI 漏洞的自定义 OPA 策略:必需标签、加密强制、最小特权 IAM。
结论: AI 能加速 IaC 开发,但只有通过自动化策略强制注入组织上下文,才能实现可持续的速度。

挑战:MyCoCo 的 AI 实验
Jordan,MyCoCo 的平台工程师,坚信 AI 能彻底改变他们的基础设施交付。随着一次重要产品发布临近,平台团队面临一个不可能的时间表:在六周内交付 30 个全新 Terraform 模块。借助 GitHub Copilot 和 Claude,Jordan 的团队在两周内完成了这些模块。
“我们交付基础设施的速度前所未有。AI 完全懂得 Terraform 语法。每个模块第一次就通过了验证。”
Maya,安全工程师,执行了预生产的 Checkov 扫描。结果让发布计划瞬间停摆:平均每个模块出现 47 条安全发现——未加密的 S3 桶、带通配符 IAM 权限的 Lambda 函数,以及 缺少必需的 Environment、Owner、CostCenter 标签。
“AI 写出了语法完美的 Terraform,但它根本不了解我们的标签策略、命名约定或安全基线。它生成的代码更像是一个全新创业公司,而不是准备通过 SOC 2 审计的公司。”
Sam,高级 DevOps 工程师,从一开始就警告团队。信任缺口真实存在——团队对 AI 生成的代码的信任度甚至超过了手写代码,尽管对其逻辑的可见性更低。
Alex,工程副总裁,面临两难:要么推迟发布手动修复每个模块,要么找到一种让 AI 生成的代码自动符合 MyCoCo 标准的办法。
解决方案:针对 AI 生成代码的 OPA 防护栏
MyCoCo 的解决方案并不是放弃 AI,而是教会流水线 AI 所不知道的内容。团队采用 Open Policy Agent (OPA) 并结合 Conftest 实现了 三层策略强制。
第 1 层:必需标签策略
AI 最常遗漏的是资源标签。该 OPA 策略会阻止任何缺少必需标签的 PR:
# policy/tags.rego
package terraform.tags
required_tags := ["Environment", "Owner", "CostCenter"]
deny[msg] {
resource := input.resource_changes[_]
resource.change.actions[_] == "create"
tags := object.get(resource.change.after, "tags", {})
missing := [tag | tag := required_tags[_]; not tags[tag]]
count(missing) > 0
msg := sprintf(
"%s '%s' missing required tags: %v",
[resource.type, resource.name, missing]
)
}
第 2 层:加密强制
AI 生成的 S3 桶和 RDS 实例经常缺少加密,这违反了 SOC 2 要求:
# policy/encryption.rego
package terraform.encryption
deny[msg] {
resource := input.resource_changes[_]
resource.type == "aws_s3_bucket"
resource.change.actions[_] == "create"
# Check for server‑side encryption configuration
not has_encryption_config(resource.address)
msg := sprintf(
"S3 bucket '%s' must have encryption enabled",
[resource.name]
)
}
第 3 层:IAM 最小特权
最危险的 AI 模式是使用通配符 IAM 权限。此策略在代码进入生产前捕获过宽的策略:
# policy/iam.rego
package terraform.iam
deny[msg] {
resource := input.resource_changes[_]
resource.type == "aws_iam_policy"
policy_doc := json.unmarshal(resource.change.after.policy)
statement := policy_doc.Statement[_]
statement.Effect == "Allow"
statement.Action[_] == "*"
msg := sprintf(
"IAM policy '%s' contains wildcard Action - use least privilege",
[resource.name]
)
}
流水线集成
这些策略被集成到 GitHub Actions 工作流中,对每一次 Terraform plan 运行 Conftest:
- name: Policy Check
run: |
terraform plan -out=tfplan
terraform show -json tfplan > tfplan.json
conftest test tfplan.json --policy policy/
任何策略违规都会阻止 PR 合并,并提供明确的错误信息,说明具体需要修复的内容。Jordan 发现,当 AI 助手收到具体错误信息后,往往能够自行修复违规——这让防护栏成为了一个反馈回路。
结果:MyCoCo 的转型
实施 OPA 防护栏三周后,MyCoCo 的关键指标出现显著变化:
| 指标 | 实施前 | 实施后 | 降幅 |
|---|---|---|---|
| 每个 AI 生成模块的安全发现数量 | 47 | 3 | 94 % |
| 开发速度 | — | 约 70 % 的原始加速收益 | — |
| 标签合规性(手写代码) | 存在缺口 | 全面提升 | — |
“我们不再把 AI 当作代码生成器,而是把它当作快速的第一稿。防护栏不是减速带,而是让速度可持续的质量门。”
Maya 将这些策略写入 MyCoCo 的安全文档,创建了一个 “AI 生成代码检查清单”,新成员在使用编码助手前必须审阅。发布按计划进行,基础设施在首次审计即通过了 SOC 2。
关键要点
- 语法正确并不等同于安全合规。 即使
terraform validate通过,AI 生成的代码仍可能不满足 90 % 以上的安全要求。 - 组织上下文至关重要。 防护栏注入了 AI 所缺乏的标签、加密和最小特权策略。
- Policy‑as‑code 构建反馈回路。 清晰的错误信息让 AI 助手(或开发者)能够自动纠正问题。
- 防护栏惠及所有代码。 一旦部署,手写模块同样会变得更合规。
- 可持续的速度需要自动化质量门。 将 AI 辅助与 OPA 策略相结合,既保持了开发速度,又确保了合规性。