如何使用TFsec来对你的Terraform代码进行安全扫描
字数 1393 2025-08-15 21:33:04
TFsec - Terraform代码安全扫描工具使用指南
一、TFsec简介
TFsec是一个专门针对Terraform代码的安全扫描工具,能够对Terraform模板执行静态扫描分析,并检查出潜在的安全问题。当前版本支持Terraform v0.12+版本。
主要功能
- 检查程序中是否包含敏感数据
- 检查代码是否违反AWS、Azure和GCP安全最佳实践建议
- 扫描功能模块(目前支持本地模块)
- 计算表达式和值
- 评估Terraform的功能函数(如concat()等)
二、安装方法
1. 使用包管理器安装
-
Homebrew/Linuxbrew:
brew install tfsec -
Chocolatey:
choco install tfsec
2. 从源码安装
- 从GitHub Releases页面下载对应平台的二进制文件
- 或使用go get:
go get -u github.com/tfsec/tfsec/cmd/tfsec
3. Docker方式
docker run --rm -it -v "$(pwd):/src" liamg/tfsec /src
三、基本使用
扫描目录
tfsec .
- 默认扫描当前工作目录
- 可指定扫描目录路径
- 发现安全问题则返回非零退出码
排除特定检查
tfsec . -e GEN001,GCP001,GCP002
使用-e参数后跟逗号分隔的检查ID列表
使用.tfvars文件
tfsec --tfvars-file terraform.tfvars
四、CI/CD集成
基本CI运行
tfsec --no-colour
--no-colour参数禁用彩色输出,适合CI环境- 检测到问题会以非零退出码退出
GitHub安全警报集成
使用tfsec-sarif-action GitHub Action:
- 将静态分析结果上传至GitHub安全警报
- 示例工作流配置:
- uses: tfsec/tfsec-sarif-action@v1
五、输出选项
支持多种输出格式,使用--format参数指定:
| 格式 | 参数值 | 适用场景 |
|---|---|---|
| JSON | json | 程序化处理 |
| CSV | csv | 表格处理 |
| Checkstyle | checkstyle | 与Checkstyle兼容工具集成 |
| Sarif | sarif | GitHub安全警报 |
| JUnit | junit | 测试报告 |
| 文本 | text | 人类可读 |
示例:
tfsec --format json
六、高级配置
1. 配置文件
TFsec支持通过配置文件.tfsec/config.yml进行配置,可设置:
- 排除的检查规则
- 自定义严重级别
- 输出格式等
2. 自定义规则
可以编写自定义规则来扩展TFsec的功能:
- 创建
custom_rules目录 - 编写YAML格式的规则文件
- 使用
--custom-check-dir参数指定目录
七、常见检查规则示例
AWS相关
- AWS001: S3 Bucket未启用版本控制
- AWS002: S3 Bucket未启用服务端加密
- AWS003: 未限制S3 Bucket的公共访问
Azure相关
- AZU001: 存储账户未启用加密
- AZU002: 未启用存储账户的防火墙规则
GCP相关
- GCP001: 未启用云存储桶的统一访问控制
- GCP002: 云存储桶未启用加密
八、最佳实践
-
集成到开发流程:
- 在提交前本地运行TFsec
- 在CI/CD流水线中加入TFsec检查
-
定期更新:
- 保持TFsec版本最新以获取最新规则
-
结果处理:
- 优先修复高风险问题
- 对误报使用
-e参数排除
-
团队协作:
- 共享配置文件和自定义规则
- 统一团队的安全标准
九、项目地址
GitHub仓库: https://github.com/tfsec/tfsec