用途
本技能用于对 Terraform 基础设施即代码(IaC)进行安全审计,在部署前发现云基础设施配置中的安全错误。适用场景包括:将安全扫描集成到 Terraform 部署的 CI/CD 流水线中;在应用前审查 Terraform 计划和模块的安全最佳实践;为云基础设施配置构建策略即代码护栏;审计现有 Terraform 状态文件以识别已部署的配置错误;跨多个 Terraform 项目强制执行组织安全标准。
不适用于:运行时安全监控(应使用 CSPM 工具)、应用安全测试(应使用 SAST/DAST 工具)、云配置漂移检测(部署后应使用 AWS Config 或 Azure Policy)。
前置条件
- 已安装 Checkov(pip install checkov)
- 已安装 tfsec(brew install tfsec 或从 GitHub 获取二进制文件)
- 已安装 Terrascan(brew install terrascan)
- Terraform v1.0+ 用于生成计划
- OPA(Open Policy Agent)用于自定义策略执行
- 包含待审计 Terraform 代码的 Git 仓库
主要能力与工作流程
1. 使用 Checkov 扫描 Terraform 代码
Checkov 是支持 Terraform、CloudFormation、Kubernetes 和 Docker 的 IaC 静态分析工具,内置 1000+ 策略。可扫描 Terraform 目录、指定检查类别、输出 JSON、扫描 Terraform 计划文件以获得更准确的分析、跳过特定检查、扫描模块、列出所有可用检查。
2. 使用 tfsec 扫描 Terraform 特定问题
tfsec 是 Terraform 原生安全分析工具,提供详细修复指导。可扫描目录、设置最低严重性阈值、输出 JSON 供 CI/CD 处理、使用自定义检查、排除特定规则、生成 SARIF 输出用于 GitHub Security 标签页。
3. 使用 Terrascan 进行多框架合规检查
Terrascan 支持针对 CIS、NIST 和 SOC 2 框架的合规检查。可针对 CIS AWS 基准扫描、按合规框架扫描、输出 JSON、扫描 Terraform 计划、列出可用策略。
4. 创建自定义 OPA 策略
使用 Rego 语言编写组织特定的安全要求策略,例如:S3 存储桶必须启用服务端加密、IAM 策略不得使用通配符操作、安全组不得允许来自 0.0.0.0/0 的 SSH。可使用 opa eval 或 Conftest 对 Terraform 计划进行评估。
5. 集成到 CI/CD 流水线
将 IaC 安全扫描添加为强制 CI/CD 门禁。示例包括 GitHub Actions 工作流:检出代码、设置 Terraform、执行 init 和 plan、运行 Checkov 扫描、运行 tfsec 扫描、上传 SARIF、执行 OPA 策略检查。
6. 扫描 Terraform 状态以发现已部署的配置错误
导出当前状态为 JSON,使用 Checkov 扫描状态,查询特定安全问题,查找缺少必需标签的资源。
关键概念
- 基础设施即代码(IaC):通过声明式配置文件(Terraform、CloudFormation)管理云基础设施,而非手动控制台操作。
- 策略即代码:将安全和合规策略表达为可执行代码(Rego、Python),可自动针对基础设施定义进行评估。
- 左移安全:在开发生命周期早期进行安全检查,在部署前扫描 IaC,而非在配置后审计。
- Terraform 计划:Terraform 将所做更改的预览,可导出为 JSON 供应用前安全扫描。
- Checkov:开源 IaC 静态分析工具,支持 Terraform、CloudFormation、Kubernetes 和 Docker,内置 1000+ 策略。
- OPA/Rego:Open Policy Agent 及其策略语言 Rego,用于定义针对结构化数据输入的自定义安全规则。
工具与系统
- Checkov:全面的 IaC 扫描器,1000+ 策略,支持 Terraform、CloudFormation、Kubernetes、ARM 和 Dockerfile。
- tfsec:Terraform 专用静态分析工具,提供详细修复指导和 SARIF 输出。
- Terrascan:多 IaC 扫描器,支持合规框架(CIS、NIST、SOC 2)和策略即代码。
- OPA/Conftest:自定义策略引擎,使用 Rego 语言定义组织特定安全规则。
- Bridgecrew:基于 Checkov 的商业平台,提供漂移检测和供应链安全。
常见场景
场景:为现有 Terraform CI/CD 流水线添加安全门禁
背景:DevOps 团队通过 GitHub Actions 中的 Terraform 部署基础设施,但没有安全扫描。近期审计发现多个 S3 存储桶未加密,安全组允许来自互联网的 SSH。
方法:将 Checkov 添加为 GitHub Actions 工作流中的第一个安全门禁;运行 checkov -d ./terraform/ 建立当前发现基线;分类现有发现:修复 CRITICAL 问题,为 HIGH 创建工单,抑制已接受的风险;添加 tfsec 作为辅助扫描器;为组织标准(必需标签、命名约定)编写自定义 OPA 策略;配置流水线阻止包含 CRITICAL 或 HIGH 发现的 PR;生成 SARIF 报告用于 GitHub Security 标签页集成。
陷阱:向现有项目添加安全扫描最初会产生数百个发现。应逐步实施,从仅阻止 CRITICAL 开始,然后扩展到 HIGH。使用内联抑制注释(#checkov:skip=CKV_AWS_18:Public bucket for static website)处理有意的例外,并记录理由。
输出格式
审计报告包含:仓库、分支、扫描日期、使用的工具;扫描结果(各工具通过/失败数量);关键发现(含文件、资源、检查项、修复建议);按严重性汇总(Critical、High、Medium、Low、Info)。
限制
本技能不适用于运行时安全监控、应用安全测试或云配置漂移检测。具体收费、价格、平台支持范围等信息暂未提供。