GitHub Actions + Security Scanning: Cómo Integrar Trivy y Checkov en tu Pipeline

Published: (January 18, 2026 at 09:06 PM EST)
4 min read
Source: Dev.to

Source: Dev.to

🛡️ La Solución: Integrar Security Scanning en GitHub Actions

Después de esa experiencia, me propuse crear un pipeline que nunca más permitiera que vulnerabilidades llegaran a producción. Así nació este proyecto que hoy comparto contigo.

🔍 El Problema que Resolvemos

# Así era nuestro workflow ANTES:
- name: Build Docker Image
  run: docker build -t mi-app .

- name: Push to Registry
  run: docker push mi-app:latest

# ¡Sin validaciones de seguridad!

Resultado: vulnerabilidades, secretos expuestos, configuraciones inseguras… todo llegando a producción.

🚀 La Arquitectura de Nuestro Pipeline Seguro

Nuestro nuevo pipeline tiene 4 fases críticas:

1️⃣ Construcción con Etiquetas Inteligentes

# Tags únicos por commit + ambiente
IMAGE_TAG_SHA: "sha-${GITHUB_SHA::7}"
IMAGE_TAG_ENV: "${{ inputs.target_env }}-latest"

2️⃣ Escaneo de Vulnerabilidades con Trivy

- name: Security Scan con Trivy
  run: |
    docker run --rm \
      -v $(pwd):/src \
      aquasec/trivy:latest \
      image --severity CRITICAL,HIGH \
      mi-imagen:${TAG}

Trivy nos ayuda a encontrar:

  • Vulnerabilidades en paquetes del sistema
  • Dependencias con CVEs conocidos
  • Secretos expuestos accidentalmente
  • Configuraciones inseguras

3️⃣ Validación de Dockerfile con Checkov

- name: IaC Security con Checkov
  run: |
    docker run --rm \
      bridgecrew/checkov \
      --file Dockerfile \
      --framework dockerfile

Checkov revisa que nuestro Dockerfile siga mejores prácticas:

  • ¿Usuario root? ❌
  • ¿Paquetes sin actualizar? ❌
  • ¿Secretos hardcodeados? ❌

4️⃣ Bloqueo Automático en Fallos

La magia está aquí: si hay vulnerabilidades CRÍTICAS o ALTAS, el pipeline SE DETIENE.

if [ "$VULNERABILIDADES" -gt 0 ]; then
  echo "❌ WORKFLOW BLOQUEADO"
  echo "Hay $VULNERABILIDADES problemas de seguridad"
  exit 1
fi

📊 Dashboard de Seguridad en Tiempo Real

Todo aparece automáticamente en GitHub Actions Summary:

🐳 Reporte de Escaneo - Trivy
══════════════════════════════

📊 Resumen General
──────────────────
| Tipo               | Severidad | Cantidad |
|--------------------|-----------|----------|
| Vulnerabilidades   | 🔴 CRÍTICA| 2        |
| Vulnerabilidades   | 🟠 ALTA   | 9        |
| Total              |           | 11       |

🏗️ Checkov Security Scan
══════════════════════════

✅ Todos los checks pasaron (22 passed, 0 failed)

🎯 El Resultado: Confianza Automatizada

Antes

  • “Ojalá no haya vulnerabilidades”
  • Auditorías manuales cada 3 meses
  • Incidentes de seguridad recurrentes

Después

  • Cada commit validado automáticamente
  • Cada imagen escaneada antes de publicar
  • Cada despliegue con reporte de seguridad
  • Cero vulnerabilidades en producción desde la implementación

Imágenes de ejemplo

trivy-1

trivy-2

checkov-1

💡 Lecciones Aprendidas

  1. Seguridad ≠ Lentitud
    Muchos piensan que agregar security scanning hará lento el pipeline. ¡Falso! Nuestros escaneos agregan solo 2‑3 minutos.

  2. Fail Fast es Mejor que Fail in Production
    Preferimos que falle el pipeline (y notifique al desarrollador) a que falle en producción (y afecte a usuarios).

  3. Los Reportes Son Tu Mejor Aliado
    Un reporte claro y automático hace que los equipos entiendan y arreglen los problemas, no solo los “parcheen”.

🚀 Implementa en 3 Pasos Sencillos

Paso 1: Clona y explora

git clone https://github.com/francotel/docker-image-security-scan
cd docker-image-security-scan

Paso 2: Examina el workflow

Abre el archivo .github/workflows/ci.yml (o el nombre que corresponda) y revisa cada una de las etapas descritas arriba.

Paso 3: Ajusta y despliega

  • Modifica los tags y variables según tu proyecto.
  • Añade tus credenciales de registro Docker como secrets en GitHub.
  • Commitea y abre un Pull Request; observa el pipeline en acción.

Archivo de ejemplo

github/workflows/publish-nginx-image.yml – ¡Todo está listo para usar!

Paso 3: Adapta a tu caso

Modifica nombres de imágenes, registros y políticas según tu stack.

¡Listo! Ahora tu pipeline valida la seguridad de cada imagen Docker antes de que llegue a producción. 🎉

📈 Impacto Inmediato

  • Detección: de trimestral a en cada commit
  • Cobertura: de muestras a 100 % de imágenes
  • Confianza: de “espero” a “sé que está validado”

🤝 ¿Cómo Contribuir?

El proyecto está activo en github.com/francotel/docker-image-security-scan.

¿Ideas para mejorar?

  • Notificaciones en Slack/Teams
  • Dashboard histórico
  • Escaneo automático de imágenes base
  • Policy as Code personalizado

🎯 ¡Hazlo Hoy!

Ventajas clave

  • Gratuito (open source)
  • Simple (un archivo YAML)
  • Efectivo (bloquea problemas reales)

Acción inmediata

  • Dale estrella al repo
  • 🐑 Haz fork y adapta
  • 💬 Comenta en issues

¿Listo para seguridad automatizada? 👉 github.com/francotel/docker-image-security-scan

#DevSecOps #GitHubActions #DockerSecurity

¡No te lo pierdas! Sígueme en LinkedIn para estar al tanto de todas las actualizaciones y futuros artículos:

LinkedIn

☕ Apóyame con un café

Si este contenido te ha sido útil y quieres apoyarme para seguir creando más, considera invitarme un café. ¡Tu apoyo hace la diferencia! 🥰

BuyMeACoffee

¡Gracias por leer y hasta la próxima! 👋

Back to Blog

Related posts

Read more »

Rapg: TUI-based Secret Manager

We've all been there. You join a new project, and the first thing you hear is: > 'Check the pinned message in Slack for the .env file.' Or you have several .env...

Technology is an Enabler, not a Saviour

Why clarity of thinking matters more than the tools you use Technology is often treated as a magic switch—flip it on, and everything improves. New software, pl...