Инструмент статического анализа для инфраструктуры как код, который обнаруживает облачные неверные конфигурации, уязвимости и секреты в 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 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/) и обнаруживает ошибки конфигурации безопасности и соответствия с помощью графового сканирования.
Он выполняет [сканирование анализа состава программного обеспечения (SCA)](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), которое представляет собой сканирование пакетов с открытым исходным кодом и образов на наличие общих уязвимостей и экспозиций (CVE).
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 выявляет, исправляет и предотвращает ошибочные конфигурации облачных ресурсов и файлов инфраструктуры как кода.
<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="Try_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="Docs">
<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 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](https://github.com/bridgecrewio/checkov/blob/main/docs/2.Basics/Scanning%20Credentials%20and%20Secrets.md) в EC2 Userdata, переменных окружения Lambda и провайдерах Terraform.
* [Определяет секреты](https://www.prismacloud.io/prisma/cloud/secrets-security) с помощью регулярных выражений, ключевых слов и обнаружения на основе энтропии.
* Оценивает настройки [Terraform Provider](https://registry.terraform.io/browse/providers) для регулирования создания, управления и обновлений IaaS, PaaS или SaaS, управляемых через Terraform.
* Политики поддерживают оценку [переменных](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)
```
### Обновление
если вы установили 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 <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. Пропустить проверку 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](https://marketplace.visualstudio.com/items?itemName=PrismaCloud.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`.
## Поддержка
```
---
[Read more](https://github.com/bridgecrewio/checkov)