Blog de Amazon Web Services (AWS)

Asegurando tu postura de contenedores usando VPC endpoints

Los clientes están adoptando rápidamente el uso de contenedores como base tecnológica de su estrategia de microservicios y AWS ha trabajado duro para ser el mejor lugar para ejecutarlos.

Con diferentes schedulers, como Amazon Elastic Container Service (Amazon ECS) o Amazon Elastic Kubernetes Service (Amazon EKS), ejecutar contenedores de forma administada en la nube es muy sencillo. Y si utiliza AWS Fargate, nuestra solución sin clusters que administrar, solo los recursos de contendores necesarios para ejecutar su microservicio, la sencillez es aún mayor.

Tener un lugar para guardar de forma segura sus imágenes de contenedores es un aspecto crucial para el ciclo de desarrollo de contenedores, y es por eso que AWS también cuenta con un servicio de repositorio para ellas llamado Amazon Elastic Container Registry (Amazon ECR). Así es posible desplegar de forma muy rápida una imagen de un contenedor desde Amazon ECR hacia Amazon ECS o Amazon EKS.

Muchos clientes también tienen la necesidad de ejecutar sus contenedores dentro de VPCs sin acceso a internet y aquí es donde las cosas se ponen interesantes.

Para que Amazon ECS o Amazon EKS puedan jalar una imagen desde el servicio de ECR, es necesario conectarse al endpoint público de este último y, con una VPC sin un internet gateway (IGW) o un Nat Gateway (NAT GW) configurado, esto no es posible.

Así que la pregunta es: ¿Cómo puedes desplegar tus contenedores desde Amazon ECR hacia Amazon ECS o Amazon EKS sin salir a internet?

Aquí explicaremos cómo una conexión privada es posible usando VPC Endpoints.

Un VPC endpoint le permite conectar de forma privada su VPC hacia servicios de AWS compatibles, y a endpoints basados en PrivateLink, sin necesidad de un gateway de Internet, un NAT gateway, una conexión VPN o una conexión de AWS Direct Connect. Las instancias de su VPC no necesitarán direcciones IP públicas para comunicarse con otros recursos de AWS. El tráfico entre su VPC y el servicio necesario nunca deja la red de Amazon.

Los VPC endpoints son dispositivos virtuales. Son componentes de la VPC, redundantes y altamente disponibles que permiten comunicación privada entre su VPC y los servicios de AWS, sin que ello conlleve riesgos de disponibilidad, ni imponga restricciones de ancho de banda en el tráfico de red.

Entonces, ¿tener un VPC endpoint resuelve las cosas?… ¡Exacto!

Estos son los pasos que seguí para que mi cluster de Amazon ECS/Fargate pudiera jalar imágenes de un repositorio de Amazon ECR en la misma región, sin necesitar de configurar un IGW.

En la misma VPC donde tengo mi Cluster de ECS, creé tres VPC endpoints diferentes. Note el nombre de los servicios (Name) que conecté y el tipo de endpoint (Endpoint Type) para cada VPC endpoint:

A continuación describo los pasos a seguir para crear cada uno de ellos y lograr esta conectividad privada:

Vaya a la consola VPC, después a Endpoints y después haga clic en “Crear endpoint”. Después de esto, busque el endpoint para conectarse a Amazon S3, dado que Amazon ECR utiliza S3 para guardar las imágenes de docker:

com.amazonaws.<<region>>.s3

Notas:

  • Seleccione el VPC que su Cluster de ECS utiliza
  • Seleccione la o las tablas de ruteo que sus tasks de ECS usarán

  • Deje la política por defecto y de clic en siguiente:

Repita los pasos para crear los otros dos VPC Endpoints:

Endpoint para conectarse a CloudWatch Logs:

com.amazonaws.<<region>>.logs

Endpoint para conectarse a Amazon ECR:

com.amazonaws.<<region>>.ecr.dkr

Es importante resaltar que no es necesario hacer cambios en el Cluster de ECS o en el Task Definition. Tampoco en el repositorio de Amazon ECR.

Cuando se despliegue un contenedor a este cluster, será descargado del repositorio de forma privada, sin pasar por internet:

Aquí se pueden observar los detalles de red que el clúster de Amazon ECS utiliza:

VPC:

Subredes:

Tabla de ruteo y asociaciones a subredes:

Rutas: Ahora que se creó el VPC endpoint hacia Amazon S3, se puede observar que una ruta por defecto es agregada a la tabla de ruteo:

Más información:
https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html
https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html
https://docs.aws.amazon.com/AWSGettingStartedContinuousDeliveryPipeline/latest/GettingStarted/ECS_CD_Pipeline.html


Autor

Jesús Humberto Contreras Rancurello

Arquitecto de Soluciones, AWS México