Cuando se trabaja con una API Gateway en Amazon Web Services (AWS), normalmente no deseas que los servicios que tengas alojados en otros subservicios de AWS estén disponibles públicamente en Internet. Elastic Beanstalk genera por defecto un servicio público, que requerirá servicios adicionales de protección, como certificados de cliente o claves de servicio, protección a un ataque DoS, entre otros, pero si este servicio lo mantienes como privado podrás protegerlo mediante el acceso único de un API Gateway.
Probablemente el mejor enfoque es usar AWS Lambda, que son privados de forma predeterminada, pero este servicio no será tan configurable Elastic Beanstalk para poder correr tu propia configuración de backend, así que mantendremos los servicios dentro de una nube privada (una «VPC» en la terminología de Amazon) y brindar acceso a este servicio solo a través del API Gateway.
Esta guía pretende explicar los conceptos básicos de la configuración de un backend/servicio privado utilizando un Elastic Beanstalk (EBS) que reside dentro de una VPC. Los métodos de EBS estarán disponibles a través de API Gateway mediante un enlace VPC “VPC Link”.
1. Configurar Virtual Private Cloud (VPC) y una Subnet
Primero necesitarás configurar una nube privada virtual (VPC). Esta configuración es compleja y requiere conocimientos de red. Te comparto el siguiente vídeo donde se explica con mucho detalle la creación de tu propia red pública, privada, configuración de security groups por defecto y la configuración de un router y NAT para dar acceso a tu nueva VPC.
2. Configurar Elastic Beanstalk de forma privada
El segundo paso es configurar una aplicación Elastic Beanstalk (EBS). Una de las ventajas de usar EBS sobre instancias EC2 puras es que EBS viene con muchas funciones preconfiguradas, como auto escalado y actualizaciones continuas.
Empezaremos creando una aplicación EBS con la creación de un nuevo entorno ‘environment’. En realidad, el entorno es donde tiene lugar toda la configuración. Consulta la documentación de Elastic Beanstalk (EBS) para obtener más información sobre cómo funciona realmente EBS.
2.1. Configurar el entorno
Veamos paso por paso como configurar un nuevo entorno:
- Elige el entorno de servidor web “Web server environment”.
- Asigna un nombre a tu entorno y asigne un nombre de dominio
- Elige la plataforma que se adapte a tus necesidades, Go, Java, Node.js, etc.
- Escoge qué aplicación deseas desplegar. Puedes usar la aplicación de muestra “Sample application” o también puedes subir tu aplicación “Upload your code”.
- Configura el tipo de despliegue, en este caso tendrás que escoger la opción alta disponibilidad “High availability”. Esto nos dará la opción más adelante de configurar un balanceador de carga de red, muy importante que sea de red, ya que lo que pretendemos es que el API Gateway acceda por red a nuestra APP desplegada en EBS.
2.2. Configuración del acceso al servicio
La configuración del acceso al servicio te permitirá acceder a la configuración de los permisos y usuarios que generarán la infraestructura, es decir los servidores con EC2 y el balanceador de carga en red como comentamos anteriormente.
Para configurar el acceso al servicio deberás:
- A continuación tendrás que indicar los IAM asociados al despliegue de servidores por EBS, para ello tendrás que tener en cuenta disponer del “aws-elasticbeanstalk-service-role”. Para configurar el rol aws-elasticbeanstalk-ec2-role para Elastic Beanstalk, puedes seguir estos pasos:
- Navega hasta IAM: Ve al servicio IAM (Identidad y acceso administrado).
- Selecciona Roles: En el panel de navegación izquierdo.
- Buscar el rol: En la lista de roles, busca el rol aws-elasticbeanstalk-ec2-role o crealo.
- Editar permisos del rol: Selecciona el rol y haz clic en "Adjuntar políticas".
- Adjunta las políticas necesarias: Para que Elastic Beanstalk funcione correctamente, asegúrate de que el rol tenga al menos los permisos necesarios para acceder a los recursos requeridos, como S3, EC2, etc. Si por defecto no tiene permisos, debes asegurarte de asociar estos 3 permisos ( AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWebTier, AWSElasticBeanstalkWorkerTier).
- Revisa y aplica los cambios: Una vez que hayas adjuntado las políticas necesarias, revisa los cambios y haz clic en "Adjuntar políticas" para aplicarlos.
- Y también configurar el rol del servicio que gestionara el EBS “aws-elasticbeanstalk-service-role” en IAM.
- Navega hasta IAM: Ve al servicio IAM (Identidad y acceso administrado).
- Selecciona Roles: En el panel de navegación izquierdo.
- Buscar el rol: En la lista de roles, busca el rol aws-elasticbeanstalk-service-role o crealo.
- Editar permisos del rol: Selecciona el rol y haz clic en "Adjuntar políticas".
- Adjunta las políticas necesarias: Para que Elastic Beanstalk funcione correctamente, asegúrate de que el rol tenga al menos los permisos necesarios para acceder a los recursos requeridos, como S3, EC2, etc. Si por defecto no tiene permisos, debes asegurarte de asociar estos 5 permisos (AWSElasticBeanstalkEnhancedHealth, AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWebTier, AWSElasticBeanstalkWorkerTier).
- Revisa y aplica los cambios: Una vez que hayas adjuntado las políticas necesarias, revisa los cambios y haz clic en "Adjuntar políticas" para aplicarlos.
Una vez tengas todos los permisos creados, podrás seleccionarlos:
2.3. Configurar redes
Este punto es el más relevante para asegurar de que tu backend será privado y solo tendrá acceso de la red interna que hemos creado en el paso 1.
- Escoge el VPC que hemos creado en el paso 1.
- Selecciona de las subnets, únicamente aquellas que sean Privadas.
2.4. Configuración de red del balanceador de carga
Pasamos a configurar el “Load Balancer”, el resto de configuración referente a la instancia de servidor lo dejo a tu gusto, en este ejemplo lo dejamos por defecto. Veamos el detalle para configurar el balanceador de carga.
- Selecciona “Visibility” = “Internal”. Esto permitirá proteger la infraestructura en caso de no seleccionar correctamente la subnet.
- A continuación deberás seleccionar bajo que Subnet estará conectado el balanceador. Aquí deberás seleccionar también las Subnets Privadas para que únicamente acceda el API Gateway.
- Ahora llega la hora de seleccionar el tipo de balanceador, escoge el “Network load balancer”. El enlace VPC desde el API Gateway solo funcionará con balanceadores de carga de red.
Configura cualquier otro detalle que creas necesario para tu entorno de backend como variables de entorno etc y luego haz clic en "Crear entorno”.
Configurar API Gateway
Cree una API Gateway si aún no lo ha hecho.
- En el menú de la izquierda, selecciona VPC Link
- Asigna un nombre al enlace de VPC y seleccione el balanceador de carga que se creó desde el apartado anterior en EBS y ya puedes «Crear».
- Mientras esperas a que se cree la conexión, puedes configurar la API. Añade un nuevo método del tipo VPC Link.
- Selecciona también VPC Proxy Integration, el VPC Link ya creado y utiliza la URL del endpoint que tiene EBS.
Después de estos ajustes podrás desplegar los cambios de tu API Gateway de forma habitual y el VPC Link hará la petición en modo proxy reverse al backend EBS que tienes configurado de forma privada a través de la red Privada creada en el punto 1.
Recuerda añadir métodos de autenticación en tu API Gateway para añadir un factor de autenticación a tu API.
Conclusión
Proteger tu backend alojado en AWS Elastic Beanstalk (EBS) mediante AWS API Gateway ofrece una solución sólida para evitar que los servicios estén disponibles públicamente en Internet. Esta configuración garantiza la seguridad de tus recursos y reduce la exposición a posibles ataques, al tiempo que facilita el acceso controlado a través de API Gateway.
Al configurar Elastic Beanstalk de forma privada dentro de una Virtual Private Cloud (VPC), y luego conectándolo a API Gateway a través de un enlace VPC, estableces un entorno seguro donde tus servicios están protegidos y solo accesibles a través de la red interna definida en la VPC. Este enfoque ofrece una capa adicional de seguridad al mantener tus servicios detrás de una API Gateway, lo que te permite controlar y gestionar el acceso de manera más efectiva.
Referencias: