
checkov v3.3.16
Инструмент статического анализа для инфраструктуры как код, который обнаруживает облачные неверные конфигурации, уязвимости и секреты в Terraform, Kubernetes, CloudFormation и образах контейнеров во время сборки.
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

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

Начало работы
Требования
- 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 по следующей ссылке:
[](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.
