bridgecrewio/checkov

GitHub: bridgecrewio/checkov

Checkov 是一款针对基础设施即代码(IaC)、容器镜像及开源包的静态分析与软件成分分析工具,旨在构建阶段预防云资源错误配置和安全漏洞。

Stars: 8494 | Forks: 1305

[![checkov](https://static.pigsec.cn/wp-content/uploads/repos/2026/02/c9022c82e2091632.png)](#) [![Maintained by Prisma Cloud](https://img.shields.io/badge/maintained_by-Prisma_Cloud-blue)](https://prismacloud.io/?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov) [![build status](https://static.pigsec.cn/wp-content/uploads/repos/2026/02/b4f69e2d15091632.svg)](https://github.com/bridgecrewio/checkov/actions?query=workflow%3Abuild) [![security status](https://static.pigsec.cn/wp-content/uploads/repos/2026/02/6670cd3984091633.svg)](https://github.com/bridgecrewio/checkov/actions?query=event%3Apush+branch%3Amaster+workflow%3Asecurity) [![code_coverage](https://static.pigsec.cn/wp-content/uploads/repos/2026/02/8d88feb301091634.svg)](https://github.com/bridgecrewio/checkov/actions?query=workflow%3Acoverage) [![docs](https://img.shields.io/badge/docs-passing-brightgreen)](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov) [![PyPI](https://img.shields.io/pypi/v/checkov)](https://pypi.org/project/checkov/) [![Python Version](https://img.shields.io/pypi/pyversions/checkov)](#) [![Terraform Version](https://img.shields.io/badge/tf-%3E%3D0.12.0-blue.svg)](#) [![Downloads](https://static.pepy.tech/badge/checkov)](https://pepy.tech/project/checkov) [![Docker Pulls](https://img.shields.io/docker/pulls/bridgecrew/checkov.svg)](https://hub.docker.com/r/bridgecrew/checkov) [![slack-community](https://img.shields.io/badge/Slack-4A154B?style=plastic&logo=slack&logoColor=white)](https://codifiedsecurity.slack.com/) **Checkov** 是一款针对基础设施即代码 的静态代码分析工具,同时也是一款针对镜像和开源包的软件成分分析 工具。 它扫描使用 [Terraform](https://terraform.io/), [Terraform plan](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 Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md), 或 [OpenTofu](https://opentofu.org/) 配置的云基础设施,并利用基于图的扫描技术检测安全和合规性配置错误。 它执行 [Software Composition Analysis (SCA) scanning](docs/7.Scan%20Examples/Sca.md),即扫描开源包和镜像中的常见漏洞和披露。 Checkov 也为 [**Prisma Cloud Application Security**](https://www.prismacloud.io/prisma/cloud/cloud-code-security/?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov) 提供支持,这是一个以开发者为先的平台,在整个开发生命周期中编码和简化云安全。Prisma Cloud 识别、修复并预防云资源和基础设施即代码文件中的配置错误。 ## **目录** - [Features](#features) - [Screenshots](#screenshots) - [Getting Started](#getting-started) - [Disclaimer](#disclaimer) - [Support](#support) - [Migration - v2 to v3](https://github.com/bridgecrewio/checkov/blob/main/docs/1.Welcome/Migration.md) ## 功能特性 * [Over 1000 built-in policies](https://github.com/bridgecrewio/checkov/blob/main/docs/5.Policy%20Index/all.md) 涵盖 AWS、Azure 和 Google Cloud 的安全和合规最佳实践。 * 扫描 Terraform、Terraform Plan、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 提供者中的 [AWS credentials](https://github.com/bridgecrewio/checkov/blob/main/docs/2.Basics/Scanning%20Credentials%20and%20Secrets.md)。 * [Identifies secrets](https://www.prismacloud.io/prisma/cloud/secrets-security) 使用正则表达式、关键词和基于熵的检测。 * 评估 [Terraform Provider](https://registry.terraform.io/browse/providers) 设置,以管理通过 Terraform 管理的 IaaS、PaaS 或 SaaS 的创建、管理和更新。 * 策略支持将 [variables](https://github.com/bridgecrewio/checkov/blob/main/docs/2.Basics/Handling%20Variables.md) 评估为其可选默认值。 * 支持内联 [suppression](https://github.com/bridgecrewio/checkov/blob/main/docs/2.Basics/Suppressing%20and%20Skipping%20Policies.md) 接受的风险或误报,以减少重复扫描失败。也支持通过 CLI 进行全局跳过。 * [Output](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,以及链接到修复建议 [guides](https://docs.prismacloud.io/en/enterprise-edition/policy-reference/)。 ## 截图 CLI 中的扫描结果 ![scan-screenshot](https://raw.githubusercontent.com/bridgecrewio/checkov/main/docs/checkov-recording.gif) Jenkins 中定时扫描的结果 ![jenikins-screenshot](https://static.pigsec.cn/wp-content/uploads/repos/2026/02/49ae035eaf091640.png) ## 快速入门 ### 环境要求 * Python >= 3.9, <=3.12 * Terraform >= 0.12 ### 安装 要安装 pip,请遵循官方 [docs](https://pip.pypa.io/en/stable/cli/pip_install/) ``` pip3 install checkov ``` 某些环境(例如 Debian 12)可能需要您在虚拟环境中安装 Checkov ``` # 创建并激活虚拟环境 python3 -m venv /path/to/venv/checkov cd /path/to/venv/checkov source ./bin/activate # 使用 pip 安装 Checkov pip install checkov # 可选:创建符号链接以便访问 sudo ln -s /path/to/venv/checkov/bin/checkov /usr/local/bin/checkov ``` 或者使用 [Homebrew](https://formulae.brew.sh/formula/checkov) (macOS 或 Linux) ``` brew install checkov ``` ### 启用 Bash 自动补全 ``` source <(register-python-argcomplete checkov) ``` ### 升级 如果您使用 pip3 安装了 checkov ``` pip3 install -U checkov ``` 或者使用 Homebrew ``` brew upgrade checkov ``` ### 配置输入文件夹或文件 ``` checkov --directory /user/path/to/iac/code ``` 或者指定单个或多个文件 ``` checkov --file /user/tf/example.tf ``` 或者 ``` checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml ``` 或者 JSON 格式的 Terraform Plan 文件 ``` terraform init terraform plan -out tf.plan terraform show -json tf.plan > tf.json checkov -f tf.json ``` 注意:`terraform show` 输出文件 `tf.json` 将是单行的。 因此,Checkov 报告的所有发现结果都将是第 0 行 ``` 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 文件转换为多行: ``` terraform show -json tf.plan | jq '.' > tf.json ``` 扫描结果会更加用户友好。 ``` 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` 标志指定用于生成 Plan 文件的 HCL 文件的仓库根目录,以通过适当的文件路径、行号和资源代码块来丰富输出。另一个好处是检查抑制将得到相应处理。 ``` checkov -f tf.json --repo-root-for-plan-enrichment /user/path/to/iac/code ``` ### 扫描结果示例 (CLI) ``` 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 ``` 阅读 [Getting Started](https://github.com/bridgecrewio/checkov/blob/main/docs/1.Welcome/Quick%20Start.md) 页面开始使用 Checkov。 ### 使用 Docker ``` 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 文件的机密扫描。 请参阅文档以获取有关这些标志如何协同工作的更多详细信息。 ## 示例 仅允许运行指定的两个检查: ``` checkov --directory . --check CKV_AWS_20,CKV_AWS_57 ``` 运行除指定检查外的所有检查: ``` checkov -d . --skip-check CKV_AWS_20 ``` 运行除具有指定模式的检查外的所有检查: ``` checkov -d . --skip-check CKV_AWS* ``` 运行所有中等 (MEDIUM) 严重性或更高的检查(需要 API 密钥): ``` checkov -d . --check MEDIUM --bc-api-key ... ``` 运行所有中等 (M) 严重性或更高的检查,以及检查 CKV_123(假设这是一个低严重性检查): ``` checkov -d . --check MEDIUM,CKV_123 --bc-api-key ... ``` 跳过所有中等 (MEDIUM) 严重性或更低的检查: ``` checkov -d . --skip-check MEDIUM --bc-api-key ... ``` 跳过所有中等 (MEDIUM) 严重性或更低的检查,以及检查 CKV_789(假设这是一个高严重性检查): ``` checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ... ``` 运行所有中等 (MEDIUM) 严重性或更高的检查,但跳过检查 CKV_123(假设这是一个中等或更高严重性的检查): ``` checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ... ``` 运行检查 CKV_789,但如果它是中等严重性则跳过(--check 逻辑始终在 --skip-check 之前应用) ``` checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ... ``` 对于 Kubernetes 工作负载,您也可以使用允许/拒绝命名空间。例如,不要报告 kube-system 命名空间的任何结果: ``` checkov -d . --skip-check kube-system ``` 运行容器镜像扫描。首先拉取或构建镜像,然后通过哈希、ID 或 name:tag 引用它: ``` checkov --framework sca_image --docker-image sha256:1234example --dockerfile-path /Users/path/to/Dockerfile --repo-id ... --bc-api-key ... checkov --docker-image :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ... ``` 您也可以使用 --image 标志来扫描容器镜像,而不是 --docker-image,作为简写形式: ``` checkov --image :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ... ``` 运行仓库中包的 SCA 扫描: ``` checkov -d . --framework sca_package --bc-api-key ... --repo-id ``` 运行带有环境变量的目录扫描,移除缓冲,添加调试级别日志: ``` PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d . ``` 或者为多次运行启用环境变量 ``` export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d . ``` 对 MyDirectory 中的所有文件运行机密扫描。跳过后缀为 DontScan 的 json 文件上的 CKV_SECRET_6 检查 ``` checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*DontScan.json$ ``` 对 MyDirectory 中的所有文件运行机密扫描。跳过路径中包含 "skip_test" 的 json 文件上的 CKV_SECRET_6 检查 ``` checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*skip_test.*json$ ``` 可以通过提供带有 mask 条目的配置文件(使用 --config-file 标志)来屏蔽扫描结果中的值。 屏蔽可以应用于资源和值(或多个值,用逗号分隔)。 示例: ``` 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=:` * `` 是 [available check scanners](docs/5.Policy Index/all.md) 之一 * `` 是包含在输出中的可选抑制原因 #### 示例 以下注释跳过了由 `foo-bucket` 标识的资源上的 `CKV_AWS_20` 检查,该扫描检查 AWS S3 存储桶是否为私有。 在示例中,存储桶配置为公共读取访问;添加抑制注释将跳过相应的检查,而不是让检查失败。 ``` 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`` 检查结果条目: ``` ... ... 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#: =` 例如: ``` 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: ... ``` #### 日志 要输出详细日志到 stdout,请将环境变量 `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 extension](https://marketplace.visualstudio.com/items?itemName=PrismaCloud.prisma-cloud)。 ### 使用配置文件进行配置 Checkov 可以使用 YAML 配置文件进行配置。默认情况下,checkov 按以下优先级顺序在以下位置查找 `.checkov.yaml` 或 `.checkov.yml` 文件: * 运行 checkov 的目录 (`--directory`) * 调用 checkov 的当前工作目录。 * 用户的主目录。 **注意**:最佳做法是从由经过验证的身份组成的受信任来源加载 checkov 配置文件,以便扫描的文件、检查 ID 和加载的自定义检查符合预期。 用户也可以通过命令行传递配置文件的路径。在这种情况下,其他配置文件将被忽略。例如: ``` checkov --config-file path/to/config.yaml ``` 用户也可以使用 `--create-config` 命令创建配置文件,该命令获取当前命令行参数并将其写入给定路径。例如: ``` 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` 文件,如下所示: ``` 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` 标志查看所有参数和设置及其来源,即命令行、配置文件、环境变量或默认值。例如: ``` checkov --show-config ``` 将显示: ``` 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 ``` ## 贡献 欢迎贡献! 首先查看 [contribution guidelines](https://github.com/bridgecrewio/checkov/blob/main/CONTRIBUTING.md)。之后,查看 [good first issue](https://github.com/bridgecrewio/checkov/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)。 您甚至可以通过 Gitpod 在浏览器中一键启动开发,链接如下: [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/bridgecrewio/checkov) 想要贡献新的检查?了解如何编写新检查(即策略)[here](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,旨在让策略即代码变得简单且易于访问。 从我们的 [Documentation](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。
标签:AI应用开发, AWS 安全, Azure 安全, Checkov, CI/CD, Cloudformation, DevSecOps, Docker, EC2, ECS, GUI应用, IaC, Kerberos, Kubernetes, LNA, MongoDB安全, pip安装, Prisma Cloud, Python, Rust语言, SAST, SCA, Terraform, Terraform 安全, Web截图, Windows工具, 上游代理, 二进制文件分析, 云原生安全, 云安全, 代码审计, 供应链安全, 可视化调试, 合规性检查, 基础设施即代码, 子域名突变, 安全扫描, 安全防御评估, 容器安全, 带宽管理, 开源安全, 文档安全, 无后门, 时序注入, 漏洞检测, 盲注攻击, 策略即代码, 聊天机器人安全, 误配置预防, 请求拦截, 软件成分分析, 逆向工具, 配置管理, 错误基检测, 静态代码分析, 静态应用程序安全测试