intermediate Por Mathias Paulenko

Plantilla de Seguridad de Pipeline CI/CD

Una plantilla para asegurar pipelines de compilacion y despliegue contra filtraciones de credenciales, manipulacion, ataques a la cadena de suministro y despliegues no autorizados.

Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.

Descripcion General

Los pipelines CI/CD son un objetivo de alto valor para atacantes porque tienen acceso al codigo fuente, secretos de compilacion y rutas de despliegue a produccion. Un pipeline comprometido puede introducir malware, exfiltrar datos o desplegar cambios no autorizados. Esta plantilla define controles para proteger la integridad del codigo, la seguridad de los runners, los secretos y las aprobaciones de despliegue.

Cuando Usar

  • For alternatives, see CI/CD Security: Harden Your Pipelines and Prevent Supply.

  • Configurar una nueva plataforma CI/CD.

  • Revisar o mejorar un pipeline existente.

  • Prepararse para una auditoria de seguridad de la cadena de suministro.

  • Despues de un compromiso del sistema de compilacion o despliegue no autorizado.

  • Integrar controles DevSecOps en los flujos de trabajo de ingenieria.

Prerequisitos

  • Un sistema de control de versiones con proteccion de ramas y registro de auditoria.
  • Una plataforma CI/CD como GitHub Actions, GitLab CI, Azure DevOps o Jenkins.
  • Una solucion de gestion de secretos para credenciales de pipeline.
  • Un proceso de revision y aprobacion de codigo antes de mergear.
  • Duenos por parte de platform engineering, seguridad y release management.

Solucion

Plantilla

1. Seguridad del Control de Codigo

ControlRequisitoVerificacion
Proteccion de ramasRevisiones requeridas antes de mergear a mainConfiguracion del repositorio
Commits firmadosRequerir commits verificados para cuentas privilegiadasConfiguracion de Git
Control de accesoAcceso de minimo privilegio a repositoriosRevision de RBAC
Registro de auditoriaTodos los pushes, merges y cambios de permisos registradosLogs de la plataforma
Dependencias fijadasLockfiles y versiones fijas para compilaciones reproduciblesArchivos del repositorio
Escaneo de secretosDeteccion automatizada de secretos en commitsPre-commit hooks + CI

2. Configuracion del Pipeline

ControlRequisitoVerificacion
Definiciones inmutables de pipelinePipelines almacenados como codigo y revisadosArchivos del repositorio
Sin secretos en codigoSecretos cargados desde vault, variables de CI u OIDCEscaneo de secretos
Validacion de entradasParametros de pipeline validados y saneadosRevision de codigo
Aislamiento de runners auto-hospedadosRunners de produccion aislados de runners de desarrolloConfiguracion de runners
Runners efimerosRunner nuevo por compilacion para reducir persistenciaConfiguracion de runners
Provenance del pipelineProvenance SLSA generado para artefactosHerramienta de attestacion

3. Gestion de Secretos

Tipo de SecretoAlmacenamientoRotacionAlcance
Credenciales cloudVault externo u OIDC90 diasPor ambiente
Tokens de registro de contenedoresVault o tokens de CI de corta duracion90 diasPor pipeline
Claves de firmaRespaldada por hardware o KMS180 diasCuentas de servicio limitadas
Claves APIVault o secret manager90 diasPermisos minimos requeridos
Contraseñas de base de datosSecretos dinamicos de Vault24 horasPor ejecucion de pipeline

4. Seguridad de la Compilacion

ControlRequisitoVerificacion
Escaneo de dependenciasTodas las dependencias escaneadas por CVEs conocidosScanner en CI
Analisis estaticoSAST ejecutado en cada pull requestJob de CI
Escaneo de imagenes de contenedoresImagen base y capas escaneadas antes de pushEscaneo de registro
Compilaciones reproduciblesMisma fuente produce mismo artefactoVerificacion de compilacion
Firma de artefactosTodos los artefactos firmados con identidad de compilacionVerificacion de firma
Generacion de SBOMBill of materials generado por compilacionSalida de CI

5. Seguridad del Despliegue

ControlRequisitoVerificacion
Puertas de despliegueAprobacion manual o automatizada antes de produccionReglas de pipeline
Separacion de ambientesCredenciales de produccion no disponibles en desarrolloAlcance de secretos
Plan de rollbackDisparador de rollback automatico ante fallaDefinicion de pipeline
Despliegues inmutablesArtefactos desplegados por referencia, no recompiladosLogs de despliegue
Deteccion de driftCambios no autorizados en produccion detectadosHerramienta de monitoreo
Pista de auditoriaQuien desplego que, cuando y por queLogs de despliegue

6. Respuesta a Incidentes

