- 该项目已不再维护。仓库已归档,不再接受任何更新、问题或拉取请求。
- 欢迎您根据需要fork该仓库以继续开发。

Terrascan 是一款面向基础设施即代码(Infrastructure as Code)的静态代码分析工具。Terrascan 能让您:
Terrascan 支持多种安装方式,并可作为 Docker 镜像使用。 请查看 Terrascan 的 发布页 获取所有受支持平台的最新构建版本。请选择适合您平台的二进制文件。
curl -L "$(curl -s https://api.github.com/repos/tenable/terrascan/releases/latest | grep -o -E "https://.+?_Linux_x86_64.tar.gz")" > terrascan.tar.gz
tar -xf terrascan.tar.gz terrascan && rm terrascan.tar.gz
sudo install terrascan /usr/local/bin && rm terrascan
terrascan
AUR 安装ArchLinux 和 Manjaro 用户可通过以下命令安装:
yay -S terrascan
brew 安装Homebrew 用户可通过以下命令安装:
$ brew install terrascan
Terrascan 也可作为 Docker 镜像使用,使用方法如下:
$ docker run tenable/terrascan
更多信息请参考 文档。
要扫描您的代码以发现安全问题,可以运行以下命令(默认扫描 Terraform):
$ terrascan scan
注意:如果扫描过程中发现任何错误或违规项,Terrascan 将以错误码退出。
| 场景 | 退出码 |
|---|---|
| 扫描摘要包含错误和违规项 | 5 |
| 扫描摘要包含错误但没有违规项 | 4 |
| 扫描摘要包含违规项但没有错误 | 3 |
| 扫描摘要没有违规项也没有错误 | 0 |
| 扫描命令因输入无效而出错 | 1 |
Terrascan 可以集成到 CI/CD 流水线中,以强制执行安全最佳实践。 请参考我们的 文档,了解如何集成到您的流水线中。
您可以使用 terrascan 命令配合以下选项:
$ terrascan
Terrascan
用法:
terrascan [命令]
可用命令:
help 查看关于任何命令的帮助信息
init 初始化 Terrascan
scan 检测基础设施即代码中的合规与安全违规项
server 以 API 服务器方式运行 Terrascan
version 显示 Terrascan 版本
标志:
-c, --config-path string 配置文件路径
-h, --help 显示 terrascan 帮助信息
-l, --log-level string 日志级别(debug、info、warn、error、panic、fatal)(默认 "info")
-x, --log-type string 日志输出类型(console、json)(默认 "console")
-o, --output string 输出类型(human、json、yaml、xml)(默认 "human")
使用 "terrascan [命令] --help" 查看某个命令的更多信息。
Terrascan 的策略使用 Rego 策略语言 编写。每个 rego 文件包含一个 JSON "规则" 文件,用于定义策略的元数据。 默认情况下,Terrascan 在首次扫描时会从 Terrascan 仓库下载策略。但是,如果您想要下载最新策略,则需要运行初始化过程。请参阅 使用说明 了解初始化过程的相关信息。
注意:如果未找到任何策略,扫描命令将隐式运行初始化过程。
您可以使用 --find-vuln 标志,在 Terrascan 的输出中收集由其仓库报告的漏洞。目前 Terrascan 支持 Elastic Container Registry(ECR)、Azure Container Registry、Google Container Registry 和 Google Artifact Registry。
--find-vuln 标志可在扫描 IaC 文件时使用,如下所示:
$ terrascan scan -i <IaC provider> --find-vuln
关于如何设置环境以向仓库 API 进行身份验证的更多信息和说明,请参阅 使用说明 文档。
默认情况下,Terrascan 会针对所有策略扫描您的整个配置。但 Terrascan 支持对策略和资源进行精细配置。
请在我们的文档站点上阅读更多关于 文件中标记 和 配置文件 的内容。
以下是一些快速提示:
您可以配置 Terrascan 在扫描资源时跳过某个特定策略(规则)。请根据您的平台按照以下步骤操作:
使用 Terraform 脚本,在资源内部插入包含 "ts:skip=<RULENAME><SKIP_REASON>" 的注释,来配置 Terrascan 跳过规则。注释应像下方示例一样放在资源内部。

在 Kubernetes YAML 文件中,您可以通过添加注释来配置 Terrascan 跳过策略,如下方代码片段所示。

使用 Terrascan 配置文件手动选择应从整个扫描中包含或排除的策略。这适用于边界用例。 使用 "文件中抑制" 选项来指定应从特定策略的测试中排除的资源。这样可以确保策略仅跳过特定资源,而不是所有资源。

Terrascan 的默认输出是扫描 IaC 中存在的违规项列表。示例输出如下:

Terrascan 可以在本地构建。如果您希望使用最新版本或在开发 Terrascan 时,这会很有帮助。需要 gcc 和 Go 1.19 或更高版本。
$ git clone [email protected]:tenable/terrascan.git
$ cd terrascan
$ make build
$ ./bin/terrascan
FROM golang:alpine AS build-env
RUN apk add --update git
RUN git clone https://github.com/tenable/terrascan && cd terrascan \
&& CGO_ENABLED=0 GO111MODULE=on go build -o /go/bin/terrascan cmd/terrascan/main.go
要了解有关开发和贡献 Terrascan 的更多信息,请参阅 贡献指南。
我们相信拥有一个开放且包容的社区对所有人都有益。请注意,本项目采用了 贡献者行为准则。通过参与本项目,您同意遵守其条款。
Terrascan 基于 Apache 2.0 许可证 进行分发。