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 la infraestructura de la nube aprovisionada mediante Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates u OpenTofu y detecta configuraciones erróneas de seguridad y cumplimiento mediante escaneo basado en gráficos.
Realiza un análisis de análisis de composición de software (SCA), que es un análisis de imágenes y paquetes de código abierto en busca de vulnerabilidades y exposiciones comunes (CVE).
Checkov también impulsa Prisma Cloud Application Security , la plataforma prioritaria para desarrolladores que codifica y optimiza la seguridad en la nube durante todo el ciclo de vida del desarrollo. Prisma Cloud identifica, corrige y previene configuraciones erróneas en recursos de la nube y archivos de infraestructura como código.
Resultados del escaneo en CLI
Resultado del análisis programado en Jenkins
Para instalar pip, siga los documentos oficiales.
pip3 install checkov
o con Homebrew (macOS o Linux)
brew install checkov
source <( register-python-argcomplete checkov )
si instaló checkov con pip3
pip3 install -U checkov
o con cerveza casera
brew upgrade checkov
checkov --directory /user/path/to/iac/code
O un archivo o archivos específicos
checkov --file /user/tf/example.tf
O
checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml
O un archivo de plan de terraform en formato json
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, Checkov informará todos los hallazgos en la línea número 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
Si ha instalado jq
puede convertir el archivo json en varias líneas con el siguiente comando:
terraform show -json tf.plan | jq ' . ' > tf.json
El resultado del escaneo sería mucho más fácil de usar.
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 del plan, usando el indicador --repo-root-for-plan-enrichment
, para enriquecer la salida con la ruta del archivo, los números de línea y el bloque de código apropiados del recurso. (s). Un beneficio adicional es que las supresiones de cheques se manejarán en consecuencia.
checkov -f tf.json --repo-root-for-plan-enrichment /user/path/to/iac/code
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
Comience a utilizar Checkov leyendo la página de introducción.
docker pull bridgecrew/checkov
docker run --tty --rm --volume /user/tf:/tf --workdir /tf bridgecrew/checkov --directory /tf
Nota: si está utilizando Python 3.6 (versión predeterminada en Ubuntu 18.04), checkov no funcionará y fallará con el mensaje de error ModuleNotFoundError: No module named 'dataclasses'
. En este caso, puede utilizar la versión acoplable.
Tenga en cuenta que hay ciertos casos en los que redirigir la salida docker run --tty
a un archivo (por ejemplo, si desea guardar la salida de Checkov JUnit en un archivo) hará que se impriman caracteres de control adicionales. Esto puede interrumpir el análisis de archivos. Si encuentra esto, elimine la marca --tty
.
El indicador --workdir /tf
es opcional para cambiar el directorio de trabajo al volumen montado. Si está utilizando la salida SARIF -o sarif
esto generará el archivo results.sarif en el volumen montado ( /user/tf
en el ejemplo anterior). Si no incluye esa bandera, el directorio de trabajo será "/".
Al utilizar indicadores de línea de comando, puede especificar ejecutar solo comprobaciones con nombre (lista de permitidos) o ejecutar todas las comprobaciones excepto las enumeradas (lista de denegados). Si está utilizando la integración de la plataforma a través de una clave API, también puede especificar un umbral de gravedad para omitir y/o incluir. Además, como los archivos json no pueden contener comentarios, se puede pasar el patrón de expresiones regulares para omitir el análisis secreto del archivo json.
Consulte los documentos para obtener información más detallada sobre cómo funcionan juntas estas banderas.
Permita que solo se ejecuten las dos comprobaciones especificadas:
checkov --directory . --check CKV_AWS_20,CKV_AWS_57
Ejecute todas las comprobaciones excepto la especificada:
checkov -d . --skip-check CKV_AWS_20
Ejecute todas las comprobaciones excepto las comprobaciones con patrones específicos:
checkov -d . --skip-check CKV_AWS *
Ejecute todas las comprobaciones de gravedad MEDIA o superior (requiere clave API):
checkov -d . --check MEDIUM --bc-api-key ...
Ejecute todas las comprobaciones que sean de gravedad MEDIA o superior, además de comprobar CKV_123 (suponga que se trata de una comprobación de gravedad BAJA):
checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
Omita todas las comprobaciones que sean de gravedad MEDIA o inferior:
checkov -d . --skip-check MEDIUM --bc-api-key ...
Omita todas las comprobaciones de gravedad MEDIA o inferior, así como la comprobación CKV_789 (suponga que se trata de una comprobación de gravedad alta):
checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
Ejecute todas las comprobaciones que sean de gravedad MEDIA o superior, pero omita la comprobación CKV_123 (suponga que se trata de una comprobación de gravedad media o superior):
checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ...
Ejecute check CKV_789, pero omítalo si es de gravedad media (la lógica --check siempre se aplica antes de --skip-check)
checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ...
Para cargas de trabajo de Kubernetes, también puede utilizar permitir/denegar espacios de nombres. Por ejemplo, no informe ningún resultado para el espacio de nombres kube-system:
checkov -d . --skip-check kube-system
Ejecute un escaneo de una imagen de contenedor. Primero extraiga o cree la imagen y luego consúltela por el hash, ID o nombre:etiqueta:
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 ...
Puedes usar el indicador --image también para escanear la imagen del contenedor en lugar de --docker-image para acortarlo:
checkov --image < image-name > :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
Ejecute un escaneo SCA de paquetes en un repositorio:
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 almacenamiento en búfer y agregando registros de nivel de depuración:
PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
O habilitar las variables de entorno para múltiples ejecuciones
export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG
checkov -d .
Ejecute el análisis de secretos en todos los archivos de MyDirectory. Omita CKV_SECRET_6 verifique en los archivos json que su sufijo sea DontScan
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:. * DontScan.json$
Ejecute el análisis de secretos en todos los archivos de MyDirectory. Omitir la verificación CKV_SECRET_6 en archivos json que contienen "skip_test" en la ruta
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:. * skip_test. * json$
Se pueden enmascarar los valores de los resultados del escaneo proporcionando un archivo de configuración (usando el indicador --config-file) con una entrada de máscara. El enmascaramiento puede aplicarse al recurso y al valor (o a varios valores, separados por una coma). Ejemplos:
mask:
- aws_instance:user_data
- azurerm_key_vault_secret:admin_password,user_passwords
En el ejemplo anterior, se enmascararán los siguientes valores:
Como cualquier herramienta de análisis estático, está limitada por su alcance de análisis. Por ejemplo, si un recurso se administra manualmente o mediante herramientas de administración de configuración posteriores, la supresión se puede insertar como una simple anotación de código.
Para omitir una verificación en un bloque de definición de Terraform o recurso de CloudFormation determinado, aplique el siguiente patrón de comentarios dentro de su alcance:
checkov:skip=<check_id>:<suppression_comment>
<check_id>
es uno de los [escáneres de cheques disponibles](docs/5.Policy Index/all.md)<suppression_comment>
es un motivo de supresión opcional que se incluirá en la salida El siguiente comentario omite la verificación CKV_AWS_20
del recurso identificado por foo-bucket
, donde el escaneo verifica si un depósito de AWS S3 es privado. En el ejemplo, el depósito está configurado con acceso de lectura público; Agregar el comentario de supresión omitiría la verificación apropiada en lugar de fallar la verificación.
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á una entrada de resultado de verificación 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
...
Para omitir varias comprobaciones, agregue 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 las comprobaciones en los manifiestos de Kubernetes, se utilizan anotaciones con el siguiente formato: checkov.io/skip#: <check_id>=<suppression_comment>
Por ejemplo:
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:
...
Para un registro detallado en stdout, configure la variable de entorno LOG_LEVEL
en DEBUG
.
El valor predeterminado es LOG_LEVEL=WARNING
.
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. Puedes usarlo para omitir directorios completos y/o archivos específicos.
De forma predeterminada, se omitirán todos los directorios denominados 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 .
anular la variable de entorno CKV_IGNORE_HIDDEN_DIRECTORIES
export CKV_IGNORE_HIDDEN_DIRECTORIES=false
Puede anular el conjunto predeterminado de directorios para omitir configurando la variable de entorno CKV_IGNORED_DIRECTORIES
. Tenga en cuenta que si desea conservar esta lista y agregarla, debe incluir estos valores. Por ejemplo, CKV_IGNORED_DIRECTORIES=mynewdir
omitirá sólo ese directorio, pero no los demás mencionados anteriormente. Esta variable es una funcionalidad heredada; Recomendamos utilizar el indicador --skip-file
.
La salida de la consola es en color de forma predeterminada; para cambiar a una salida monocromática, configure la variable de entorno: ANSI_COLORS_DISABLED
Si desea utilizar Checkov dentro de VS Code, pruebe la extensión Prisma Cloud.
Checkov se puede configurar utilizando 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 prioridad:
--directory
)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, de modo que los archivos escaneados, los identificadores de verificación y las comprobaciones 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 comando. En este caso, se ignorarán los demás archivos de configuración. Por ejemplo:
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 la línea de comando actual y los escribe en una ruta determinada. Por ejemplo:
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 ve así:
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 el indicador --show-config
para ver todos los argumentos y configuraciones y de dónde provienen, es decir, línea de comando, archivo de configuración, variable de entorno o valor predeterminado. Por ejemplo:
checkov --show-config
Mostrará:
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
¡La contribución es bienvenida!
Comience revisando las pautas de contribución. Después de eso, eche un vistazo a un buen primer número.
Incluso puedes iniciar esto con un solo clic en tu navegador a través de Gitpod en el siguiente enlace:
¿Quiere contribuir con nuevos cheques? Aprenda cómo emitir un nuevo cheque (también conocido como política) aquí.
checkov
no guarda, publica ni comparte con nadie ninguna información identificable del cliente.
No se utiliza información identificable del cliente 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 solución. Para omitir esta llamada API use la bandera --skip-download
.
Prisma Cloud crea y mantiene Checkov para que las políticas como código sean simples y accesibles.
Comience con nuestra documentación para obtener tutoriales y ejemplos rápidos.
Seguimos el ciclo de soporte oficial de Python y utilizamos pruebas automatizadas para las versiones compatibles de Python. Esto significa que actualmente admitimos Python 3.9 - 3.12, inclusive. Tenga en cuenta que Python 3.8 alcanzó el EOL en octubre de 2024 y Python 3.9 alcanzará el EOL en octubre de 2025. Estamos investigando la compatibilidad con 3.13. Si tiene algún problema con cualquier versión de Python que no sea EOL, abra un Problema.