
checkov v3.3.12
Herramienta de análisis estático para infraestructura como código que detecta configuraciones erróneas en la nube, vulnerabilidades y secretos en Terraform, Kubernetes, CloudFormation e imágenes de contenedores durante el tiempo de compilación.
Checkov es una herramienta de análisis de código estático para infraestructura como código (IaC) y también una herramienta de análisis de composición de software (SCA) para imágenes y paquetes de código abierto.
Escanea infraestructura en la nube aprovisionada usando Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates, o OpenTofu y detecta configuraciones incorrectas de seguridad y cumplimiento mediante escaneos basados en gráficos.
Realiza escaneos de análisis de composición de software (SCA) que consisten en escanear paquetes de código abierto e imágenes en busca de vulnerabilidades y exposiciones comunes (CVE).
Checkov también impulsa Prisma Cloud Application Security, la plataforma centrada en el desarrollador que codifica y simplifica la seguridad en la nube a lo largo del ciclo de vida del desarrollo. Prisma Cloud identifica, corrige y previene configuraciones incorrectas en recursos en la nube y archivos de infraestructura como código.
Tabla de contenidos
- Características
- Capturas de pantalla
- Primeros pasos
- Descargo de responsabilidad
- Soporte
- Migración - v2 a v3
Características
- Más de 1000 políticas integradas cubren las mejores prácticas de seguridad y cumplimiento para AWS, Azure y Google Cloud.
- Escanea archivos de plantillas Terraform, Terraform Plan, Terraform JSON, CloudFormation, AWS SAM, Kubernetes, Helm, Kustomize, Dockerfile, Serverless framework, Ansible, Bicep, ARM y OpenTofu.
- Escanea archivos de flujo de trabajo de Argo Workflows, Azure Pipelines, BitBucket Pipelines, Circle CI Pipelines, GitHub Actions y GitLab CI.
- Admite políticas basadas en el contexto gracias al escaneo basado en gráficos en memoria.
- Admite formato Python para políticas de atributos y formato YAML tanto para políticas de atributos como compuestas.
- Detecta credenciales de AWS en Userdata de EC2, variables de entorno de Lambda y proveedores de Terraform.
- Identifica secretos mediante expresiones regulares, palabras clave y detección basada en entropía.
- Evalúa configuraciones del proveedor de Terraform para regular la creación, gestión y actualización de IaaS, PaaS o SaaS gestionados a través de Terraform.
- Las políticas admiten la evaluación de variables a su valor predeterminado opcional.
- Admite supresión en línea de riesgos aceptados o falsos positivos para reducir fracasos recurrentes en el escaneo. También admite omisión global mediante el uso de la CLI.
- Salida actualmente disponible como CLI, CycloneDX, JSON, JUnit XML, CSV, SARIF y markdown de GitHub, con enlace a guías de remediación.
Capturas de pantalla
Resultados del escaneo en CLI

Resultado de escaneo programado en Jenkins

