Назад к обновлениям
New releaseSep 3, 2026

checkov v3.3.16

Инструмент статического анализа для инфраструктуры как код, который обнаруживает облачные неверные конфигурации, уязвимости и секреты в Terraform, Kubernetes, CloudFormation и образах контейнеров во время сборки.

Поделиться

checkov

Maintained by Prisma Cloud build status security status code_coverage docs PyPI Python Version Terraform Version Downloads Docker Pulls slack-community

Checkov — это инструмент статического анализа кода для инфраструктуры как кода (IaC), а также инструмент анализа состава программного обеспечения (SCA) для образов и пакетов с открытым исходным кодом.

Он сканирует облачную инфраструктуру, подготовленную с помощью Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates или OpenTofu и обнаруживает ошибки конфигурации безопасности и соответствия с помощью графового сканирования.

Он выполняет сканирование анализа состава программного обеспечения (SCA), которое представляет собой сканирование пакетов с открытым исходным кодом и образов на наличие общих уязвимостей и экспозиций (CVE).

Checkov также лежит в основе Prisma Cloud Application Security — платформы, ориентированной на разработчиков, которая кодифицирует и упрощает облачную безопасность на протяжении всего жизненного цикла разработки. Prisma Cloud выявляет, исправляет и предотвращает ошибочные конфигурации облачных ресурсов и файлов инфраструктуры как кода.

Оглавление

Возможности

  • Более 1000 встроенных политик покрывают лучшие практики безопасности и соответствия требованиям для AWS, Azure и Google Cloud.
  • Сканирует файлы шаблонов Terraform, Terraform Plan, Terraform JSON, CloudFormation, AWS SAM, Kubernetes, Helm, Kustomize, Dockerfile, Serverless framework, Ansible, Bicep, ARM и OpenTofu.
  • Сканирует файлы рабочих процессов Argo Workflows, Azure Pipelines, BitBucket Pipelines, Circle CI Pipelines, GitHub Actions и GitLab CI.
  • Поддерживает политики с учетом контекста на основе графового сканирования в памяти.
  • Поддерживает формат Python для атрибутивных политик и формат YAML как для атрибутивных, так и для составных политик.
  • Обнаруживает учетные данные AWS в EC2 Userdata, переменных окружения Lambda и провайдерах Terraform.
  • Определяет секреты с помощью регулярных выражений, ключевых слов и обнаружения на основе энтропии.
  • Оценивает настройки Terraform Provider для регулирования создания, управления и обновлений IaaS, PaaS или SaaS, управляемых через Terraform.
  • Политики поддерживают оценку переменных с их необязательным значением по умолчанию.
  • Поддерживает встроенное подавление принятых рисков или ложных срабатываний для уменьшения повторяющихся неудач сканирования. Также поддерживает глобальный пропуск при использовании CLI.
  • Вывод в настоящее время доступен в виде CLI, CycloneDX, JSON, JUnit XML, CSV, SARIF и github markdown, а также ссылка на руководства по исправлению.

Скриншоты

Результаты сканирования в CLI

scan-screenshot

Результаты запланированного сканирования в Jenkins

jenikins-screenshot

Начало работы

Требования

  • Python >= 3.9, <=3.12
  • Terraform >= 0.12

Установка

Для установки pip следуйте официальной документации```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 (macOS или Linux)```sh brew install checkov

### Включение автодополнения bash```sh
source <(register-python-argcomplete checkov)

Обновление

если вы установили checkov с помощью pip3```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 в формате json```sh
terraform init
terraform plan -out tf.plan
terraform show -json tf.plan  > tf.json
checkov -f tf.json

Примечание: выходной файл terraform show tf.json будет одной строкой. По этой причине все находки будут сообщаться с номером строки 0 от 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",
В качестве альтернативы укажите корень репозитория HCL-файлов, использованных для создания файла плана, с помощью флага `--repo-root-for-plan-enrichment`, чтобы обогатить вывод соответствующим путём к файлу, номерами строк и блоком кода ресурса(ов). Дополнительным преимуществом является то, что подавление проверок будет обрабатываться соответствующим образом.```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*

Run all checks that are MEDIUM severity or higher (requires API key):```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 ...

Пропустить все проверки с уровнем MEDIUM и ниже, а также проверку CKV_789 (предполагается, что это проверка высокой степени серьезности):```sh checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...

Запустить все проверки с уровнем серьезности MEDIUM или выше, но пропустить проверку CKV_123 (предполагается, что это проверка с уровнем серьезности MEDIUM или выше):```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 :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. Пропустить проверку CKV_SECRET_6 для json-файлов, чей суффикс — DontScan.```sh
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*DontScan.json$

Запустите сканирование секретов для всех файлов в MyDirectory. Пропустите проверку CKV_SECRET_6 для json-файлов, содержащих "skip_test" в пути.```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

В приведенном выше примере будут скрыты следующие значения:

  • user_data для ресурса aws_instance
  • admin_password и user_passwords для azurerm_key_vault_secret

Подавление/Игнорирование проверки

Как и любой инструмент статического анализа, он ограничен своей областью анализа. Например, если ресурс управляется вручную или с помощью последующих инструментов управления конфигурацией, можно вставить подавление как простую аннотацию в коде.

Формат комментария подавления

Чтобы пропустить проверку для заданного блока определения Terraform или ресурса CloudFormation, примените следующий шаблон комментария в его области:

checkov:skip=<check_id>:<suppression_comment>

  • <check_id> — один из [доступных сканеров проверок](docs/5.Policy Index/all.md)
  • <suppression_comment> — необязательная причина подавления, которая будет включена в вывод

Пример

Следующий комментарий пропускает проверку CKV_AWS_20 для ресурса, идентифицированного как foo-bucket, где сканирование проверяет, является ли корзина 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:
...

Логирование

Для детального логирования в 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

Если вы хотите использовать Checkov в VS Code, попробуйте расширение Prisma Cloud.

Настройка с помощью конфигурационного файла

Checkov можно настроить с помощью YAML-конфигурационного файла. По умолчанию checkov ищет файл .checkov.yaml или .checkov.yml в следующих местах в порядке приоритета:

  • Каталог, для которого выполняется checkov (--directory)
  • Текущий рабочий каталог, из которого вызывается checkov.
  • Домашний каталог пользователя.

Внимание: рекомендуется, чтобы конфигурационный файл checkov загружался из доверенного источника, состоящего из проверенной идентификации, чтобы проверяемые файлы, идентификаторы проверок и загруженные пользовательские проверки были такими, как ожидается.

Пользователи также могут передать путь к конфигурационному файлу через командную строку. В этом случае другие конфигурационные файлы будут проигнорированы. Например:```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 по следующей ссылке:

[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](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` использует API Prisma Cloud для обогащения результатов ссылками на руководства по исправлению.
Чтобы пропустить этот вызов 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 года, а Python 3.9 достигнет конца поддержки в октябре 2025 года.
Если у вас возникнут проблемы с любой версией Python, которая ещё не вышла из поддержки, пожалуйста, откройте Issue.

Категории