Curso Profesional de DevOps

Toma las primeras clases gratis

⏱ Tiempo estimado: 20 minutos

🎯 Rama / Perfil: Seguridad / DevOps / devs que quieren “shift-left” en su pipeline.

🧠 Conocimiento previo necesario: Clases 2, 3 y 7 del curso (Docker, imágenes con dependencias fijas, qué hace CI). El curso no cubre seguridad, así que partes de ahí.

💡 ¿Qué vas a lograr? Tres compuertas de seguridad (Dockerfile, vulnerabilidades y secretos) que hacen fallar tu pipeline si hay riesgo.

🛠 Lo que necesitas antes de empezar

Las tres herramientas se ejecutan como contenedores, así que no necesitas instalarlas:

📋 Pasos

Paso 1: Prepara un proyecto con fallos a propósito

Crea una carpeta devsecops-lab con estos archivos.

app.js:

js

console.log('hola');

config.js (token falso para la prueba):

js

module.exports = { token: 'ghp_aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789' };

Dockerfile (mal escrito a propósito):

dockerfile

FROM node:14
WORKDIR /app
ADD . .
CMD ["node", "app.js"]

Paso 2: Compuerta 1, revisa el Dockerfile con Hadolint

bash

docker run --rm -i hadolint/hadolint < Dockerfile

Te señalará malas prácticas (por ejemplo, usar ADD en vez de COPY y no fijar versiones). Cada regla tiene un código (DLxxxx) documentado en el repositorio de Hadolint.

Paso 3: Compuerta 2, escanea vulnerabilidades con Trivy

bash

docker build -t demo:vuln .
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  aquasec/trivy image --severity HIGH,CRITICAL --exit-code 1 demo:vuln

node:14 es una base muy antigua y sin soporte, por lo que verás una lista larga de CVEs. El --exit-code 1 es lo que hace fallar el pipeline cuando encuentra algo de severidad alta o crítica. 🔗 Documentación: https://trivy.dev/latest/docs/

Paso 4: Compuerta 3, detecta secretos con Gitleaks

bash

docker run --rm -v "$(pwd):/repo" zricethezav/gitleaks:latest detect --source /repo --no-git -v

Debería detectar el token falso de config.js y terminar con código de error. Las versiones nuevas de Gitleaks pueden renombrar este comando (por ejemplo, gitleaks dir); [verificar en el README del repositorio oficial] si el comando no responde.

Paso 5: Corrige y vuelve a escanear

Reemplaza el Dockerfile:

dockerfile

FROM node:20-alpine
WORKDIR /app
COPY app.js .
USER node
CMD ["node", "app.js"]

Borra config.js, reconstruye la imagen y repite los pasos 2 a 4. Los resultados deberían mejorar drásticamente: el Trivy se reduce mucho (puede quedar algún hallazgo de la imagen base, y ese es un escenario real) y Gitleaks y Hadolint quedan limpios.

Paso 6: Llévalo al pipeline

En un repo de GitHub, crea .github/workflows/security.yml:

yaml

name: security
on: [push, pull_request]
jobs:
  gates:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Hadolint
        run: docker run --rm -i hadolint/hadolint < Dockerfile
      - name: Gitleaks
        run: docker run --rm -v "$PWD:/repo" zricethezav/gitleaks:latest detect --source /repo --no-git
      - name: Build
        run: docker build -t app:ci .
      - name: Trivy
        run: |
          docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
            aquasec/trivy image --severity HIGH,CRITICAL --exit-code 1 app:ci

Si cualquier compuerta falla, el job se marca en rojo y el merge puede bloquearse.

✅ Resultado esperado

Viste fallar tres controles distintos sobre un proyecto vulnerable, lo corregiste y dejaste un workflow security.yml que repite esos controles en cada push. Ahora tu pipeline verifica seguridad además de que el código funcione.

🔥 Tu reto (siguiente acción)

Aplica las tres compuertas a uno de tus proyectos reales. Si Trivy reporta CVEs, intenta reducirlos cambiando la imagen base (por ejemplo, de node:20 a node:20-alpine) y anota cuántos hallazgos eliminaste.

📚 Recursos para ir más lejos

Curso Profesional de DevOps

Toma las primeras clases gratis

0 Comentarios

para escribir tu comentario

Artículos relacionados