Primeros pasos
Requisitos
- Python >= 3.9, <=3.12
- Terraform >= 0.12
Instalación
Para instalar pip, sigue la documentación oficial.```sh pip3 install checkov
Ciertos entornos (por ejemplo, Debian 12) pueden requerir que instales Checkov en un entorno virtual```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
o con Homebrew (macOS o Linux)```sh brew install checkov
### Habilitando el autocompletado de bash```sh
source <(register-python-argcomplete checkov)
Actualización
si instalaste checkov con pip3```sh pip3 install -U checkov
o con Homebrew```sh
brew upgrade checkov
Configurar una carpeta o archivo de entrada```sh
checkov --directory /user/path/to/iac/code
O un archivo específico o archivos```sh
checkov --file /user/tf/example.tf
O```sh checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml
O un archivo de plan de terraform en formato json```sh
terraform init
terraform plan -out tf.plan
terraform show -json tf.plan > tf.json
checkov -f tf.json
Nota: el archivo de salida terraform show tf.json será una sola línea.
Por esa razón, todos los hallazgos se reportarán en la línea número 0 por 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
Si tienes instalado `jq`, puedes convertir un archivo json en múltiples líneas con el siguiente comando:```sh
terraform show -json tf.plan | jq '.' > tf.json
El resultado del escaneo sería mucho más amigable para el usuario.```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",
Alternativamente, especifique la raíz del repositorio de los archivos hcl utilizados para generar el archivo de plan, usando la bandera `--repo-root-for-plan-enrichment`, para enriquecer la salida con la ruta de archivo, números de línea y bloque de código apropiados del recurso(s). Un beneficio adicional es que las supresiones de comprobación se manejarán en consecuencia.```sh
checkov -f tf.json --repo-root-for-plan-enrichment /user/path/to/iac/code
Muestra de resultado de escaneo (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
Start using Checkov by reading the [Getting Started](https://github.com/bridgecrewio/checkov/blob/main/docs/1.Welcome/Quick%20Start.md) page.
### Usando Docker```sh
docker pull bridgecrew/checkov
docker run --tty --rm --volume /user/tf:/tf --workdir /tf bridgecrew/checkov --directory /tf
Nota: si usas Python 3.6 (versión por defecto en Ubuntu 18.04) checkov no funcionará, y fallará con el mensaje de error ModuleNotFoundError: No module named 'dataclasses'. En ese caso, puedes usar la versión de docker en su lugar.
Ten en cuenta que hay ciertos casos en los que redirigir la salida de docker run --tty a un archivo - por ejemplo, si quieres guardar la salida de Checkov JUnit en un archivo - hará que se impriman caracteres de control adicionales. Esto puede romper el análisis del archivo. Si te encuentras con esto, elimina la bandera --tty.
La bandera --workdir /tf es opcional para cambiar el directorio de trabajo al volumen montado. Si estás usando la salida SARIF -o sarif, esto generará el archivo results.sarif en el volumen montado (/user/tf en el ejemplo anterior). Si no incluyes esa bandera, el directorio de trabajo será /.
Running or skipping checks
Mediante el uso de banderas de línea de comandos, puedes especificar ejecutar solo las comprobaciones nombradas (lista de permitidos) o ejecutar todas las comprobaciones excepto las listadas (lista de denegados). Si estás usando la integración de la plataforma a través de la clave API, también puedes especificar un umbral de gravedad para omitir y/o incluir. Además, como los archivos json no pueden contener comentarios, se puede pasar un patrón regex para omitir el escaneo de secretos en archivos json. Consulta la documentación para obtener información más detallada sobre cómo funcionan estas banderas juntas.
Examples
Permite que solo se ejecuten las dos comprobaciones especificadas:```sh checkov --directory . --check CKV_AWS_20,CKV_AWS_57
Ejecutar todas las comprobaciones excepto la especificada:```sh
checkov -d . --skip-check CKV_AWS_20
Ejecuta todas las comprobaciones excepto aquellas con patrones especificados:```sh checkov -d . --skip-check CKV_AWS*
Ejecuta todas las comprobaciones de severidad MEDIUM o superior (requiere clave de API):```sh
checkov -d . --check MEDIUM --bc-api-key ...
Ejecuta todas las verificaciones que sean de gravedad MEDIUM o superior, así como la verificación CKV_123 (asume que esta es una verificación de gravedad LOW):```sh checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
Omitir todas las comprobaciones que sean de gravedad MEDIUM o inferior:```sh
checkov -d . --skip-check MEDIUM --bc-api-key ...
Omitir todas las comprobaciones que sean de gravedad MEDIUM o inferior, así como la comprobación CKV_789 (asumir que esta es una comprobación de alta gravedad):```sh checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
Ejecuta todas las verificaciones que sean de severidad MEDIA o superior, pero omite la verificación CKV_123 (asume que esta es una verificación de severidad media o superior):```sh
checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ...
Ejecutar la verificación CKV_789, pero omitirla si es de gravedad media (la lógica de --check siempre se aplica antes que --skip-check)```sh checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ...
Para cargas de trabajo de Kubernetes, también puedes usar allow/deny namespaces. Por ejemplo, no reportes ningún resultado para el namespace kube-system:```sh
checkov -d . --skip-check kube-system
Ejecutar un escaneo de una imagen de contenedor. Primero, extraiga o construya la imagen, luego refiérase a ella por el hash, ID, o name:tag:```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 ...
También puede usar la bandera --image para escanear la imagen del contenedor en lugar de --docker-image para abreviar:```sh
checkov --image <image-name>:tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
Ejecutar un análisis SCA de paquetes en un repositorio:```sh checkov -d . --framework sca_package --bc-api-key ... --repo-id <repo_id(arbitrary)>
Ejecute un escaneo de un directorio con variables de entorno eliminando el búfer, añadiendo registros de nivel de depuración:```sh
PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
O habilita las variables de entorno para múltiples ejecuciones```sh export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
Ejecute el escaneo de secretos en todos los archivos en MyDirectory. Omita la verificación CKV_SECRET_6 en archivos json cuyo sufijo sea DontScan.```sh
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*DontScan.json$
Ejecutar escaneo de secretos en todos los archivos en MyDirectory. Omitir la verificación CKV_SECRET_6 en archivos json que contengan 'skip_test' en la ruta.```sh checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*skip_test.*json$
Se pueden enmascarar valores de los resultados del escaneo proporcionando un archivo de configuración (usando la bandera --config-file) con una entrada de máscara. El enmascaramiento se puede aplicar sobre recurso y valor (o múltiples valores, separados por coma). Ejemplos:```sh
mask:
- aws_instance:user_data
- azurerm_key_vault_secret:admin_password,user_passwords
En el ejemplo anterior, se enmascararán los siguientes valores:
user_datapara el recursoaws_instance- tanto
admin_passwordcomouser_passwordsparaazurerm_key_vault_secret
Suprimir/Ignorar una comprobación
Como cualquier herramienta de análisis estático, su alcance está limitado. Por ejemplo, si un recurso se gestiona manualmente, o utilizando herramientas posteriores de gestión de configuración, la supresión se puede insertar como una anotación simple en el código.
Formato del comentario de supresión
Para omitir una comprobación en un bloque de definición de Terraform o recurso de CloudFormation, aplique el siguiente patrón de comentario dentro de su ámbito:
checkov:skip=<check_id>:<suppression_comment>
<check_id>es uno de los [analizadores de comprobación disponibles](docs/5.Policy Index/all.md)<suppression_comment>es una razón opcional de supresión que se incluirá en la salida
Ejemplo
El siguiente comentario omite la comprobación CKV_AWS_20 en el recurso identificado por foo-bucket, donde el análisis verifica si un bucket S3 de AWS es privado.
En el ejemplo, el bucket se configura con acceso de lectura público; agregar el comentario de supresión omitiría la comprobación correspondiente en lugar de que la comprobación falle.```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"
}
La salida ahora contendría una entrada de resultado de verificación ``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
...
Para omitir múltiples comprobaciones, añade cada una como una nueva línea.``` #checkov:skip=CKV2_AWS_6 #checkov:skip=CKV_AWS_20:The bucket is a public static content host
Para suprimir comprobaciones en manifiestos de Kubernetes, se utilizan anotaciones con el siguiente formato:
`checkov.io/skip#: <check_id>=<suppression_comment>`
Por ejemplo:```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:
...
Registro
Para un registro detallado en stdout, configure la variable de entorno LOG_LEVEL a DEBUG.
El valor predeterminado es LOG_LEVEL=WARNING.
Omitir directorios
Para omitir archivos o directorios, use el argumento --skip-path, que se puede especificar varias veces. Este argumento acepta expresiones regulares para rutas relativas al directorio de trabajo actual. Puede usarlo para omitir directorios completos y/o archivos específicos.
De forma predeterminada, se omitirán todos los directorios llamados node_modules, .terraform y .serverless, además de cualquier archivo o directorio que comience con ..
Para cancelar la omisión de directorios que comienzan con ., anule la variable de entorno CKV_IGNORE_HIDDEN_DIRECTORIES con export CKV_IGNORE_HIDDEN_DIRECTORIES=false
Puede anular el conjunto predeterminado de directorios a omitir configurando la variable de entorno CKV_IGNORED_DIRECTORIES.
Tenga en cuenta que si desea conservar esta lista y agregar a ella, debe incluir estos valores. Por ejemplo, CKV_IGNORED_DIRECTORIES=mynewdir omitirá solo ese directorio, pero no los demás mencionados anteriormente. Esta variable es una funcionalidad heredada; recomendamos usar la bandera --skip-file.
Salida de consola
La salida de consola tiene color por defecto; para cambiar a una salida monocromática, configure la variable de entorno:
ANSI_COLORS_DISABLED
Extensión de VS Code
Si desea usar Checkov dentro de VS Code, pruebe la extensión de Prisma Cloud.
Configuración usando un archivo de configuración
Checkov se puede configurar usando un archivo de configuración YAML. De forma predeterminada, checkov busca un archivo .checkov.yaml o .checkov.yml en los siguientes lugares, en orden de precedencia:
- Directorio contra el cual se ejecuta checkov. (
--directory) - Directorio de trabajo actual donde se llama a checkov.
- Directorio de inicio del usuario.
Atención: es una buena práctica que el archivo de configuración de checkov se cargue desde una fuente confiable compuesta por una identidad verificada, para que los archivos escaneados, los identificadores de verificación y las verificaciones personalizadas cargadas sean los deseados.
Los usuarios también pueden pasar la ruta a un archivo de configuración a través de la línea de comandos. En este caso, se ignorarán los otros archivos de configuración. Por ejemplo:```sh checkov --config-file path/to/config.yaml
Los usuarios también pueden crear un archivo de configuración usando el comando `--create-config`, que toma los argumentos de línea de comandos actuales y los escribe en una ruta determinada. Por ejemplo:```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
Creará un archivo config.yaml que se verá así:```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
Los usuarios también pueden usar la bandera `--show-config` para ver todos los args y configuraciones y de dónde provienen, es decir, commandline, archivo de configuración, variable de entorno o default. Por ejemplo:```sh
checkov --show-config
Mostrará:```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
## Contribuciones
¡Las contribuciones son bienvenidas!
Comience revisando las [guías de contribución](https://github.com/bridgecrewio/checkov/blob/main/CONTRIBUTING.md). Después, eche un vistazo a un [buen primer issue](https://github.com/bridgecrewio/checkov/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
Incluso puede comenzar con desarrollo en un clic en su navegador a través de Gitpod en el siguiente enlace:
[](https://gitpod.io/#https://github.com/bridgecrewio/checkov)
¿Busca contribuir con nuevas verificaciones? Aprenda cómo escribir una nueva verificación (también conocida como política) [aquí](https://github.com/bridgecrewio/checkov/blob/main/docs/6.Contribution/Contribution%20Overview.md).
## Descargo de responsabilidad
`checkov` no guarda, publica ni comparte con nadie ninguna información identificable de clientes.
No se utiliza información identificable de clientes para consultar las guías de acceso público de Prisma Cloud.
`checkov` utiliza la API de Prisma Cloud para enriquecer los resultados con enlaces a guías de remediación.
Para omitir esta llamada a la API, use el indicador `--skip-download`.
## Soporte
[Prisma Cloud](https://www.prismacloud.io/?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov) construye y mantiene Checkov para hacer que policy-as-code sea simple y accesible.
Comience con nuestra [Documentación](https://www.checkov.io/1.Welcome/Quick%20Start.html) para tutoriales y ejemplos rápidos.
## Soporte de Versiones de Python
Seguimos el ciclo de soporte oficial de Python y utilizamos pruebas automatizadas para las versiones compatibles de Python.
Esto significa que actualmente soportamos Python 3.9 - 3.13, inclusive.
Tenga en cuenta que Python 3.8 alcanzó su fin de vida (EOL) en octubre de 2024 y Python 3.9 alcanzará su EOL en octubre de 2025.
Si encuentra algún problema con alguna versión de Python que no haya llegado a su EOL, por favor abra un Issue.
