Una revisión actualizada de las distintas formas de conectarte de forma segura a instancias EC2 privadas
Acceder a instancias EC2 privadas es una necesidad recurrente para ciertos usuarios dentro de las organizaciones, normalmente administradores y algunos desarrolladores autorizados. Tradicionalmente, los usuarios de AWS han recurrido a bastiones (jump boxes), VPNs (Virtual Private Connections) o AWS Direct Connect para resolver esta necesidad. Si bien AWS EC2 ofrece desde hace tiempo alternativas modernas a esas soluciones "de la vieja escuela", una mejora reciente introducida en junio de 2023 a uno de estos enfoques amerita una actualización. Este artículo explica las opciones alternativas para conectarte a instancias EC2 privadas, sus ventajas y desventajas, y cómo usarlas.
Nota: en este contexto, una instancia privada es una instancia EC2 sin dirección IPv4 pública o que no se lanza en una subred VPC pública. Por definición, una subred pública es cualquier subred cuya tabla de rutas dirige el tráfico hacia Internet a través de un Internet Gateway.
Resumen de la conexión SSH "tradicional".
Existen dos formas "tradicionales" típicas de conectarte de forma segura a una instancia EC2 privada: 1) Establecer un túnel cifrado seguro mediante una Client-VPN o una Site-to-Site VPN (incluyamos también AWS Direct Connect en este grupo, aunque técnicamente no sea un túnel) y 2) usar una instancia EC2 pública como "jump box" (comúnmente conocida como host "bastión") para crear una nueva conexión hacia la instancia privada. Ambas opciones implican un costo y, en algunos casos, un trabajo de configuración nada trivial. Veámoslas en detalle:
- AWS Client-VPN, AWS Site-to-Site VPN (o soluciones VPN similares) o AWS Direct Connect
Este enfoque ha sido (y sigue siendo) una forma popular de habilitar la conectividad desde cualquier red hacia una red privada estableciendo un túnel cifrado (en el caso de las VPN) o un enlace privado dedicado (en el caso de AWS Direct Connect). Sin embargo, tiene un costo asociado, ya que necesitarás al menos una instancia o un servicio administrado como punto de terminación de la conexión VPN y, en algunos casos, costos por tiempo de conexión y un grado variable de complejidad.
- Jump box o Bastión
Una opción aún más popular, con menor costo y complejidad que configurar VPN/Direct Connect, consiste en usar una instancia EC2 pública que recibe la conexión del cliente y luego crea una nueva conexión hacia la instancia EC2 privada (ver el diagrama abajo). Puedes usar esta opción para SSH (normalmente con SSH Agent Forwarding) y RDP (con Remote Desktop Gateway). La desventaja es que (además de pagar por la instancia bastión) aumentas tu superficie de ataque al exponer públicamente esa instancia. Por supuesto, debes implementar todas las medidas de seguridad disponibles para proteger tus hosts bastión: acceso controlado a las credenciales de la máquina (es decir, las claves privadas), restricciones de red mediante security groups y Network Access Control Lists (NACL), y parchado frecuente del sistema operativo. Todo esto representa una carga operativa para tu infraestructura.

Conexión basada en bastión
Si bien las opciones anteriores son técnicamente válidas, AWS ofrece dos métodos modernos, más manejables y con mejor relación costo-beneficio para brindar el mismo acceso al gestionar tus instancias privadas. Veámoslos.
MÉTODO DE ACCESO 1: Session Manager te permite prescindir de SSH por completo (si así lo prefieres).
AWS Session Manager, presentado en 2018, es una funcionalidad de AWS Systems Manager que te permite gestionar de forma interactiva tus instancias EC2, dispositivos edge, servidores on-premise y máquinas virtuales (VMs).
Al usar Session Manager, no se requiere SSH ni RDP (no tienen que estar instalados, configurados ni en ejecución) en la instancia EC2 privada a la que te conectas. Aun así, también puedes usar los protocolos SSH o RDP para conectarte a la instancia EC2 privada a través de Session Manager (ver más abajo).
Configuración de Session Manager:
- La instancia EC2 privada debe ejecutar el agente de Systems Manager, que viene preinstalado en varias AMIs, aunque también puedes instalarlo manualmente (y no solo en instancias EC2).
- La subred donde se conecta la instancia EC2 privada de destino debe tener conectividad directa o indirecta a Internet mediante un Internet Gateway o un NAT Gateway. Como alternativa, puedes configurar VPC endpoints para Session Manager y gestionar instancias EC2 privadas sin acceso saliente a Internet. Veamos estas 2 opciones:
- Opción de configuración de red 1: si ya cuentas con un NAT Gateway en una subred pública (y no te importa pagar por el tráfico adicional del agente de Systems Manager procesado por el NAT Gateway), el siguiente diagrama muestra que el agente de Session Manager necesita conectividad saliente hacia los endpoints de Session Manager para poder iniciar sesiones de cliente.

