简介
Terrascan 是一个基础设施即代码的静态代码分析器。Terrascan 允许你:
- 无缝扫描基础设施即代码中的错误配置。
- 监控已配置的云基础设施,检测引入姿态偏移的配置更改,并能够恢复到安全姿态。
- 检测安全漏洞和合规性违规。
- 在配置云原生基础设施之前降低风险。
- 提供灵活性,可以在本地运行或集成到你的 CI\CD 中。
资源
-
要在浏览器中试用 Terrascan,请参阅 Terrascan 沙盒 https://www.tenable.com/terrascan
-
要了解有关 Terrascan 功能和能力的更多信息,请参阅文档门户:https://runterrascan.io
主要特点
- 500+ 安全最佳实践策略
- 扫描 Terraform (HCL2)
- 扫描 AWS CloudFormation 模板 (CFT)
- 扫描 Azure 资源管理器 (ARM)
- 扫描 Kubernetes (JSON/YAML)、Helm v3 和 Kustomize
- 扫描 Dockerfiles
- 支持 AWS、Azure、GCP、Kubernetes、Dockerfile 和 GitHub
- 集成 AWS、Azure、GCP、Harbor 容器注册表的 Docker 镜像漏洞扫描。
快速入门
第 1 步:安装
Terrascan 支持多种安装方式,也可作为 Docker 镜像使用。 请查看 Terrascan 的发布页面获取所有支持平台的最新版本构建。选择适合你平台的正确二进制文件。
安装为原生可执行文件
$ curl -L "$(curl -s https://api.github.com/repos/tenable/terrascan/releases/latest | grep -o -E "https://.+?_Darwin_x86_64.tar.gz")" > terrascan.tar.gz
$ tar -xf terrascan.tar.gz terrascan && rm terrascan.tar.gz
$ install terrascan /usr/local/bin && rm terrascan
$ terrascan
在 ArchLinux / Manjaro 上通过 AUR
安装
ArchLinux 和 Manjaro 用户可以通过以下方式安装:
yay -S terrascan
通过 brew
安装
Homebrew 用户可以通过以下方式安装:
$ brew install terrascan
Docker 镜像
Terrascan 也可作为 Docker 镜像使用,使用方法如下:
$ docker run tenable/terrascan
有关更多信息,请参阅文档。
第 2 步:扫描
要扫描你的代码是否存在安全问题,可以运行以下命令(默认扫描 Terraform)。
$ terrascan scan
注意:如果在扫描过程中发现任何错误或违规,Terrascan 将以错误代码退出。
可能的退出代码列表
场景 | 退出代码 |
---|---|
扫描摘要有错误和违规 | 5 |
扫描摘要有错误但没有违规 | 4 |
扫描摘要有违规但没有错误 | 3 |
扫描摘要没有违规或错误 | 0 |
由于无效输入导致扫描命令出错 | 1 |
第 3 步:与 CI\CD 集成
Terrascan 可以集成到 CI/CD 管道中,以强制执行安全最佳实践。 请参阅我们的文档以与你的管道集成。
Terrascan 命令
你可以使用带有以下选项的 terrascan
命令:
$ terrascan
Terrascan
用法:
terrascan [命令]
可用命令:
help 获取任何命令的帮助
init 初始化 Terrascan
scan 检测基础设施即代码中的合规性和安全性违规。
server 将 Terrascan 作为 API 服务器运行
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 存储库下载策略。但是,如果你想下载最新的策略,你需要运行初始化过程。有关初始化过程的信息,请参阅使用说明。
注意:如果没有找到策略,scan 命令将隐式运行初始化过程。
Docker 镜像漏洞
你可以使用 --find-vuln
标志将注册表中报告的漏洞作为 Terrascan 输出的一部分收集。目前 Terrascan 支持弹性容器注册表 (ECR)、Azure 容器注册表、Google 容器注册表和 Google Artifact 注册表。
在扫描 IaC 文件时可以使用 --find-vuln
标志,如下所示:
$ terrascan scan -i <IaC provider> --find-vuln
有关如何设置环境以验证注册表 API 的更多信息和说明,请参阅使用说明文档。
自定义扫描
默认情况下,Terrascan 会根据所有策略扫描整个配置。但是,Terrascan 支持策略和资源的精细配置。
现在,一些快速提示:
如何在扫描资源时排除策略
你可以配置 Terrascan 在扫描资源时跳过特定策略(规则)。根据你的平台,按照以下步骤操作:
Terraform
使用 Terraform 脚本配置 Terrascan 跳过规则,方法是插入带有短语 "ts:skip=<规则名称><跳过原因>"
的注释。注释应包含在资源内部,如下例所示。
Kubernetes
在 Kubernetes yaml 中,你可以通过添加注释来配置 Terrascan 跳过策略,如下面的代码片段所示。
如何从扫描中包含或排除特定策略或资源
使用 Terrascan 配置文件手动选择应包含或排除在整个扫描中的策略。这适用于边缘用例。 使用"文件内"抑制选项指定应排除在选定策略测试之外的资源。这确保策略仅针对特定资源而不是所有资源被跳过。
示例扫描输出
Terrascan 的默认输出是扫描的 IaC 中存在的违规列表。示例输出:
构建 Terrascan
Terrascan 可以在本地构建。如果你想使用最新版本或开发 Terrascan,这很有帮助。需要 gcc 和 Go 1.19 或更高版本。
$ git clone git@github.com:tenable/terrascan.git
$ cd terrascan
$ make build
$ ./bin/terrascan
要构建自己的 docker,请参考此示例(Alpine Linux):
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 做出贡献的更多信息,请参阅贡献指南。
行为准则
我们相信拥有一个开放和包容的社区