Secure Pipeline Template
“Seis Controles Hacia Produccion”
La mayoria de las plantillas de CI/CD se limitan a construir y desplegar. Esta trata cada commit como no confiable hasta que seis herramientas de seguridad independientes lo hayan examinado. Es el pipeline que me gustaria que todos mis clientes tuvieran.
Que problema resuelve
Una imagen de contenedor que llega a produccion sin haber sido analizada es un riesgo. Pero anadir un escaner a un pipeline existente es fragil: el escaner se ejecuta, el resultado se ignora y el despliegue sigue adelante. Esta plantilla hace que los controles de seguridad sean innegociables. Un hallazgo critico en Semgrep, Trivy o cualquier otra herramienta bloquea el pipeline. Una advertencia se registra en un informe SARIF. El despliegue solo avanza cuando todos los controles pasan.
Arquitectura
Cada commit que llega a este repositorio pasa por seis controles antes de ver produccion. Piensa en ello como el control de seguridad de un aeropuerto para codigo – solo que los escaneres realmente detectan cosas y nadie tiene que quitarse los zapatos.
Si un commit falla en cualquiera de esos controles amarillos, se detiene ahi mismo. El pipeline no continua. El desarrollador recibe un informe explicando que se encontro y como solucionarlo. Solo el verde llega a produccion.
Cada etapa es un control rigido. Los umbrales de severidad son configurables: los hallazgos CRITICAL y HIGH bloquean el pipeline. Los hallazgos MEDIUM generan advertencias en el informe SARIF. LOW e INFO solo se registran.
Los seis controles
Semgrep ejecuta analisis estatico en cada push. Detecta flujos de datos contaminados, patrones de secretos hardcodeados y antipatrones especificos del lenguaje. Las reglas estan en .semgrep.yml y ajustadas para Python/Flask.
Trivy analiza las dependencias y la imagen final del contenedor en busca de CVE conocidos. Tambien analiza las configuraciones de Terraform en busca de errores. Combinado, detecta vulnerabilidades tanto a nivel de aplicacion como de infraestructura.
Hadolint revisa el Dockerfile. Aplica buenas practicas: sin etiquetas latest, sin usuario root, COPY en lugar de ADD, versiones de paquetes fijadas.
Gitleaks se ejecuta como hook pre-commit y en CI. Detecta credenciales subidas por accidente: claves de AWS, tokens de GitHub, contraseñas de bases de datos. El pre-commit las captura antes de que lleguen al remoto.
Checkov analiza Terraform en busca de configuraciones incorrectas en la nube: buckets S3 sin encriptar, grupos de seguridad abiertos, falta de logs de flujo, politicas IAM demasiado permisivas.
OPA/Conftest aplica reglas especificas de la organizacion escritas en Rego. Ningun escaner generico puede verificar que cada servicio use la imagen base aprobada por tu empresa o que todos los buckets S3 tengan una etiqueta especifica para facturacion. OPA hace que estas reglas sean aplicables.
Capa de infraestructura
Los modulos de Terraform aprovisionan un entorno AWS ECS Fargate con subredes privadas, logs de flujo VPC, buckets S3 encriptados y roles IAM con privilegios minimos. Para despliegues locales, Docker Compose con Nginx gestiona la terminacion TLS, redireccion HTTP a HTTPS, limitacion de tasa y cabeceras de seguridad. El contenedor de la aplicacion se ejecuta como usuario no root con sistema de archivos de solo lectura.
Decisiones de diseno
Nginx como terminador TLS para despliegues locales en lugar de un balanceador de carga en la nube. Esto permite probar la postura de seguridad completa (TLS, limitacion de tasa, cabeceras) en un portatil antes de tocar AWS.
Contenedores no-root y de solo lectura en todas partes. La aplicacion Flask se ejecuta como UID 1000. El sistema de archivos se monta como solo lectura excepto /tmp. Esto limita lo que un atacante puede hacer incluso si compromete la aplicacion.
Fallo duro en critico, advertencia en medio. Los falsos positivos son reales. Bloquear un despliegue por un hallazgo de severidad media que resulta ser un falso positivo genera fatiga de alertas. Los hallazgos criticos y altos reciben el bloqueo duro. Los medios generan un informe SARIF visible en la pestana de Seguridad del repositorio.