tenable/terrascan
GitHub: tenable/terrascan
一款支持多种 IaC 格式的静态安全分析工具,可在云资源部署前检测配置错误和合规违规。
Stars: 5200 | Forks: 545
## ⚠️ 已归档

[](https://github.com/tenable/terrascan/releases/latest)
[](https://github.com/tenable/terrascan/blob/master/LICENSE)
[](https://github.com/tenable/terrascan/pulls)

[](https://sonarcloud.io/summary/new_code?id=tenable_terrascan)
[](https://repology.org/project/terrascan/versions)
[](https://codecov.io/gh/tenable/terrascan)
[](https://runterrascan.io/)
[](code_of_conduct.md)

## 简介
Terrascan 是一款针对基础设施即代码的静态代码分析器。Terrascan 允许你:
- 无缝扫描基础设施即代码以检测配置错误。
- 监控已配置的云基础设施,检测引入态势偏差的配置变更,并支持恢复到安全态势。
- 检测安全漏洞和合规性违规。
- 在配置云原生基础设施之前缓解风险。
- 提供灵活性,可在本地运行或与您的 CI\CD 集成。
### 资源
* 要在浏览器中试用 Terrascan,请参阅 Terrascan 沙盒 https://www.tenable.com/terrascan
* 要了解更多关于 Terrascan 的功能和特性,请参阅文档门户:https://runterrascan.io
## 关键特性
* 500+ 项安全最佳实践策略
* 扫描 [Terraform](https://runterrascan.io/docs/usage/command_line_mode/#scanning-current-directory-containing-terraform-files-for-aws-resources) (HCL2)
* 扫描 AWS CloudFormation 模板 (CFT)
* * 扫描 Azure 资源管理器 (ARM)
* 扫描 [Kubernetes](https://runterrascan.io/docs/usage/command_line_mode/#scanning-for-a-specific-iac-provider) (JSON/YAML), [Helm](https://runterrascan.io/docs/usage/command_line_mode/#scanning-a-helm-chart) v3, 和 [Kustomize](https://runterrascan.io/docs/usage/command_line_mode/#scanning-a-kustomize-chart)
* 扫描 [Dockerfiles](https://runterrascan.io/docs/usage/command_line_mode/#scanning-a-dockerfile)
* 支持 [AWS](https://runterrascan.io/docs/policies/aws/), [Azure](https://runterrascan.io/docs/policies/azure/), [GCP](https://runterrascan.io/docs/policies/gcp/), [Kubernetes](https://runterrascan.io/docs/policies/k8s/), [Dockerfile](https://runterrascan.io/docs/policies/docker/), 和 [GitHub](https://runterrascan.io/docs/policies/github/)
* 集成 AWS、Azure、GCP、Harbor 容器镜像仓库的 Docker 镜像漏洞扫描。
## 快速开始
1. [Install](#install)
2. [Scan](#scan)
3. [Integrate](#integrate)
### 步骤 1:安装
Terrascan 支持多种安装方式,同时也作为 Docker 镜像提供。
请参阅 Terrascan 的 [releases](https://github.com/tenable/terrascan/releases) 页面,获取所有支持平台的最新版本构建。请为您的平台选择正确的二进制文件。
#### 作为原生可执行文件安装
```
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
```
#### 在 ArchLinux / Manjaro 上通过 `AUR` 安装
ArchLinux 和 Manjaro 用户可以通过以下方式安装:
```
yay -S terrascan
```
#### 通过 `brew` 安装
[Homebrew](https://brew.sh/) 用户可以通过以下方式安装:
```
$ brew install terrascan
```
#### Docker 镜像
Terrascan 也作为 Docker 镜像提供,可按如下方式使用
```
$ docker run tenable/terrascan
```
有关信息,请参阅 [documentation](https://runterrascan.io/docs/getting-started/)。
### 步骤 2:扫描
要扫描代码中的安全问题,您可以运行以下命令(默认扫描 Terraform)。
```
$ terrascan scan
```
**注意**:如果在扫描过程中发现任何错误或违规,Terrascan 将以错误代码退出。
#### 可能的退出代码列表
| 场景 | 退出代码 |
| ----------- | ----------- |
| 扫描摘要包含错误和违规 | 5 |
| 扫描摘要包含错误但无违规 | 4 |
| 扫描摘要包含违规但无错误 | 3 |
| 扫描摘要无违规或错误 | 0 |
| 扫描命令因输入无效而报错 | 1 |
### 步骤 3:与 CI\CD 集成
Terrascan 可以集成到 CI/CD 管道中以强制执行安全最佳实践。
请参阅我们的 [documentation to integrate with your pipeline](https://runterrascan.io/docs/integrations/)。
## Terrascan 命令
您可以使用带有以下选项的 `terrascan` 命令:
```
$ terrascan
Terrascan
Usage:
terrascan [command]
Available Commands:
help Help about any command
init Initialize Terrascan
scan Detect compliance and security violations across Infrastructure as Code.
server Run Terrascan as an API server
version Terrascan version
Flags:
-c, --config-path string config file path
-h, --help help for terrascan
-l, --log-level string log level (debug, info, warn, error, panic, fatal) (default "info")
-x, --log-type string log output type (console, json) (default "console")
-o, --output string output type (human, json, yaml, xml) (default "human")
Use "terrascan [command] --help" for more information about a command.
```
## 策略
Terrascan 策略是使用 [Rego policy language](https://www.openpolicyagent.org/docs/latest/policy-language/) 编写的。每个 rego 包含一个 JSON “规则”文件,该文件定义了策略的元数据。
默认情况下,Terrascan 在首次扫描时从 Terrascan 仓库下载策略。但是,如果您想下载最新的策略,则需要运行初始化过程。有关初始化过程的信息,请参阅 [Usage](https://runterrascan.io/docs/usage/command_line_mode/)。
注意:如果未找到策略,扫描命令将隐式运行初始化过程。
## Docker 镜像漏洞
您可以使用 `--find-vuln` 标志收集镜像仓库中报告的漏洞,作为 Terrascan 输出的一部分。目前 Terrascan 支持 Elastic Container Registry (ECR)、Azure Container Registry、Google Container Registry 和 Google Artifact Registry。
`--find-vuln` 标志可在扫描 IaC 文件时按如下方式使用:
```
$ terrascan scan -i --find-vuln
```
有关如何设置环境以通过镜像仓库 API 进行身份验证的更多信息和说明,请参阅 [usage](https://runterrascan.io/docs/usage/command_line_mode/) 文档。
## 自定义扫描
默认情况下,Terrascan 会根据所有策略扫描您的整个配置。但是,Terrascan 支持策略和资源的细粒度配置。
在我们的文档网站上阅读更多关于 [in-file instrumentation](https://runterrascan.io/docs/usage/in-file_instrumentation/) 和 [the config file](https://runterrascan.io/docs/usage/config_options/) 的内容。
目前,这里有一些快速提示:
- [Exclude a particular policy for a specific resource.](#How_to_exclude_a_policy_while_scanning_a_resource)
- [Manually configure policies to be suppressed or applied globally from a scan across all resources or, for just a particular resource.](#_How_to_include_or_exclude_specific_policies_or_resources_from_being_scanned)
### 如何在扫描资源时排除策略
您可以配置 Terrascan 在扫描资源时跳过特定策略(规则)。根据您的平台,按照以下步骤操作:
#### Terraform
使用 Terraform 脚本配置 Terrascan 跳过规则,方法是插入包含短语 `"ts:skip="` 的注释。注释应包含在资源内部,如下例所示。

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

### 如何包含或排除特定策略或资源以免被扫描
使用 Terrascan 配置文件手动选择应包含或排除在整个扫描之外的策略。这适用于边缘用例。
使用“文件内”抑制选项指定应排除在针对选定策略进行测试之外的资源。这确保仅针对特定资源跳过策略,而不是所有资源。

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

## 构建 Terrascan
Terrascan 可以在本地构建。想使用最新版本或开发 Terrascan,这会很有帮助。需要 [gcc](https://gcc.gnu.org/install/) 和 [Go](https://go.dev/doc/install) 1.19 或更高版本。
```
$ git clone git@github.com:tenable/terrascan.git
$ cd terrascan
$ make build
$ ./bin/terrascan
```
### 要构建您自己的 docker,请参考此示例:
```
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 的信息,请参阅 [contributing guide](CONTRIBUTING.md)。
## 行为准则
我们相信拥有一个开放和包容的社区对我们所有人都有益。请注意,本项目发布时附带 [Contributor Code of Conduct](code_of_conduct.md)。参与本项目即表示您同意遵守其条款。
## 许可证
Terrascan 根据 [Apache 2.0 License](LICENSE) 获得许可。
### 点赞者
[](https://github.com/tenable/terrascan/stargazers)
### 复刻者
[](https://github.com/tenable/terrascan/network/members)
标签:Amazon Neptune, BlazeGraph, CI/CD 集成, CSPM, DevSecOps, EC2, ECS, EVTX分析, EVTX分析, EVTX分析, EVTX分析, EVTX分析, IaC, Java RMI, Kubernetes, LNA, MongoDB安全, Rust语言, Tenable, Terraform, Terrascan, TinkerPop, 上游代理, 云原生安全, 云安全态势管理, 代码审计, 前端应用, 合规扫描, 图探索, 图计算, 基础设施即代码, 多云安全, 安全合规, 带宽管理, 开源安全工具, 无代码查询, 日志审计, 漏洞检测, 用户界面自定义, 策略即代码, 结构化提示词, 网络代理, 聊天机器人安全, 请求拦截, 逆向工程平台, 配置错误检测, 错误基检测, 静态代码分析, 预置检查, 风险缓解