Escaneo de Seguridad IaC en 2026: Checkov, KICS y Trivy para Terraform y Kubernetes
Cómo integrar Checkov, KICS y Trivy config en pipelines DevSecOps de 2026 para escanear Terraform y Kubernetes con SARIF, baselines y hooks pre-commit.
El escaneo de seguridad IaC analiza tu Terraform, manifiestos de Kubernetes, Dockerfiles y plantillas CloudFormation antes de aplicarlas para detectar configuraciones inseguras (buckets S3 públicos, contenedores sin readOnlyRootFilesystem, security groups abiertos a 0.0.0.0/0). En 2026, las tres opciones open source dominantes son Checkov (Prisma Cloud), KICS (Checkmarx) y Trivy config (Aqua, sucesor de tfsec tras su archivado en 2024). Honestamente, integrar cualquiera de ellas en un pipeline lleva menos de una tarde y evita el 80% de los hallazgos que un pentester encontraría más tarde (yo mismo lo comprobé la primera vez que metí Checkov en un monorepo con 40 módulos Terraform: 137 hallazgos el primer día, 8 críticos que ya llevaban meses en producción).
Checkov 3.x cubre 1.200+ políticas para Terraform, Kubernetes, CloudFormation, ARM, Bicep y Docker con un motor Python fácil de extender.
KICS ofrece 2.400+ consultas escritas en Rego (OPA) y añade soporte para Ansible, Helm y GitHub Actions workflows.
tfsec fue absorbido por Trivy en agosto 2023; en 2026 el comando canónico es trivy config . y el repositorio original está archivado.
Los tres emiten SARIF, lo que permite subir hallazgos a la pestaña Security de GitHub y bloquear PRs por severidad.
Los hooks pre-commit son la primera línea de defensa: fallan localmente en segundos, no cuestan minutos de CI.
Suprime falsos positivos con archivos de baseline versionados (.checkov.baseline) en vez de comentarios skip dispersos por el código.
¿Qué es el escaneo de seguridad IaC y por qué importa en 2026?
El escaneo de seguridad IaC (Infrastructure as Code) es análisis estático aplicado a plantillas de infraestructura: en vez de auditar la nube después de desplegar, revisas el HCL, YAML o JSON que la describe antes de que se convierta en recursos reales. La diferencia frente al escaneo de vulnerabilidades tradicional es sutil pero enorme: aquí no buscas CVEs en binarios, buscas errores de configuración como cifrado desactivado, autenticación anónima, roles IAM con *:* o pods corriendo como root.
En mi experiencia migrando pipelines a lo largo de 2025 y 2026, el 60-70% de los hallazgos de un pentest de cloud son configuraciones que un escáner IaC hubiera atrapado en el PR. Con Terraform 1.10, OpenTofu 1.8 y Kubernetes 1.32 dominando los stacks modernos, la superficie de configuración explotó: CIS Controls v8 y los benchmarks para AWS, Azure y GCP definen miles de reglas, y ninguna persona las revisa a mano. Automatizar esa revisión en CI es tan básico hoy como correr go vet antes de fusionar.
Los tres escáneres de este artículo son gratuitos, open source, corren en Linux sin dependencias binarias raras y publican formato SARIF 2.1.0 estándar. Eso significa que puedes empezar hoy sin comprar nada y migrar entre ellos sin rehacer tu pipeline.
Checkov vs KICS vs Trivy: comparativa práctica
Antes de instalar nada, conviene entender qué diferencia a cada herramienta. Las tres cubren Terraform y Kubernetes bien; la elección depende de qué otros formatos escaneas y de si ya tienes Trivy en el pipeline para imágenes.
Característica
Checkov 3.x
KICS
Trivy config
Mantenedor
Prisma Cloud (Palo Alto)
Checkmarx
Aqua Security
Licencia
Apache 2.0
Apache 2.0
Apache 2.0
Reglas incluidas
~1.200
~2.400
~600 (heredadas de tfsec + propias)
Lenguaje de reglas
Python + YAML
Rego (OPA)
Rego (OPA)
Terraform / OpenTofu
Sí (con evaluación de variables)
Sí
Sí
Kubernetes / Helm
Sí / Sí
Sí / Sí
Sí / Sí
Dockerfile
Sí
Sí
Sí
CloudFormation / ARM / Bicep
Sí / Sí / Sí
Sí / Sí / No
Sí / Sí / No
Ansible
Parcial
Sí
No
Salida SARIF
Sí (--output sarif)
Sí (--report-formats sarif)
Sí (--format sarif)
Binario / Instalación
pip / Docker
Docker / Homebrew / Go
apt / rpm / Homebrew / Docker
Mi recomendación pragmática: si ya usas Trivy para escanear imágenes y filesystems, añadir trivy config es coste cero. Si quieres el catálogo más amplio y no te importa una imagen Docker más pesada, KICS gana en cobertura bruta. Si valoras extensibilidad y una comunidad activa escribiendo custom policies en Python, Checkov es el más productivo.
Instalar y ejecutar Checkov en Terraform
Checkov se distribuye como paquete PyPI. En un runner Debian/Ubuntu limpio la instalación son dos líneas. Requiere Python 3.9+ (verificado con Checkov 3.2.x en 2026).
# Instalar Checkov en un runner de CI (Ubuntu 24.04)
sudo apt-get update && sudo apt-get install -y python3-pip
pip3 install --user checkov
# Verificar version
checkov --version
# Salida esperada: 3.2.x
Para escanear un directorio Terraform con evaluación de variables (imprescindible para detectar valores por defecto inseguros):
El flag --download-external-modules es crítico: sin él, cualquier module "vpc" { source = "terraform-aws-modules/vpc/aws" } queda como caja negra y pierdes cobertura. En pipelines lo activo siempre; en desarrollo local lo omito para no golpear el registry.
Para fallar el pipeline solo con hallazgos de severidad alta o crítica:
# Ignorar informativos y bajos; fallar en MEDIUM+
checkov -d ./terraform \
--check CKV_AWS_20,CKV_AWS_21 \
--hard-fail-on HIGH,CRITICAL \
--soft-fail-on MEDIUM \
--quiet
KICS: escaneo multi-plataforma con reglas Rego
KICS (Keeping Infrastructure as Code Secure) brilla cuando tu monorepo mezcla Terraform, manifiestos Kubernetes, playbooks Ansible y workflows de GitHub Actions. Un solo escáner atraviesa todo. La instalación más limpia en 2026 es vía Docker o Homebrew:
# Instalacion con Homebrew (macOS/Linuxbrew)
brew install checkmarx/tap/kics
# O directamente con Docker
docker pull checkmarx/kics:latest
# Escanear el directorio actual con salida SARIF y JSON
docker run -t -v "$PWD:/path" checkmarx/kics:latest scan \
-p /path \
--report-formats sarif,json \
-o /path/kics-results \
--exclude-severities info,low
Las reglas de KICS están en GitHub bajo checkmarx/kics, cada una es un archivo query.rego con metadata YAML. Escribir una regla custom es directo si conoces Rego, pero la curva es más pronunciada que en Checkov.
Un truco que uso: --exclude-paths acepta globs para saltarse módulos generados o fixtures de tests. Sin esto, KICS gasta minutos escaneando carpetas .terraform/modules que no controlas:
# Excluir modulos vendored y fixtures de test
kics scan -p . \
--exclude-paths "**/.terraform/**,**/testdata/**,**/vendor/**" \
--fail-on high,critical \
--report-formats sarif \
-o ./reports
KICS también tiene modo --experimental-queries que activa reglas recientes aún no promovidas a estables. Útil para adelantarte a hallazgos que serán defecto en versiones futuras, pero espera algún falso positivo.
Trivy config: el sucesor oficial de tfsec
tfsec fue durante años el escáner de referencia para Terraform. En agosto de 2023, Aqua Security anunció su migración a Trivy y el repositorio de tfsec quedó archivado. En 2026 todos los checks viven en el subcomando trivy config, con más formatos soportados y el mismo motor Rego bajo el capó.
La ventaja concreta frente a KICS y Checkov es la unificación: un único binario escanea IaC, imágenes de contenedor, filesystems, repos Git y SBOMs. Si ya tienes Trivy en tu pipeline para seguridad de contenedores, no añades una herramienta más; solo un flag más.
# Combinar en un mismo comando: IaC + imagen del deploy
trivy config ./infra --exit-code 1 --severity HIGH,CRITICAL
trivy image ghcr.io/miorg/app:${GITHUB_SHA} \
--exit-code 1 --severity HIGH,CRITICAL --ignore-unfixed
Integrar Checkov con GitHub Actions y SARIF
El formato SARIF (Static Analysis Results Interchange Format) es el pegamento entre escáneres y la pestaña Security de GitHub. Subir un SARIF hace que los hallazgos aparezcan como comentarios en el diff del PR y como issues rastreables en Code Scanning. Este flujo funciona igual para Checkov, KICS y Trivy; muestro Checkov como ejemplo.
Puntos que suelo revisar en code review de este workflow:
permissions: security-events: write es obligatorio; sin él la subida falla con 403 y a veces sin log claro.
if: always() en el paso de upload es clave: si Checkov encuentra crítica y el job "falla", queremos igual ver los hallazgos en la UI.
soft_fail: true durante la adopción; una vez el equipo aprende a suprimir falsos positivos con baseline, cambia a soft_fail: false y añade una regla de rama que bloquea el merge si Code Scanning reporta severidad alta.
Hooks pre-commit: escaneo antes de git push
Un hallazgo detectado en CI cuesta 3-10 minutos de espera al desarrollador. Detectado en el pre-commit cuesta 5 segundos. La productividad del equipo compensa cualquier fricción inicial de instalar el framework pre-commit.
pip install --user pre-commit
pre-commit install
pre-commit run --all-files # smoke test inicial
Cómo suprimir falsos positivos sin ocultar riesgos reales
Esta es la sección donde la mayoría de adopciones fallan. El primer escaneo devuelve 200 hallazgos, alguien mete --skip-check con una lista larga, y seis meses después nadie recuerda por qué se saltó CKV_AWS_23. La disciplina que funciona: baseline files versionados y comentarios justificados.
Con Checkov, genera una baseline la primera vez que ejecutas el escáner en el repo:
# Registrar hallazgos existentes como "conocidos"
checkov -d ./terraform --create-baseline --output-baseline-file .checkov.baseline
# En corridas siguientes, solo hallazgos NUEVOS fallan
checkov -d ./terraform --baseline .checkov.baseline --hard-fail-on HIGH
Comitea .checkov.baseline. Cualquier commit que introduzca un hallazgo nuevo fallará; los antiguos quedan visibles pero no bloquean. Esto es infinitamente mejor que un --skip-check global porque:
El baseline es diff-able en el PR.
Si quitas código malo, el hallazgo desaparece del baseline automáticamente.
Puedes reducir el baseline en sprints dedicados y trackear "deuda de seguridad".
Para justificar excepciones caso por caso, usa el comentario inline soportado por Terraform:
La regla que doy al equipo: toda excepción lleva ticket y firma humana. Un skip sin justificación se rechaza en code review.
Estrategia shift-left para pipelines DevSecOps de producción
"Shift-left" significa mover controles de seguridad lo más cerca posible del desarrollador. En un pipeline maduro de 2026, el escaneo IaC aparece en tres puntos:
Pre-commit local: Checkov o Trivy config en modo rápido, solo severidad crítica, corte agresivo con --framework terraform para no tocar YAML/JSON aún.
Pull request en CI: escaneo completo con SARIF, comentarios en el diff, baseline aplicado, bloqueo por severidad HIGH+.
Antes del apply en el runner de producción: último escaneo con el plan resuelto (terraform show -json plan.out | checkov -f -), atrapando cualquier cambio inyectado por variables de entorno o modules dinámicos.
Esta triple malla suele costar menos de 90 segundos totales de CI. Combínala con el pipeline base de Semgrep, Gitleaks y Trivy y tendrás cobertura simultánea de SAST, secretos, contenedores e infraestructura sin apenas fricción para el desarrollador.
Un patrón que ahorra dolor: separa el workflow de IaC del workflow de app en GitHub Actions y usa paths: filters. Un cambio a terraform/ no debe disparar el escaneo de imágenes de la app; un cambio a src/ no debe correr Checkov. Aislar reduce el tiempo medio de CI y hace obvio qué falló.
Preguntas frecuentes
¿Cuál es la mejor herramienta de escaneo IaC en 2026?
No hay una única "mejor". Checkov gana en extensibilidad y comunidad, KICS gana en catálogo bruto de reglas (2.400+), y Trivy config gana si ya usas Trivy para imágenes. Para la mayoría de equipos, empezar con Checkov o Trivy es la ruta más rápida a valor.
¿Sigue funcionando tfsec en 2026?
El binario tfsec todavía se ejecuta, pero el repositorio está archivado desde 2024 y no recibe actualizaciones de reglas. Toda mantención migró a Trivy. Si aún tienes tfsec en pipelines legacy, planifica la migración a trivy config este trimestre: los IDs de reglas cambiaron y necesitas regenerar cualquier archivo de supresión.
¿Checkov es gratis para uso comercial?
Sí. Checkov es open source bajo licencia Apache 2.0 y se puede usar comercialmente sin coste. Prisma Cloud (Palo Alto) ofrece una versión SaaS de pago con dashboards y gestión de políticas centralizada, pero el motor de escaneo y todas las reglas base son gratuitas.
¿Cómo integro Checkov con GitLab CI en vez de GitHub Actions?
Usa la imagen oficial bridgecrew/checkov en un stage y publica el reporte como artefacto con formato JUnit o SARIF. GitLab 17+ soporta SAST reports nativos: añade sast: checkov-report.json en artifacts:reports y los hallazgos aparecen en la MR como comentarios inline, igual que en GitHub.
¿Qué diferencia hay entre escaneo IaC y análisis de vulnerabilidades tradicional?
El análisis de vulnerabilidades busca CVEs conocidos en paquetes y binarios instalados. El escaneo IaC busca errores de configuración (buckets públicos, cifrado desactivado, IAM permisivo) en las plantillas que describen infraestructura antes de desplegarla. Son complementarios: necesitas ambos en un pipeline maduro.
Guía práctica 2026 para gestionar secretos en Linux con HashiCorp Vault, SOPS con age y systemd-creds sellado al TPM 2.0. Modelo de amenazas, ejemplos de producción y rotación automática.
Stack práctico para asegurar la cadena de suministro de software en Linux 2026: firma keyless con Cosign, SBOMs con Syft, escaneo con Grype y verificación obligatoria en Kubernetes con Kyverno.
Guía práctica para construir un pipeline DevSecOps en Linux con GitHub Actions. Integra Semgrep, Gitleaks y Trivy para blindar tu flujo CI/CD con herramientas open source y código listo para copiar.