Saltar al contenido
aprendeaws.dev

Módulo 10 · Operación y automatización/Lección 66

Pipelines entre cuentas y DevSecOps

Construir una vez y promover el mismo artefacto de desarrollo a producción, con seguridad en cada etapa.

Al terminar podrás

  • →Diseñar un pipeline que despliega en varias cuentas con roles
  • →Integrar escaneo de vulnerabilidades y firma de artefactos
  • →Elegir una estrategia de despliegue con reversión automática

Un pipeline dentro de una sola cuenta funciona hasta que alguien con acceso a desarrollo borra, sin querer, algo de producción. La práctica recomendada es separar ambientes en cuentas distintas. El pipeline entonces tiene que cruzar fronteras de cuenta, y cada cruce es un punto que hay que asegurar.

Una cuenta por etapa

CuentaPara qué sirve
Tooling o CI/CDVive el pipeline, los artefactos y el registro de imágenesNo corre cargas de trabajo
DesarrolloPruebas rápidas; los equipos tienen permisos amplios
Staging o preproducciónCopia fiel de producción para pruebas de integración y carga
ProducciónCasi nadie entra a mano; los cambios llegan solo por el pipeline

Estas cuentas viven en OU distintas de AWS Organizations, con SCP más estrictas para producción. La cuenta de tooling es la única con permiso para desplegar en las demás.

Construir una vez, promover el mismo artefacto

El artefacto (una imagen de contenedor, un zip de Lambda, una plantilla sintetizada) se construye una sola vez. Las etapas siguientes despliegan ese mismo archivo. Si recompilas en cada ambiente, lo que llega a producción no es lo que probaste: puede cambiar una dependencia, el compilador o una variable.

  • Identifica las imágenes por su digest (sha256:...), no por una etiqueta como latest, que puede moverse.
  • Lo que cambia por ambiente (URL de la base de datos, tamaño de instancias) va fuera del artefacto: en Parameter Store, AppConfig o parámetros de la plantilla.

Cruzar cuentas con roles, sin llaves

CodePipeline vive en la cuenta de tooling y despliega en otra cuenta asumiendo un rol allí:

  1. 1

    Llave de KMS administrada por el cliente

    El bucket de artefactos se cifra con una llave de KMS propia, cuya política permite usarla a las cuentas destino. La llave administrada por AWS para S3 no sirve: no se puede compartir con otra cuenta.
  2. 2

    Política del bucket

    El bucket de artefactos permite leer (y escribir, si hace falta) a las cuentas destino.
  3. 3

    Rol en la cuenta destino

    Un rol cuya política de confianza acepta solo al rol de servicio de CodePipeline de tooling, con permisos para desplegar ahí.
  4. 4

    Acción con roleArn

    Cada acción de despliegue indica el ARN de ese rol. CodePipeline lo asume y opera dentro de la otra cuenta.

Los pipelines de tipo V2 agregan lo que más se usa en este esquema: disparadores filtrados por rama, etiqueta de Git, ruta de archivos o pull request; variables a nivel de pipeline que pasas al iniciar una ejecución; modos de ejecución QUEUED, SUPERSEDED y PARALLEL; condiciones por etapa y reversión de una etapa a la última ejecución exitosa. CodeBuild compila, prueba y escanea dentro de la cuenta de tooling.

Muchos equipos usan GitHub Actions en lugar de CodePipeline. La regla es la misma: nada de llaves de acceso guardadas como secretos del repositorio. GitHub se registra en IAM como proveedor OIDC y cada ejecución recibe credenciales temporales de un rol, que solo acepta un repositorio y un ambiente concretos:

{
  "Effect": "Allow",
  "Principal": {
    "Federated": "arn:aws:iam::111122223333:oidc-provider/token.actions.githubusercontent.com"
  },
  "Action": "sts:AssumeRoleWithWebIdentity",
  "Condition": {
    "StringEquals": {
      "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
      "token.actions.githubusercontent.com:sub": "repo:mi-org/tienda:environment:produccion"
    }
  }
}

Seguridad en cada estación

DevSecOps significa que la seguridad es una estación más de la línea, automática, y no una revisión al final. Lo típico en AWS:

  • Amazon Inspector

    El inspector de calidad

    Code Security escanea el repositorio en GitHub o GitLab: código propio (SAST), dependencias (SCA) e IaC. También escanea imágenes en ECR, funciones Lambda e instancias EC2, y exporta SBOM en CycloneDX o SPDX.
  • Amazon ECR

    La bodega que revisa lo que guarda

    Escaneo básico: vulnerabilidades del sistema operativo, al subir la imagen o a mano. Escaneo mejorado: delega en Inspector, suma paquetes de lenguajes y reescanea solo cuando aparecen CVE nuevos.
  • AWS Signer

    El sello de la caja

    Firma imágenes de contenedor (con Notation o con la firma administrada de ECR al subir la imagen) y código de Lambda. Lambda puede rechazar código sin firma válida.
  • AWS KMS

    El candado del camión

    Cifra artefactos y secretos del pipeline. Su política decide qué cuentas pueden descifrar.
CriterioEscaneo básico de ECREscaneo mejorado
Qué detectaVulnerabilidades del sistema operativoSistema operativo y paquetes de lenguajes de programación
CuándoAl subir la imagen o a manoAl subir y de forma continua
MotorTecnología propia de AWS con la base de CVEAmazon Inspector, con eventos a EventBridge

La firma cierra el círculo: el pipeline firma la imagen después de escanearla y el clúster solo acepta imágenes firmadas. Con Amazon EKS, la verificación se hace con un controlador de admisión; con Lambda, con una configuración de firma de código en modo Enforce. Para lo que pasa después del despliegue, mira detección de amenazas.

Desplegar con reversión automática

Las estrategias son las de despliegue continuo: en el lugar, azul/verde, canario y lineal. A escala, lo que importa es que la reversión no dependa de una persona:

  • CodeDeploy: asocias alarmas de CloudWatch al grupo de despliegue y activas la reversión automática por alarma. Para Lambda y ECS hay configuraciones canario y lineal predefinidas, como CodeDeployDefault.LambdaCanary10Percent5Minutes.
  • Amazon ECS: desde 2025 tiene azul/verde, lineal y canario integrados, sin CodeDeploy, con reversión por alarma.
  • CodePipeline V2: una condición de etapa puede revisar alarmas y revertir la etapa si fallan.
  • Aprobación manual antes de producción: una acción de aprobación avisa por SNS y espera. Úsala para decisiones de negocio, no para reemplazar pruebas automáticas.

Quiz

Pon a prueba lo que aprendiste

0 de 5 correctas · 5 sin responder

  1. 1.Un pipeline en la cuenta de tooling falla al desplegar en la cuenta de producción con AccessDenied al leer el artefacto. El bucket usa la llave aws/s3. ¿Qué corriges?

  2. 2.Un equipo usa GitHub Actions y guarda una llave de acceso de IAM como secreto del repositorio para desplegar. Seguridad pide eliminar credenciales de larga duración. ¿Qué propones?

  3. 3.Quieres que las imágenes en ECR se revisen también por vulnerabilidades en paquetes de Python y Java, y que se reanalicen cuando aparezca un CVE nuevo. ¿Qué activas?

  4. 4.Una función Lambda de pagos solo debe aceptar código que salió del pipeline oficial. ¿Qué usas?

  5. 5.Un despliegue canario de ECS debe volver solo a la versión anterior si sube la tasa de errores 5xx. ¿Qué configuras?