Este repositorio acompaña mi charla en Nerdear.la 2025 sobre cómo aplique DevSecOps en la vida real, con todo lo bueno, lo malo y los incidentes que aprendí a contener.
Mi objetivo es dejar ejemplos prácticos y documentación abierta para que cualquier persona pueda usar, forkar y reutilizar lo que a mí me funcionó. Y que esto quede reflejado en el README como un primer "camino paso a paso" del pipeline completo (con jobs y stages). Obviamente cada empresa/proyecto es un mundo asi que acá sentite libre de modificar lo que necesites o usar lo que te convenga.
├── app/ # Ejemplo de aplicación vulnerable + Dockerfile
├── terraform/ # Infraestructura como código (IaC)
├── vuln_scans/ # Ejemplo de reporte HTML de escaneo
├── img/ # Diagramas e imágenes de apoyo
├── internal-checks.sh # Script de validaciones internas
├── data.json # Datos de ejemplo (para triggers/demos)
├── README.md # Este archivo :)
- Cambio de mindset: No es checklist, es entender qué puede salir mal.
- Shift Left: Seguridad desde el inicio del ciclo de vida. (...o lo antes posible)
- Seguridad proactiva: Evaluar lo que se va a publicar, evitar manejar secretos,tokens etc
- Automatización con propósito: IaC, pipelines auditables, rollback seguro.
- Monitoreo y observabilidad: Logs, métricas, trazas y validaciones post-deploy.
- Cultura colaborativa: Dev + Sec + Ops trabajando con feedback continuo.
Ejemplo: pre-commit-config.yaml
- Validación de secrets.
- Linters y formateo.
- Scanners básicos antes de subir el código.
Acordate de instalar pre-commit en tu local, o si sos muy mañoso usalo en un docker.
pip install pre-commit (al momento de la charla use pre-commit v4.3.0)
pre-commit install
pre-commit run --all-files
Ejemplo:
echo "superdupersecret" > hola.txt
git add hola.txt
git commit -m "nuevo archivo"
# Ojo, hacer el pre-commit antes del push...
pre-commit run -a
git push origin <branch>
Resumen
Archivos nuevos necesitas git add antes de que pre-commit los vea.
Archivos en staging se analizan automáticamente en cada git commit.
Revisión global usa pre-commit run --all-files.
Ejemplo: .github/workflows/DevSecOps.yaml
- 🟢 Pre-checks linters, pre-commit, secretos.
- 🛠 Build & Test compilación reproducible, tests unitarios.
- 🔍 Análisis de seguridad SAST + IaC scanning (tfsec, trivy).
- 🚀 Deploy controlado Terraform (terraform/).
- 🧪 Validaciones post-deploy DAST / Nuclei.
- 📊 Monitoreo y observabilidad logs, métricas y trazas.
- 🔁 Feedback loop métricas visibles + vulnerabilidades evitadas.
Pre-checks - Validar formato y calidad de código (linters). - Pre-commit hooks para evitar secrets, claves o tokens en commits. Build & Test - Compilación o build reproducible. - Tests unitarios y de integración. Análisis de seguridad - SAST: análisis estático de código. - IaC scanning: tfsec para Terraform, trivy para imágenes de contenedor. Deploy controlado - Despliegue con IaC. - Deploy auditado (commit = deploy). - Feedback inmediato si algo falla. Validaciones post-deploy - DAST con Nuclei u otras herramientas. - Validación de endpoints y URLs públicas. Monitoreo y observabilidad - Logs, métricas y trazas. - Alertas tempranas de incidentes. Feedback loop - Métricas visibles en el pipeline. - Reporte de Vulns evitadas antes de llegar a Prod (esto alimenta los pre-commits) y ayuda a otros miembros del Team
Objetivo | Descripción | Ejemplo en repo |
---|---|---|
Planificación | Casos de uso y abuso, definición de riesgos | docs/ (próximamente) |
Desarrollo | Linters, pre-commit, code reviews | app/, .pre-commit-config.yaml |
Integración continua | SAST, control de secretos, builds reproducibles | .github/workflows/DevSecOps.yaml |
Deploy | IaC validado, escaneo de imágenes, pipelines auditables | terraform/ |
Post-deploy | Validaciones automáticas (Nuclei, scanners), monitoreo y observabilidad | vuln_scans/ |
Feedback | Incidentes evitados, métricas de seguridad y mejoras continuas | internal-checks.sh |
Tool | descripción | uso generico |
---|---|---|
tfsec | análisis de seguridad en Terraform. | mitigar lo más posible antes de deployar |
trivy | escaneo de vulnerabilidades. | validar que tan criticos son nuestros CVEs |
Nuclei | validación de endpoints y URLs públicas | simular lo que veria un atacante |
pre-commit | filtro de hooks locales | evitar que datos sensibles o vulerables lleguen al repo |
Este repo está pensado para crecer con ejemplos reales de la comunidad. Si tenés una receta, script o pipeline que te funcionó, por mas minimo o simple que sea, hacé una PR!!!
Recordá que todo lo que sube al repo, queda en el log, asi que si ya subiste un secreto o similar, cambialo y para la prox podes implementar pre-commits para evitar subir cualquier tipo de password, secreto o dato potencialmente peligroso :D
sed -i 's/xxxxx/60f41f67-b43b-4552-bb80-f2f29b861ef99/g' data.json && \
sed -i 's/zzzzz/SuperSecretPassword1234!/g' app/app.py && \
sed -i 's/99.99.99.99\/32/0.0.0.0\/0/g' terraform/sg.tf
git pull; git status ; git add --all ; git commit -m "fix: fake workflow" ; git push origin main
sed -i 's/60f41f67-b43b-4552-bb80-f2f29b861ef99/xxxxx/g' data.json && \
sed -i 's/SuperSecretPassword1234!/zzzzz/g' app/app.py && \
sed -i 's/0.0.0.0\/0/99.99.99.99\/32/g' terraform/sg.tf
git pull; git status ; git add --all ; git commit -m "fix: rollback workflow" ; git push origin main
git reset --hard 8f19d216282d1516ad3fedf7b28e2bebb23b36c6
git push -f origin main