如何使用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:

  1. 将静态分析结果上传至GitHub安全警报
  2. 示例工作流配置:
    - 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的功能:

  1. 创建custom_rules目录
  2. 编写YAML格式的规则文件
  3. 使用--custom-check-dir参数指定目录

七、常见检查规则示例

AWS相关

  • AWS001: S3 Bucket未启用版本控制
  • AWS002: S3 Bucket未启用服务端加密
  • AWS003: 未限制S3 Bucket的公共访问

Azure相关

  • AZU001: 存储账户未启用加密
  • AZU002: 未启用存储账户的防火墙规则

GCP相关

  • GCP001: 未启用云存储桶的统一访问控制
  • GCP002: 云存储桶未启用加密

八、最佳实践

  1. 集成到开发流程:

    • 在提交前本地运行TFsec
    • 在CI/CD流水线中加入TFsec检查
  2. 定期更新:

    • 保持TFsec版本最新以获取最新规则
  3. 结果处理:

    • 优先修复高风险问题
    • 对误报使用-e参数排除
  4. 团队协作:

    • 共享配置文件和自定义规则
    • 统一团队的安全标准

九、项目地址

GitHub仓库: https://github.com/tfsec/tfsec

TFsec - Terraform代码安全扫描工具使用指南 一、TFsec简介 TFsec是一个专门针对Terraform代码的安全扫描工具,能够对Terraform模板执行静态扫描分析,并检查出潜在的安全问题。当前版本支持Terraform v0.12+版本。 主要功能 检查程序中是否包含敏感数据 检查代码是否违反AWS、Azure和GCP安全最佳实践建议 扫描功能模块(目前支持本地模块) 计算表达式和值 评估Terraform的功能函数(如concat()等) 二、安装方法 1. 使用包管理器安装 Homebrew/Linuxbrew : Chocolatey : 2. 从源码安装 从GitHub Releases页面下载对应平台的二进制文件 或使用go get: 3. Docker方式 三、基本使用 扫描目录 默认扫描当前工作目录 可指定扫描目录路径 发现安全问题则返回非零退出码 排除特定检查 使用 -e 参数后跟逗号分隔的检查ID列表 使用.tfvars文件 四、CI/CD集成 基本CI运行 --no-colour 参数禁用彩色输出,适合CI环境 检测到问题会以非零退出码退出 GitHub安全警报集成 使用 tfsec-sarif-action GitHub Action: 将静态分析结果上传至GitHub安全警报 示例工作流配置: 五、输出选项 支持多种输出格式,使用 --format 参数指定: | 格式 | 参数值 | 适用场景 | |------|--------|----------| | JSON | json | 程序化处理 | | CSV | csv | 表格处理 | | Checkstyle | checkstyle | 与Checkstyle兼容工具集成 | | Sarif | sarif | GitHub安全警报 | | JUnit | junit | 测试报告 | | 文本 | text | 人类可读 | 示例: 六、高级配置 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