EscenarioRespuestaDueno
Secreto filtradoRotar secreto, revocar tokens, auditar usoEquipo de seguridad
Commit maliciosoRevertir, investigar, revocar credencialesEquipo de plataforma
Runner comprometidoTerminar runner, reconstruir, revisar logsEquipo de plataforma
Despliegue no autorizadoRollback, congelar pipeline, auditarRelease manager
Artefacto manipuladoBloquear despliegue, trazar provenanceEquipo de seguridad

Explicacion

La seguridad del pipeline es un subconjunto de la seguridad de la cadena de suministro. Al proteger la fuente, el proceso de compilacion y la ruta de despliegue, la organizacion reduce el riesgo de que codigo malicioso llegue a produccion. La plantilla mapea cada control a un metodo de verificacion, haciendola adecuada para auditorias y mejora continua.

Configuracion de Seguridad de GitHub Actions

name: Secure CI Pipeline
on:
  pull_request:
    branches: [main]
  push:
    branches: [main]

permissions:
  contents: read
  packages: write
  id-token: write

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789:role/ci-role
          aws-region: us-east-1
          # Sin claves estaticas - solo OIDC

      - name: Build and sign
        uses: sigstore/cosign-installer@v3
      - run: |
          cosign sign-blob --yes artifact.tar.gz

      - name: Generate SBOM
        uses: anchore/sbom-action@v0
        with:
          format: spdx-json
          output-file: sbom.spdx.json

      - name: Scan dependencies
        uses: github/codeql-action/init@v3
      - run: npm audit --audit-level=high
      - uses: github/codeql-action/analyze@v3

Ejemplo de Provenance SLSA

{
  "_type": "https://in-toto.io/Statement/v1",
  "subject": [
    {
      "name": "artifact.tar.gz",
      "digest": { "sha256": "abc123..." }
    }
  ],
  "predicateType": "https://slsa.dev/provenance/v1",
  "predicate": {
    "builder": { "id": "github-actions" },
    "buildType": "https://github.com/actions/runner",
    "invocation": {
      "configSource": {
        "uri": "git+https://github.com/org/repo",
        "digest": { "sha1": "commit-hash" }
      }
    },
    "materials": [
      { "uri": "git+https://github.com/org/repo", "digest": { "sha1": "commit-hash" } }
    ]
  }
}

Checklist de Auditoria de Seguridad del Pipeline

ControlVerificadoNotas
Sin secretos de larga duracion en CI
OIDC para autenticacion cloud
Actions fijadas a SHA
Permisos minimos por job
Proteccion de rama en main
Artefactos firmados verificados
SBOM generado por build
Escaneo de dependencias en pipeline
Runners aislados por entorno
Retencion de logs de auditoria > 90 dias

Variantes

  • Checklist de seguridad de GitHub Actions: Se enfoca en fijar actions, permisos de workflows y workflows reutilizables.
  • Plantilla de seguridad de GitLab CI: Incluye alcance de tokens de jobs de CI/CD, runners protegidos y pipelines de cumplimiento.
  • Plantilla de endurecimiento de Jenkins: Cubre gestion de plugins, aislamiento de agentes y sandboxing de Groovy.
  • Pipeline nativa de contenedores: Enfatiza firma de imagenes, escaneo de registro y admission de Kubernetes.
  • Pipeline de alta cumplimiento: Agrega SLSA Nivel 3, doble aprobacion y SBOMs firmados para entornos regulados.

Lo que funciona

  • Almacena las definiciones de pipeline como codigo y revisalas como codigo de aplicacion.
  • Utiliza credenciales de corta duracion y OIDC en lugar de secretos de larga duracion.
  • Escanea dependencias antes de mergear y antes de desplegar.
  • Firma artefactos y verifica firmas antes del despliegue.
  • Separa los ambientes de compilacion y produccion fisica o logicamente.
  • Requiere aprobacion humana para despliegues en produccion.
  • Genera y conserva SBOMs para cada release.
  • Monitorea la actividad del pipeline en busca de comportamiento inusual.

Errores Comunes

  • Almacenar secretos en variables de entorno o archivos de pipeline.
  • Usar actions de terceros sin fijarlas o revisarlas.
  • Permitir que cualquier rama despliegue a produccion.
  • Ejecutar cargas de trabajo de produccion y desarrollo en el mismo runner.
  • Omitir escaneos de seguridad para despliegues de hotfix.
  • No rotar credenciales de pipeline despues de un compromiso.
  • Confiar en artefactos sin verificar su firma.