Session Manager con NAT Gateway
- Opción de configuración de red 2: si prefieres no usar Internet Gateway ni NAT Gateway, necesitas un VPC Endpoint por cada servicio: Systems Manager, Session Manager Message Gateway Service y Message Delivery Service. Para más detalles, consulta esto y esto. Ten en cuenta que los VPC Endpoints tienen sus propios Security Groups (y Resource Policies) que podemos aprovechar para sumar control de acceso por red e identidad.

Session Manager con VPC Endpoints
Uso de Session Manager:
- Puedes usar la AWS Management Console o la AWS Command Line Interface (AWS CLI) para iniciar sesiones hacia los nodos a los que tu administrador de sistemas te haya otorgado acceso mediante políticas de AWS Identity and Access Management (IAM). Si prefieres usar la AWS CLI, primero deberás instalar el plugin de Session Manager para la AWS CLI.
- Cuentas con control de acceso centralizado a las instancias mediante políticas IAM, tanto en la instancia de destino (el rol que asignas a la instancia necesita permisos para que el agente de Systems Manager interactúe con las APIs de Systems Manager/Session Manager) como en la identidad que intenta acceder a la instancia EC2 (el usuario o rol IAM necesita permisos para iniciar una conexión de Session Manager y acceder a la instancia).
- Puedes otorgar permisos de instancia a nivel de cuenta usando un rol de AWS Identity and Access Management (IAM) o a nivel de instancia mediante un instance profile. Si tu caso de uso lo permite, AWS recomienda otorgar el acceso a nivel de cuenta usando la Default Host Management Configuration.
- También puedes seguir usando los protocolos SSH o RDP (en ese caso, necesitas un archivo de credenciales en el cliente).
- Incluso puedes conectarte de forma segura a una instancia de base de datos Amazon RDS o Amazon EC2 con tu GUI preferida usando port forwarding y un "bastión" EC2 en una subred privada.
Otras consideraciones sobre Session Manager:
- Session Manager admite capacidades de logging y auditoría. Puedes usar AWS CloudTrail y Amazon CloudWatch Logs (y, opcionalmente, también un bucket de S3) para mantener un registro de toda la actividad de las sesiones. El logging no está disponible en sesiones de Session Manager que se conectan mediante port forwarding o SSH. Esto se debe a que SSH cifra todos los datos de la sesión, y Session Manager solo funciona como túnel para las conexiones SSH.
- No hay costo adicional por acceder a instancias Amazon EC2 con Session Manager. Aplican los cargos estándar por transferencia de datos. Sin embargo, usar Session Manager para acceder de forma interactiva a instancias on-premise sí tiene un costo.
MÉTODO DE ACCESO 2: EC2 Instance Connect Endpoint es la forma más nueva de conectarte por SSH/RDP a una máquina.
EC2 Instance Connect Endpoint te permite conectarte a una instancia mediante SSH o RDP usando SSH basado en claves efímeras, sin necesidad de que la instancia tenga una dirección IPv4 pública. Antes de junio de 2023, EC2 Instance Connect ofrecía una funcionalidad similar, pero solo permitía el acceso a instancias EC2 públicas (esa opción sigue disponible para ese tipo de máquinas). EC2 Instance Connect se presentó en 2019.
Configuración de EC2 Instance Connect Endpoint:
- No se requiere ningún agente en la instancia de destino. Este enfoque permite acceder a instancias que pueden no soportar agentes, como appliances de terceros.
- No hace falta tener conectividad directa o indirecta a Internet mediante Internet Gateway o NAT Gateway. Sin embargo, debes configurar un endpoint en una subred dentro de la VPC que contiene la instancia de destino. Al momento de escribir este artículo (noviembre de 2023), solo puedes crear un EC2 Instance Connect Endpoint por VPC (ver Quotas). El endpoint tarda unos minutos en quedar disponible.

