安全与测试
Checkov/Trivy 与 HCP。
安全扫描与测试
这一课你将能做到
- 用 Trivy(tfsec) 和 Checkov 在提交前扫描 Terraform 的错误配置与合规问题
- 用 gitleaks 防止密钥进 Git,并给 Terraform 建立分层安全基线
- 用 IAM Access Analyzer 校验策略、按最小权限治理 Terraform 执行角色
为什么要学
Terraform 让创建云资源变得极快——快到一个错误配置也能在几秒钟内复制到所有环境:安全组对全世界开 22 端口、S3 桶默认关闭加密、RDS 公网可达、角色策略里的 Resource: "*"。这类问题靠人工评审很难每次发现,必须用自动化策略扫描在代码进入流水线时就拦住。这是「左移」在基础设施领域的具体含义。
同时要破除一个常见误解:扫描器不是安全的全部。密钥管理、state 保护、最小权限、云厂商侧护栏(Guardrails/SCP)共同构成防线。本课是整门课的收束,把前面散落的安全点串成体系,并说明 HCP Terraform 这类托管方案在其中的位置。
先建立图像
Terraform 的四层防线:
第 1 层 提交前:IDE / pre-commit(tflint + trivy + gitleaks)
第 2 层 CI verify:Checkov/Trivy 策略门禁,不过不允许合并
第 3 层 云账号边界:SCP / Guardrails / S3 公网块 / IAM 权限边界
第 4 层 运行与审计:CloudTrail、Config 漂移检测、Access Analyzer 告警
扫描关注点分类:
misconfig 配置违规(公网暴露、未加密、日志未开)
secret 代码中的密钥(AK/SK、私钥、令牌)
compliance 对照 CIS/NIST/等保基线的缺口
iam 策略过于宽松、可提权语句
跟着做
步骤 1:用 Trivy 扫描配置
Trivy 已合并原 tfsec,是 Aqua 维护的开源扫描器。安装:
# macOS
brew install trivy
# 或直接用容器运行,免安装
在配置目录执行:
trivy config --scanners misconfig,secret ./
对这样一段有问题的配置:
resource "aws_security_group" "bad" {
name = "bad"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
输出会类似:
main.tf:1 MEDIUM Security group allows ingress from 0.0.0.0/0 to 22
AVD-AWS-0101
https://avd.aquasec.com/nvd/...
只看高危、设置非零退出码(CI 门禁必需):
trivy config --severity HIGH,CRITICAL --exit-code 1 ./
步骤 2:用 Checkov 做合规基线扫描
Checkov(Bridgecrew/Prisma 出品)内置 CIS AWS Benchmark 等数百策略:
pip install checkov
checkov -d ./
按框架输出合规率:
checkov -d ./ --framework terraform --output cli
# Passed checks: 24, Failed checks: 2, Skipped checks: 0
工程实践中 Trivy 和 Checkov 二选一作为主力即可,规则集互补时可都跑。误报要显式抑制而不是关掉检查: