Gestión de imágenes de contenedor con Amazon ECR - Políticas de ciclo de vida y escaneo de imágenes
Presentamos patrones operativos para eliminar automáticamente imágenes antiguas con políticas de ciclo de vida en repositorios privados y detectar vulnerabilidades con escaneo de imágenes.
Fundamentos de ECR y gestión de repositorios
ECR es un registro administrado para imágenes de contenedor Docker y artefactos OCI, soportando hasta 42 GB de capas por imagen. Proporciona repositorios privados y repositorios públicos (ECR Public). Los repositorios privados controlan el acceso con políticas IAM, permitiendo configurar que solo roles IAM específicos puedan hacer push y pull de imágenes. Las políticas de repositorio también permiten controlar el pull desde otras cuentas de AWS. Las imágenes se cifran en reposo con AES-256, y también se pueden seleccionar claves administradas por el cliente de KMS (CMK). El uso de CMK permite la rotación automática de claves y la integración con registros de auditoría, aunque tenga en cuenta que las operaciones de pull generan llamadas adicionales a la API de KMS. Al habilitar la inmutabilidad de tags de imagen, se previene la sobreescritura con el mismo tag, garantizando la reproducibilidad del despliegue. Los nombres de repositorios pueden organizarse jerárquicamente usando prefijos (ej: team-a/app-frontend), y las políticas IAM pueden implementar control de acceso basado en prefijos.
Políticas de ciclo de vida y gestión de costos
Las políticas de ciclo de vida son reglas que limpian automáticamente las imágenes dentro de un repositorio. Se pueden definir reglas de retención de imágenes con tag (ejemplo: retener las 10 más recientes), período de retención de imágenes sin tag (ejemplo: eliminar las que tengan más de 7 días) y reglas basadas en prefijos de tag específicos. Las reglas pueden tener prioridades asignadas; cuando múltiples reglas entran en conflicto, prevalece la de mayor prioridad. En entornos donde se hace push frecuente con pipelines CI/CD, sin políticas de ciclo de vida los costos de almacenamiento crecen sin límite. Se recomienda retener 30 generaciones de imágenes de producción (prod-*) y solo 5 generaciones de imágenes de desarrollo (dev-*). La función de vista previa de políticas permite verificar qué imágenes se verán afectadas antes de la eliminación real. El almacenamiento de ECR se factura por GB por mes por región, por lo que la acumulación de imágenes innecesarias impacta directamente en los costos.
Escaneo de imágenes y replicación
El escaneo básico detecta vulnerabilidades de paquetes del SO con el motor Clair al hacer push. El escaneo mejorado se integra con Inspector y detecta vulnerabilidades no solo de paquetes del SO sino también de paquetes de lenguajes de programación (npm, pip, Maven). El escaneo mejorado se ejecuta continuamente, y cuando se publica un nuevo CVE, las imágenes existentes se re-escanean. Los resultados de escaneo se publican en EventBridge, permitiendo configuraciones que disparan notificaciones SNS o pipelines de remediación automática cuando se detectan vulnerabilidades Critical/High. La replicación entre regiones copia automáticamente imágenes a regiones especificadas, reduciendo el tiempo de pull en despliegues ECS/EKS multiregión. La replicación entre cuentas también está disponible, útil para arquitecturas que distribuyen imágenes desde un repositorio central a cuentas de carga de trabajo. La replicación puede limitarse a repositorios específicos mediante reglas de filtro. Si desea ampliar sus conocimientos en tecnología de contenedores, también puede consultar libros especializados en Amazon.
Patrones de integración con pipelines CI/CD
ECR sirve como el núcleo del flujo de build y deploy de imágenes en pipelines CI/CD. Una configuración común implica construir y hacer push de imágenes desde CodeBuild o GitHub Actions. Los tokens de autenticación se obtienen mediante la API GetAuthorizationToken y tienen una validez de 12 horas. Usar builds multi-etapa para mantener el tamaño final de la imagen pequeño es efectivo para reducir tiempos de pull y costos de almacenamiento. Como estrategia de caché, ECR soporta caché remoto, permitiendo las opciones --cache-to y --cache-from de BuildKit para almacenar capas intermedias en ECR y acelerar los builds. Configurar pull-through cache permite cachear los pulls de registros públicos como Docker Hub o GitHub Container Registry a través de ECR, evitando los límites de velocidad de registros externos. Para la estrategia de etiquetado de imágenes, se recomienda usar hashes de commits de Git o números de build de CI como tags, evitando la dependencia excesiva del tag latest.
Consideraciones de diseño y resolución de problemas
Hay varios puntos a considerar al operar ECR. El límite predeterminado es de 10,000 imágenes por repositorio. Al acercarse a este límite, revise las políticas de ciclo de vida o solicite un aumento del límite. Configurar endpoints de VPC (PrivateLink) para el acceso desde dentro de una VPC permite hacer pull y push de imágenes sin pasar por un gateway de internet, beneficiando tanto la seguridad como los costos de red. ECR requiere dos endpoints - ecr.api y ecr.dkr - más un endpoint gateway de S3 (ya que las capas de imagen se almacenan en S3). Si ocurre throttling de pull, implementar lógica de reintento y reducir el tamaño de pull compartiendo capas de imagen (usando imágenes base comunes) son contramedidas efectivas. Las imágenes multi-arquitectura (AMD64 y ARM64 coexistentes) se gestionan mediante listas de manifiestos, permitiendo usar el mismo URI de imagen en entornos mixtos con instancias Graviton y x86.
Resumen
ECR es un registro administrado que gestiona todo el ciclo de vida de las imágenes de contenedor. Optimiza automáticamente los costos de almacenamiento con políticas de ciclo de vida y detecta vulnerabilidades continuamente con escaneo de imágenes. La integración estrecha con pipelines CI/CD agiliza la distribución de imágenes desde el build hasta el despliegue, mientras que funciones como pull-through cache y endpoints de VPC resuelven desafíos operativos. La replicación entre regiones y entre cuentas permite la gestión centralizada de la distribución de imágenes de contenedor en entornos multiregión y multi-cuenta.