基础设施即代码的静态分析工具,可在构建时检测跨Terraform、Kubernetes、CloudFormation和容器镜像的云配置错误、漏洞和机密信息。
[](#)
[](https://prismacloud.io/?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov)
[](https://github.com/bridgecrewio/checkov/actions?query=workflow%3Abuild)
[](https://github.com/bridgecrewio/checkov/actions?query=event%3Apush+branch%3Amaster+workflow%3Asecurity)
[](https://github.com/bridgecrewio/checkov/actions?query=workflow%3Acoverage)
[](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov)
[](https://pypi.org/project/checkov/)
[](#)
[](#)
[](https://pepy.tech/project/checkov)
[](https://hub.docker.com/r/bridgecrew/checkov)
[](https://codifiedsecurity.slack.com/)
**Checkov** 是一个用于基础设施即代码(IaC)的静态代码分析工具,同时也是用于镜像和开源包的软件组成分析(SCA)工具。
它扫描使用 [Terraform](https://terraform.io/)、[Terraform 计划](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md)、[Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md)、[AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md)、[Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md)、[Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md)、[Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md)、[Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md)、[Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md)、[Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md)、[OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md)、[ARM 模板](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) 或 [OpenTofu](https://opentofu.org/) 配置的云基础设施,并使用基于图的扫描检测安全与合规配置错误。
它执行 [软件组成分析(SCA)扫描](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md),即对开源包和镜像进行常见漏洞与暴露(CVE)扫描。
Checkov 还为 [**Prisma Cloud 应用程序安全**](https://www.prismacloud.io/prisma/cloud/cloud-code-security/?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov) 提供支持,这是一个以开发者优先的平台,在整个开发生命周期中将云安全编码化并简化流程。Prisma Cloud 能够在云资源和基础设施即代码文件中识别、修复并防止配置错误。
<a href="https://www.prismacloud.io/prisma/request-a-prisma-cloud-trial/?utm_campaign=checkov-github-repo&utm_source=github.com&utm_medium=get-started-button" title="试用 Prisma Cloud">
<img src="https://assets.kitploit.com/production/public/readmes/5028/07143f139225d2cb78e912eef2a81596afbecea62c59f7fd2ddd9e2afae4b16c.png" align="right" width="120">
</a>
<a href="https://docs.prismacloud.io/en/enterprise-edition/use-cases/secure-the-source/secure-the-source" title="文档">
<img src="https://assets.kitploit.com/production/public/readmes/5028/53172e24391eaee525f32997277346454f872d5936b3008f43d926dba0b5f713.png" align="right" width="120">
</a>
## **目录**
- [功能特性](#features)
- [截图](#screenshots)
- [快速入门](#getting-started)
- [免责声明](#disclaimer)
- [支持](#support)
- [版本迁移 - v2 到 v3](https://github.com/bridgecrewio/checkov/blob/main/docs/1.Welcome/Migration.md)
## 功能特性
* [超过 1000 条内置策略](https://github.com/bridgecrewio/checkov/blob/main/docs/5.Policy%20Index/all.md),涵盖 AWS、Azure 和 Google Cloud 的安全与合规最佳实践。
* 扫描 Terraform、Terraform 计划、Terraform JSON、CloudFormation、AWS SAM、Kubernetes、Helm、Kustomize、Dockerfile、Serverless 框架、Ansible、Bicep、ARM 和 OpenTofu 模板文件。
* 扫描 Argo Workflows、Azure Pipelines、BitBucket Pipelines、Circle CI Pipelines、GitHub Actions 和 GitLab CI 工作流文件。
* 支持基于内存中图扫描的上下文感知策略。
* 支持属性策略的 Python 格式以及属性和复合策略的 YAML 格式。
* 检测 EC2 用户数据、Lambda 环境变量和 Terraform provider 中的 [AWS 凭据](https://github.com/bridgecrewio/checkov/blob/main/docs/2.Basics/Scanning%20Credentials%20and%20Secrets.md)。
* 使用正则表达式、关键词和基于熵的检测 [识别密钥](https://www.prismacloud.io/prisma/cloud/secrets-security)。
* 评估 [Terraform Provider](https://registry.terraform.io/browse/providers) 设置,以规范通过 Terraform 管理的 IaaS、PaaS 或 SaaS 的创建、管理和更新。
* 策略支持将[变量](https://github.com/bridgecrewio/checkov/blob/main/docs/2.Basics/Handling%20Variables.md)评估为可选的默认值。
* 支持内联[抑制](https://github.com/bridgecrewio/checkov/blob/main/docs/2.Basics/Suppressing%20and%20Skipping%20Policies.md)已接受的风险或误报,以减少重复扫描失败。同时支持通过 CLI 进行全局跳过。
* [输出](https://github.com/bridgecrewio/checkov/blob/main/docs/2.Basics/Reviewing%20Scan%20Results.md)当前支持 CLI、[CycloneDX](https://cyclonedx.org)、JSON、JUnit XML、CSV、SARIF 和 GitHub Markdown 格式,并提供修复[指南](https://docs.prismacloud.io/en/enterprise-edition/policy-reference/)链接。
## 截图
CLI 中的扫描结果

Jenkins 中的定时扫描结果

## 快速入门
### 系统要求
* Python >= 3.9, <=3.12
* Terraform >= 0.12
### 安装
要安装 pip,请遵循官方[文档](https://pip.pypa.io/en/stable/cli/pip_install/)```sh
pip3 install checkov
```
某些环境(例如Debian 12)可能要求您在虚拟环境中安装Checkov```sh
# Create and activate a virtual environment
python3 -m venv /path/to/venv/checkov
cd /path/to/venv/checkov
source ./bin/activate
# Install Checkov with pip
pip install checkov
# Optional: Create a symlink for easy access
sudo ln -s /path/to/venv/checkov/bin/checkov /usr/local/bin/checkov
```
或者使用 [Homebrew](https://formulae.brew.sh/formula/checkov) (macOS或Linux)```sh
brew install checkov
```
### 启用 bash 自动补全```sh
source <(register-python-argcomplete checkov)
```
### 升级
如果你通过 pip3 安装了 checkov```sh
pip3 install -U checkov
```
或通过 Homebrew```sh
brew upgrade checkov
```
### 配置输入文件夹或文件```sh
checkov --directory /user/path/to/iac/code
```
或者一个特定的文件或多个文件```sh
checkov --file /user/tf/example.tf
```
或者```sh
checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml
```
或者一个 terraform plan 文件的 json 格式```sh
terraform init
terraform plan -out tf.plan
terraform show -json tf.plan > tf.json
checkov -f tf.json
```
Note: `terraform show` output file `tf.json` will be a single line.
For that reason all findings will be reported line number 0 by Checkov```sh
check: CKV_AWS_21: "Ensure all data stored in the S3 bucket have versioning enabled"
FAILED for resource: aws_s3_bucket.customer
File: /tf/tf.json:0-0
Guide: https://docs.prismacloud.io/en/enterprise-edition/policy-reference/aws-policies/s3-policies/s3-16-enable-versioning
```
如果你已经安装了 `jq`,你可以使用以下命令将 JSON 文件转换为多行格式:```sh
terraform show -json tf.plan | jq '.' > tf.json
```
扫描结果会更加用户友好。```sh
checkov -f tf.json
Check: CKV_AWS_21: "Ensure all data stored in the S3 bucket have versioning enabled"
FAILED for resource: aws_s3_bucket.customer
File: /tf/tf1.json:224-268
Guide: https://docs.prismacloud.io/en/enterprise-edition/policy-reference/aws-policies/s3-policies/s3-16-enable-versioning
225 | "values": {
226 | "acceleration_status": "",
227 | "acl": "private",
228 | "arn": "arn:aws:s3:::mybucket",
```
或者,使用 `--repo-root-for-plan-enrichment` 标志指定用于生成计划文件的 HCL 文件的仓库根目录,以在输出中丰富相关资源的文件路径、行号和代码块。另一个好处是,检查抑制将得到相应处理。```sh
checkov -f tf.json --repo-root-for-plan-enrichment /user/path/to/iac/code
```
### 扫描结果示例 (CLI)```sh
Passed Checks: 1, Failed Checks: 1, Suppressed Checks: 0
Check: "Ensure all data stored in the S3 bucket is securely encrypted at rest"
/main.tf:
Passed for resource: aws_s3_bucket.template_bucket
Check: "Ensure all data stored in the S3 bucket is securely encrypted at rest"
/../regionStack/main.tf:
Failed for resource: aws_s3_bucket.sls_deployment_bucket_name
```
开始使用 Checkov,请阅读 [入门指南](https://github.com/bridgecrewio/checkov/blob/main/docs/1.Welcome/Quick%20Start.md) 页面。
### 使用 Docker```sh
docker pull bridgecrew/checkov
docker run --tty --rm --volume /user/tf:/tf --workdir /tf bridgecrew/checkov --directory /tf
```
注意:如果你使用的是 Python 3.6(Ubuntu 18.04 中的默认版本),checkov 将无法正常工作,并会出现 `ModuleNotFoundError: No module named 'dataclasses'` 错误信息。这种情况下,你可以使用 Docker 版本代替。
请注意,在某些情况下,将 `docker run --tty` 的输出重定向到文件(例如,如果你想将 Checkov JUnit 输出保存到文件)会导致打印额外的控制字符。这可能会破坏文件解析。如果你遇到这种情况,请移除 `--tty` 标志。
`--workdir /tf` 标志是可选的,用于将工作目录更改为挂载卷。如果你使用 SARIF 输出 `-o sarif`,这会将 results.sarif 文件输出到挂载卷(上例中的 `/user/tf`)。如果不包含该标志,工作目录将是 "/"。
### 运行或跳过检查
通过使用命令行标志,你可以指定只运行命名的检查(允许列表)或运行除列出之外的所有检查(拒绝列表)。如果你通过 API 密钥使用平台集成,你还可以指定严重性阈值来跳过和/或包括。此外,由于 JSON 文件不能包含注释,可以传递正则表达式模式来跳过 JSON 文件的秘密扫描。
请参阅文档了解这些标志如何协同工作的更多详细信息。
## 示例
仅允许运行指定的两个检查:```sh
checkov --directory . --check CKV_AWS_20,CKV_AWS_57
```
运行除指定检查外的所有检查:```sh
checkov -d . --skip-check CKV_AWS_20
```
运行所有检查,但排除指定模式的检查:```sh
checkov -d . --skip-check CKV_AWS*
```
运行所有中严重性或更高级别的检查(需要API密钥):```sh
checkov -d . --check MEDIUM --bc-api-key ...
```
运行所有严重程度为 MEDIUM 或更高的检查,以及检查 CKV_123(假设这是一个 LOW 严重程度的检查):```sh
checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
```
跳过所有中等严重性或更低级别的检查:```sh
checkov -d . --skip-check MEDIUM --bc-api-key ...
```
跳过所有严重性为中等或更低的检查,以及检查 CKV_789(假设这是一个高严重性检查):```sh
checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
```
运行所有严重程度为中等或更高的检查,但跳过检查 CKV_123(假设这是一个中等或更高严重程度的检查):```sh
checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ...
```
运行检查 CKV_789,但如果它是中等严重性则跳过(--check 逻辑总是在 --skip-check 之前应用)```sh
checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ...
```
对于Kubernetes工作负载,你还可以使用允许/拒绝命名空间。例如,不要报告kube-system命名空间的任何结果:```sh
checkov -d . --skip-check kube-system
```
运行容器镜像的扫描。首先拉取或构建镜像,然后通过哈希、ID 或名称:标签来引用它:```sh
checkov --framework sca_image --docker-image sha256:1234example --dockerfile-path /Users/path/to/Dockerfile --repo-id ... --bc-api-key ...
checkov --docker-image <image-name>:tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
```
你也可以使用 --image 标志来扫描容器镜像,而不是使用 --docker-image 进行简写:```sh
checkov --image <image-name>:tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
```
对仓库中的包运行SCA扫描:```sh
checkov -d . --framework sca_package --bc-api-key ... --repo-id <repo_id(arbitrary)>
```
使用环境变量运行目录扫描,移除缓冲,添加调试级别日志:```sh
PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
```
或者启用环境变量以进行多次运行```sh
export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG
checkov -d .
```
对 MyDirectory 中的所有文件运行密钥扫描。跳过后缀为 DontScan 的 json 文件上的 CKV_SECRET_6 检查。```sh
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*DontScan.json$
```
对 MyDirectory 中的所有文件运行秘密扫描。跳过路径中包含 "skip_test" 的 json 文件的 CKV_SECRET_6 检查。```sh
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*skip_test.*json$
```
可以通过提供包含掩码条目的配置文件(使用 --config-file 标志)来遮蔽扫描结果中的值。
遮蔽可以应用于资源与值(或多个值,用逗号分隔)。
示例:```sh
mask:
- aws_instance:user_data
- azurerm_key_vault_secret:admin_password,user_passwords
```
在以上示例中,以下值将会被掩蔽:
- `aws_instance` 资源的 `user_data`
- `azurerm_key_vault_secret` 的 `admin_password` 和 `user_passwords`
### 压制/忽略检查
与任何静态分析工具一样,它受到其分析范围的限制。
例如,如果资源是手动管理的,或者使用后续的配置管理工具,
可以在其作用域内插入简单的代码注释来压制检查。
#### 压制注释格式
要跳过对给定 Terraform 定义块或 CloudFormation 资源的检查,在其作用域内应用以下注释模式:
`checkov:skip=<check_id>:<suppression_comment>`
* `<check_id>` 是其中一个[可用检查扫描器](docs/5.Policy Index/all.md)
* `<suppression_comment>` 是可选的压制原因,将包含在输出中
#### 示例
以下注释跳过了对标识为 `foo-bucket` 的资源的 `CKV_AWS_20` 检查,该扫描检查 AWS S3 存储桶是否为私有。
在示例中,存储桶配置了公共读取权限;添加压制注释将跳过相应的检查,而不是让检查失败。```hcl-terraform
resource "aws_s3_bucket" "foo-bucket" {
region = var.region
#checkov:skip=CKV_AWS_20:The bucket is a public static content host
bucket = local.bucket_name
force_destroy = true
acl = "public-read"
}
```
输出现在将包含一个 ``SKIPPED`` 检查结果条目:```bash
...
...
Check: "S3 Bucket has an ACL defined which allows public access."
SKIPPED for resource: aws_s3_bucket.foo-bucket
Suppress comment: The bucket is a public static content host
File: /example_skip_acl.tf:1-25
...
```
要跳过多个检查,请将每个检查添加为单独一行。```
#checkov:skip=CKV2_AWS_6
#checkov:skip=CKV_AWS_20:The bucket is a public static content host
```
为了在 Kubernetes 清单中抑制检查,使用以下格式的注解:
`checkov.io/skip#: <check_id>=<suppression_comment>`
例如:```bash
apiVersion: v1
kind: Pod
metadata:
name: mypod
annotations:
checkov.io/skip1: CKV_K8S_20=I don't care about Privilege Escalation :-O
checkov.io/skip2: CKV_K8S_14
checkov.io/skip3: CKV_K8S_11=I have not set CPU limits as I want BestEffort QoS
spec:
containers:
...
```
#### 日志记录
如需向标准输出输出详细日志,请将环境变量 `LOG_LEVEL` 设置为 `DEBUG`。
默认值为 `LOG_LEVEL=WARNING`。
#### 跳过目录
若要跳过文件或目录,请使用 `--skip-path` 参数,该参数可多次指定。此参数接受相对于当前工作目录的路径的正则表达式。您可以用它来跳过整个目录和/或特定文件。
默认情况下,所有名为 `node_modules`、`.terraform` 和 `.serverless` 的目录,以及任何以 `.` 开头的文件或目录都将被跳过。
若要取消跳过以 `.` 开头的目录,请将环境变量 `CKV_IGNORE_HIDDEN_DIRECTORIES` 覆盖为 `export CKV_IGNORE_HIDDEN_DIRECTORIES=false`。
您可以通过设置环境变量 `CKV_IGNORED_DIRECTORIES` 来覆盖默认跳过的目录集。
请注意,如果您想保留此列表并添加内容,则必须包含这些值。例如,`CKV_IGNORED_DIRECTORIES=mynewdir` 将仅跳过该目录,而不会跳过上述其他目录。此变量属于旧功能;我们建议使用 `--skip-file` 标志。
#### 控制台输出
控制台输出默认显示颜色,如需切换为单色输出,请设置环境变量:
`ANSI_COLORS_DISABLED`
#### VS Code 扩展
如果您想在 VS Code 中使用 Checkov,请尝试 [Prisma Cloud 扩展](https://marketplace.visualstudio.com/items?itemName=PrismaCloud.prisma-cloud)。
### 使用配置文件进行配置
Checkov 可使用 YAML 配置文件进行配置。默认情况下,checkov 会按以下优先级顺序查找 `.checkov.yaml` 或 `.checkov.yml` 文件:
* 运行 checkov 的目录(`--directory`)
* 调用 checkov 时的当前工作目录。
* 用户的主目录。
**注意**:最佳实践是 checkov 配置文件应从已验证身份的可信来源加载,以确保扫描的文件、检查 ID 和加载的自定义检查符合预期。
用户还可以通过命令行传递配置文件的路径。在这种情况下,将忽略其他配置文件。例如:```sh
checkov --config-file path/to/config.yaml
```
用户还可以使用 `--create-config` 命令创建配置文件,该命令会获取当前命令行参数并将其写入指定路径。例如:```sh
checkov --compact --directory test-dir --docker-image sample-image --dockerfile-path Dockerfile --download-external-modules True --external-checks-dir sample-dir --quiet --repo-id prisma-cloud/sample-repo --skip-check CKV_DOCKER_3,CKV_DOCKER_2 --skip-framework dockerfile secrets --soft-fail --branch develop --check CKV_DOCKER_1 --create-config /Users/sample/config.yml
```
将创建一个`config.yaml`文件,内容如下:```yaml
branch: develop
check:
- CKV_DOCKER_1
compact: true
directory:
- test-dir
docker-image: sample-image
dockerfile-path: Dockerfile
download-external-modules: true
evaluate-variables: true
external-checks-dir:
- sample-dir
external-modules-download-path: .external_modules
framework:
- all
output: cli
quiet: true
repo-id: prisma-cloud/sample-repo
skip-check:
- CKV_DOCKER_3
- CKV_DOCKER_2
skip-framework:
- dockerfile
- secrets
soft-fail: true
```
用户也可以使用 `--show-config` 标志来查看所有参数和设置及其来源,即命令行、配置文件、环境变量或默认值。例如:```sh
checkov --show-config
```
将显示:```sh
Command Line Args: --show-config
Environment Variables:
BC_API_KEY: your-api-key
Config File (/Users/sample/.checkov.yml):
soft-fail: False
branch: master
skip-check: ['CKV_DOCKER_3', 'CKV_DOCKER_2']
Defaults:
--output: cli
--framework: ['all']
--download-external-modules:False
--external-modules-download-path:.external_modules
--evaluate-variables:True
```
## 贡献
欢迎贡献!
首先查看[贡献指南](https://github.com/bridgecrewio/checkov/blob/main/CONTRIBUTING.md)。然后,看看[适合初学者的议题](https://github.com/bridgecrewio/checkov/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)。
你甚至可以通过以下链接使用 Gitpod 在浏览器中一键开始开发:
[](https://gitpod.io/#https://github.com/bridgecrewio/checkov)
想要贡献新的检查项?了解如何编写新的检查(即策略)请[点击这里](https://github.com/bridgecrewio/checkov/blob/main/docs/6.Contribution/Contribution%20Overview.md)。
## 免责声明
`checkov` 不会保存、发布或与任何人共享任何可识别的客户信息。
不会使用任何可识别的客户信息来查询 Prisma Cloud 的公开指南。
`checkov` 使用 Prisma Cloud 的 API 来丰富结果中的修复指南链接。
要跳过此 API 调用,请使用 `--skip-download` 标志。
## 支持
[Prisma Cloud](https://www.prismacloud.io/?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov) 构建并维护 Checkov,使策略即代码变得简单易用。
从我们的[文档](https://www.checkov.io/1.Welcome/Quick%20Start.html)开始,获取快速教程和示例。
## Python 版本支持
我们遵循 Python 的官方支持周期,并对支持的 Python 版本进行自动化测试。
这意味着我们目前支持 Python 3.9 至 3.13(含)。
注意,Python 3.8 已于 2024 年 10 月达到生命周期结束(EOL),Python 3.9 将于 2025 年 10 月达到 EOL。
如果你在使用任何未达到 EOL 的 Python 版本时遇到问题,请提交一个 Issue。