🚨 La Pesadilla que Todos los DevOps Tememos
Era un martes cualquiera cuando recibí la alerta: "Vulnerabilidad CRÍTICA detectada en producción". Nuestra aplicación, que servía a miles de usuarios, tenía una vulnerabilidad de día cero que alguien había logrado explotar.
¿El culpable? Una imagen Docker que habíamos desplegado la semana anterior.
La peor parte: ¡La vulnerabilidad ya existía cuando publicamos la imagen! Había pasado por nuestro pipeline CI/CD sin que nadie la notara.
En ese momento entendí algo crucial: si tu pipeline no valida seguridad, estás desplegando ciegamente.
🛡️ 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"
- 🔍 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
Lo mejor de todo: 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
💡 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
Revisa .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.
📈 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:
☕ 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! 🥰
¡Gracias por leer y hasta la próxima! 👋





Top comments (0)