作为我们为所有人提供全面开源安全解决方案的目标的一部分,我们一直在将所有与扫描相关的工作整合到一个地方,那就是 Trivy。
在过去一年中,tfsec 为 Trivy 的 IaC 与错误配置扫描能力奠定了基础,包括 Terraform 扫描,而 Trivy 早已原生支持这些功能。
今后,我们希望鼓励 tfsec 社区迁移到 Trivy。迁移到 Trivy 后,你将获得同样出色的 Terraform 扫描引擎,并享有额外的好处:
如需了解更多关于 Trivy 与 tfsec 的对比,以及如何从 tfsec 迁移到 Trivy,请查看迁移指南。
tfsec 通过对你的 terraform 代码进行静态分析,来发现潜在的错误配置。
concat()被 Thoughtworks Tech Radar 评为 Adopt(采用):
对于使用 Terraform 的项目,tfsec 已迅速成为检测潜在安全风险的默认静态分析工具。它易于集成到 CI 流水线中,并且拥有针对所有主要云提供商和 Kubernetes 等平台的不断增长的检查库。鉴于其易用性,我们认为 tfsec 可以成为任何 Terraform 项目的有益补充。

通过 brew/linuxbrew 安装
brew install tfsec
通过 Chocolatey 安装
choco install tfsec
通过 Scoop 安装
scoop install tfsec
Bash 脚本(Linux):
curl -s https://raw.githubusercontent.com/aquasecurity/tfsec/master/scripts/install_linux.sh | bash
你也可以从发布页面获取适用于你系统的二进制文件。
或者,使用 Go 安装:
go install github.com/aquasecurity/tfsec/cmd/tfsec@latest
请注意,使用 go install 将直接从 master 分支安装,版本号不会通过 tfsec --version 显示。
发布页面上的二进制文件使用 tfsec 签名密钥 D66B222A3EA4C25D5D1A097FC34ACEFB46EC39CE 进行签名。
更多信息请查看签名页面上的验证说明。
tfsec 将扫描指定目录。如果未指定目录,则使用当前工作目录。
如果 tfsec 发现问题,退出状态将为非零,否则退出状态为零。
tfsec .
除了在系统上安装并运行 tfsec 之外,你也可以在 Docker 容器中运行 tfsec。
有多个 Docker 选项可供使用
运行:
docker run --rm -it -v "$(pwd):/src" aquasec/tfsec /src
正在开发一个 Visual Studio Code 扩展,用于集成 tfsec 结果。更多信息请参见 tfsec Marketplace 页面
如果你想将 tfsec 作为 GitHub Action 在你的仓库上运行,可以使用 https://github.com/aquasecurity/tfsec-pr-commenter-action。
你现在可以安装官方 tfsec 任务。如有任何问题或功能请求,请在任务仓库中提出。
你可能希望忽略某些警告。如果愿意,你可以简单地在模板中有问题的行添加包含 tfsec:ignore:<rule> 的注释。或者,你也可以将该注释添加到包含问题所在块的上方一行,或者添加到 module 块上,以忽略该模块内某个问题的所有出现。
例如,要忽略一个开放的安全组规则:
resource "aws_security_group_rule" "my-rule" {
type = "ingress"
cidr_blocks = ["0.0.0.0/0"] #tfsec:ignore:aws-vpc-no-public-ingress-sgr
}
...或者...
resource "aws_security_group_rule" "my-rule" {
type = "ingress"
#tfsec:ignore:aws-vpc-no-public-ingress-sgr
cidr_blocks = ["0.0.0.0/0"]
}
如果你不确定应该在哪一行添加注释,只需查看 tfsec 输出中发现问题所在的行号。
你可以通过在同一行上串联多条规则来忽略多个规则:
#tfsec:ignore:aws-s3-enable-bucket-encryption tfsec:ignore:aws-s3-enable-bucket-logging
resource "aws_s3_bucket" "my-bucket" {
bucket = "foobar"
acl = "private"
}
你可以使用 yyyy-mm-dd 格式为 ignore 设置过期日期。当你希望确保被忽略的问题不会被遗忘并在将来重新审视时,这是一个有用的功能。
#tfsec:ignore:aws-s3-enable-bucket-encryption:exp:2025-01-02
像这样的忽略仅在 2025-01-02 之前有效,此日期之后将被停用。
你可能希望排除某些检查不运行。如果愿意,你可以简单地在命令中添加参数 -e check1,check2,etc
tfsec . -e general-secrets-sensitive-in-variable,google-compute-disk-encryption-customer-keys
你可以在扫描中包含 tfvars 文件中的值,例如使用:--tfvars-file terraform.tfvars。
tfsec 支持许多流行的云和平台提供商
tfsec 专为在 CI 流水线中运行而设计。你可能希望在构建过程中运行 tfsec 而不带彩色输出。你可以使用 --no-colour(对于我们的美国朋友,也可以使用 --no-color)。
你可以将 tfsec 结果输出为 JSON、CSV、Checkstyle、Sarif、JUnit 或普通的人类可读格式。使用 --format 标志指定你想要的格式。
如果你想与 GitHub 安全警报集成并包含 tfsec 检查的输出,可以使用 tfsec-sarif-action GitHub action 运行静态分析,然后将结果上传到安全警报选项卡。
为 tfsec-example-project 生成的警报如下所示。

当你点击查看该分支的警报时,你会获得有关实际问题的更多信息。

有关添加安全警报的更多信息,请查看 GitHub 文档
如果你需要支持使用 HCL v1 的 terraform 版本(terraform <0.12),可以使用 tfsec 的 v0.1.3,不过支持非常有限,检查项也较少。
我们始终欢迎各种贡献,无论大小,可以是文档更新、添加新的检查项或更大的改动。请查看贡献指南了解如何提供帮助的详细信息。
由 contributors-img 制作。
tfsec 是 Aqua Security 的开源项目。
在此了解我们的开源工作和产品组合:此处。
加入社区,在 GitHub Discussion 或 Slack 与我们讨论任何问题。
| 镜像名称 | 基础镜像 | 说明 |
|---|
| aquasec/tfsec | alpine | 常规 tfsec 镜像 |
| aquasec/tfsec-alpine | alpine | 与 aquasec/tfsec 完全相同,适合喜欢明确指定的人 |
| aquasec/tfsec-ci | alpine | 无入口点的 tfsec——适用于需要覆盖命令的 CI 构建 |
| aquasec/tfsec-scratch | scratch | 基于 scratch 构建的镜像——没有任何多余装饰,只运行 tfsec |
| 检查 |
|---|
| AWS 检查 |
| Azure 检查 |
| GCP 检查 |
| CloudStack 检查 |
| DigitalOcean 检查 |
| GitHub 检查 |
| Kubernetes 检查 |
| OpenStack 检查 |
| Oracle 检查 |