Una buena práctica es evitar que nuestro tráfico abandone la red de AWS, siempre que sea posible. Con VPC Endpoints podemos lograrlo.
Un Punto de conexión VPC le permite conectar de forma privada su VPC a los servicios de AWS compatibles y a servicios de punto de enlace de la VPC basados en AWS PrivateLink sin necesidad de una gateway de Internet, un dispositivo NAT, una conexión de VPN o una conexión de AWS Direct Connect. Las instancias de su VPC no necesitan direcciones IP públicas para comunicarse con los recursos del servicio. El tráfico entre su VPC y el servicio no sale de la red de Amazon.
VPC Endpoints permite comunicación entre instancias en nuestra VPC y servicios de AWS sin riesgo de disponibilidad o límites de ancho de banda.
Tenemos dos tipos, interface endpoints y gateway endpoints. Debemos crear el tipo de VPC endpoint requerido según el servicio.
Los VPC endpoints son dispositivos virtuales, escalados horizontalmente, redundantes y en alta disponibilidad.
Un interface endpoint es una Elastic Network Interface con una IP privada del rango de direcciones de tu subnet que sirve como punto de entrada para el tráfido destinado al servicio soportado.
Un gateway endpoint es un gateway que especificas como objetivo para añadir una ruta en tu tabla de rutas para el tráfico destinado al servicio de AWS deseado. Actualmente:
- Amazon S3
- DynamoDB
También es una opción para las subnets privadas que hasta hace poco necesitaban de un NAT Gateway en la subnet pública para poder llegar a S3. Nos podemos ahorrar un buen puñador de dólares eliminando el NAT Gateway y implementando VPC Endpoints.
Desplegando VPC Endpoint con Terraform
Hacerlo por consola es un poco tedioso. Con Terraform es bastante más fácil. Necesitamos solo saber en que tabla de rutas queremos hacer la asociación.
resource "aws_vpc_endpoint" "s3" {
vpc_id = "${module.vpc.vpc_id}"
service_name = "com.amazonaws.eu-west-1.s3"
tags = {
Terraform = "true"
Environment = "prod"
Project = "rubendobwp"
}
}
resource "aws_vpc_endpoint_route_table_association" "route_table_vpc_endpoint" {
route_table_id = "${element(module.vpc.public_route_table_ids,0)}"
vpc_endpoint_id = "${aws_vpc_endpoint.s3.id}"
}
terraform apply
aws_vpc_endpoint.s3: Modifying... (ID: vpce-042e75bf4a9271755)
tags.%: "0" => "3"
tags.Environment: "" => "prod"
tags.Project: "" => "rubendobwp"
tags.Terraform: "" => "true"
aws_vpc_endpoint.s3: Modifications complete after 7s (ID: vpce-042e75bf4a9271755)
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
Limitaciones
- VPC endpoints solo soporta IPv4
- Endpoints solo soportados dentro de la misma región.No funciona entre VPC y servicios de regiones diferentes.
Interface Endpoints
- Para cada punto de enlace de interfaz solo puede elegir una subred por cada zona de disponibilidad.
- De forma predeterminada, cada punto de enlace de interfaz admite un ancho de banda de hasta 10 Gbps por cada zona de disponibilidad y se puede aumentar hasta 40 Gbps.
- Los puntos de enlace solo son compatibles con el tráfico IPv4.
Gateway Endpoints
- Las conexiones de punto de conexión no se pueden ampliar más allá de la VPC. Los recursos del otro lado de una conexión de VPN, una interconexión de VPC, transit gateway, una conexión de AWS Direct Connect o una conexión de ClassicLink en su VPC no pueden utilizar el punto de enlace para comunicarse con los recursos del servicio del punto de enlace.