Troubleshooting

  • Authentication bypass in tests: ensure test users cannot reach production endpoints.
  • False positives in scanning tools: tune rules against the risk profile. Distinguish between reachable vulnerabilities and theoretical issues.
  • Secrets appear in logs: Audit log sinks for sensitive patterns.
  • CSP breaks legitimate functionality: Iterate on allowed sources based on real violations.
  • Incident response stalls: run tabletop exercises.

Lectura Adicional

  • Documentación oficial: consulta la referencia actualizada del framework o herramienta utilizada.
  • Guías relacionadas: explora las guías de security y supply-chain para profundizar.
  • Patrones complementarios: revisa los patrones de diseño aplicables a tu stack tecnológico.
  • Postmortems públicos: estudia incidentes reales de equipos que enfrentaron problemas similares en producción.

Notas de Producción

  • Despliega gradualmente usando canary o blue-green para detectar regresiones temprano.
  • Configura alertas para errores, latencia p99 y tasa de fallos antes de habilitar en producción.
  • Documenta el rollback en el runbook; prueba el procedimiento en staging al menos una vez por trimestre.
  • Revisa logs estructurados con correlation IDs para trazar requests end-to-end en incidentes.

Puntos Clave

  • Aplica plantilla de seguridad de pipeline ci/cd cuando necesites una solución práctica para tu caso de uso.
  • Monitorea el rendimiento después de implementar; mide latencia, errores y uso de recursos antes y después.
  • Revisa la sección de Troubleshooting ante errores comunes; la mayoría tienen causa raíz documentada con solución.
  • Mantén dependencias actualizadas y ejecuta tests en CI para prevenir regresiones en producción.

Errores Comunes en Producción

  • Dejar campos requeridos vacíos o usar respuestas vagas de una palabra.
  • Llenar el documento una vez y nunca actualizarlo cuando cambia el alcance o las decisiones.
  • Guardar el documento donde el equipo no lo busque durante incidentes o revisiones.
  • No asignar un responsable, fecha límite o cadencia de revisión.
  • Copiar texto base sin eliminar secciones que no aplican.
  • Saltar el control de versiones, lo que impide rollback y responsabilidad.
  • No vincular el documento con decisiones relacionadas o acciones de seguimiento.
  • Evitar revisiones trimestrales que retirarían secciones obsoletas o sin uso.

Preguntas frecuentes

Cual es el riesgo mas grande en CI/CD?
El riesgo de alto impacto mas comun es el robo de credenciales de un runner o archivo de pipeline, lo que permite a un atacante acceder a produccion o manipular compilaciones.
Como balanceamos seguridad con despliegues rapidos?
Automatiza los controles de seguridad, utiliza escaneres rapidos y requiere aprobacion solo para produccion. El escaneo shift-left da retroalimentacion rapida sin bloquear el pipeline.
Que es la provenance SLSA?
SLSA es un framework para la seguridad de la cadena de suministro. La provenance registra como se construyo un artefacto, incluyendo repositorio fuente, comando de compilacion y dependencias,...
Como aseguramos los secretos en pipelines de CI/CD?
Usa un gestor de secretos dedicado (HashiCorp Vault, AWS Secrets Manager, GitHub Actions secrets). Nunca hardcodees secretos en archivos de pipeline o variables de entorno. Usa OIDC para...
Cual es la diferencia entre SAST, DAST y SCA?
SAST (Static Application Security Testing) analiza codigo fuente en busca de vulnerabilidades sin ejecutarlo. DAST (Dynamic Application Security Testing) prueba una aplicacion en ejecucion desde el...
Deberiamos usar runners auto-gestionados o gestionados por la nube?
Los runners gestionados por la nube (GitHub-hosted, GitLab SaaS) son efimeros y aislados por defecto, reduciendo la superficie de ataque. Los runners auto-gestionados son necesarios para acceso a red...
Como implementamos doble aprobacion para despliegues a produccion?
Configura tu pipeline para requerir aprobacion manual de dos miembros diferentes del equipo antes de desplegar a produccion. Usa reglas de proteccion de entorno en GitHub Actions o entornos...
Que es un SBOM y por que lo necesitamos?
Un SBOM (Software Bill of Materials) es un inventario legible por maquina de todos los componentes en un artefacto de software, incluyendo dependencias transitivas, versiones y licencias. Permite...
Que es cosign y como funciona?
Cosign es una herramienta del proyecto Sigstore para firmar y verificar imagenes de contenedores y blobs. Usa firma sin claves con tokens OIDC de tu proveedor de CI, eliminando la necesidad de...
Como manejamos secretos para runners auto-gestionados?
Usa runners efimeros que se destruyen despues de cada job. Inyecta secretos en tiempo de ejecucion desde un gestor de secretos (Vault, AWS Secrets Manager). Nunca almacenes secretos en el disco del...