EC2 Instance Connect Endpoint
Uso de EC2 Instance Connect Endpoint:
- Puedes usar la AWS Management Console, tu propia clave y cliente SSH o la AWS Command Line Interface ( AWS CLI) para conectarte a tus nodos privados. Debes abrir un túnel con la AWS CLI antes de iniciar una conexión con un cliente RDP.
- Si quieres, puedes usar tus propias claves SSH (en ese caso, necesitas un archivo de credenciales en el cliente). Para crear una conexión RDP con el usuario administrador por defecto, necesitarás la clave privada del Key Pair predeterminado asociado a la EC2 para descifrar la contraseña inicial del administrador, igual que cuando te conectas a instancias Windows públicas.
- EC2 Instance Connect Endpoint ofrece control de acceso centralizado a las instancias combinando controles basados en identidad ( permisos IAM asignados al usuario o rol IAM que inicia la conexión) y controles basados en red ( Security Groups aplicados al endpoint y a la instancia de destino). Puedes pedirle al EC2 Instance Connect Endpoint que conserve la dirección IP del cliente. Esto puede afectar la forma en que configuras tus Security Groups y Network Access Control Lists (NACLs).
Otras consideraciones sobre EC2 Instance Connect Endpoint:
- Utiliza credenciales temporales, así que aunque una clave privada se vea comprometida, no podrá usarse más allá del periodo de validez de las credenciales.
- Puedes registrar las operaciones sobre los recursos y auditar las conexiones establecidas a través de EC2 Instance Connect Endpoint con los logs de AWS CloudTrail. A diferencia de Session Manager, el registro de la actividad del usuario debe gestionarse a nivel del sistema operativo de la instancia de destino.
- Hay algunas limitaciones que conviene tener presentes. Por destacar un par: solo se admiten los puertos 22 y 3389, y EC2 Instance Connect Endpoint no soporta conexiones a una instancia mediante direcciones IPv6.
- No hay costo adicional por usar EC2 Instance Connect Endpoints. Aplican los cargos estándar por transferencia de datos.
Conclusión
En este artículo expuse cuatro métodos para conectarte de forma segura a instancias EC2 privadas en AWS.
Los métodos tradicionales son: 1) configurar AWS Client-VPN, Site-to-Site VPN o AWS Direct Connect (que implican establecer túneles cifrados o enlaces dedicados, pero traen complejidad y costo) y 2) usar una instancia EC2 pública como "jump box" (económica, pero que aumenta la superficie de ataque).
Luego, el artículo presenta dos enfoques modernos, más sencillos y de menor costo:
- Session Manager: una funcionalidad de AWS Systems Manager que permite gestionar de forma interactiva instancias EC2 sin necesidad de SSH ni RDP (aunque puedes usarlos opcionalmente) en la instancia privada. Utiliza el agente de Systems Manager, requiere que la subred de destino tenga conectividad saliente a Internet (mediante un NAT Gateway o un VPC Interface Endpoint) y ofrece control de acceso centralizado mediante políticas IAM.
- EC2 Instance Connect Endpoint: habilita el acceso por SSH o RDP a instancias sin direcciones IPv4 públicas. No requiere agente en la instancia de destino ni conectividad directa a Internet (basta con asociar el endpoint a una subred dentro de la VPC). El control de acceso se gestiona mediante permisos IAM y Security Groups.
Tanto Session Manager como EC2 Instance Connect Endpoint ofrecen capacidades de auditoría (Session Manager permite además el registro opcional de la actividad de las sesiones) y no generan cargos adicionales por acceder a instancias Amazon EC2, salvo los cargos estándar por transferencia de datos.
Te animo a usar estas opciones de conexión mejoradas desde ya, ya que también te pueden ayudar a mitigar el impacto de los nuevos precios para direcciones IPv4 públicas que AWS anunció para el 1 de febrero de 2024. Si necesitas ayuda, nuestros Customer Reliability Engineers (CRE) y Technical Account Managers (TAM) en DoiT estarán encantados de apoyarte, así que no dudes en contactarnos.