AWS Session Manager: cómo configurar el acceso a EC2

AWS Systems Manager Session Manager permite abrir una terminal interactiva en una instancia EC2 desde la consola o la AWS CLI. Para una sesión de shell normal, el agente de la instancia inicia una conexión HTTPS hacia Systems Manager: no necesitas abrir el puerto TCP 22 entrante ni asignar una IP pública si la instancia ya puede alcanzar los endpoints de AWS.

La conexión depende de dos identidades con funciones distintas: los permisos de la persona que inicia la sesión y los permisos de la instancia para registrarse y comunicarse con Systems Manager. Configurar uno no sustituye al otro.

Requisitos para conectar una instancia

Con endpoints de VPC, comprueba que la resolución DNS privada y el DNS de la VPC estén habilitados. El grupo de seguridad del endpoint debe permitir HTTPS entrante desde la instancia. Si restringiste la salida de la instancia, permite TCP 443 hacia el endpoint. La instancia inicia la conexión: para el shell nativo de Session Manager no hace falta una regla entrante para SSH en el grupo de seguridad ni en la ACL de red. Si vas a enviar registros a CloudWatch Logs o S3, también hacen falta permisos y conectividad hacia esos servicios.

Conectarse desde la consola o la AWS CLI

En la consola de EC2, selecciona la instancia, elige Connect y abre la pestaña Session Manager. También puedes iniciar la sesión desde Systems Manager, en Session Manager → Start session. El nodo debe aparecer administrado y en línea.

Para conectarte desde una terminal, instala la AWS CLI y el Session Manager plugin en tu computadora. Revisa las versiones con aws --version y session-manager-plugin --version. AWS indica que actualices el plugin a 1.2.764.0 o posterior y advierte que versiones anteriores dejarán de admitirse próximamente. Después usa credenciales de AWS con los permisos descritos arriba:

aws ssm start-session \
  --target i-0123456789abcdef0 \
  --region us-east-1 \
  --profile soporte

Reemplaza el ID, la región y el perfil por los de tu cuenta. Sin --document-name, AWS inicia el shell predeterminado de Session Manager. Consulta la referencia de aws ssm start-session para otras opciones.

Reenviar un puerto local a la instancia

El port forwarding permite alcanzar un servicio que escucha en la instancia mediante un puerto local. Por ejemplo, si una aplicación de prueba escucha en el puerto 8080 de la instancia, puedes abrir el puerto 18080 en tu computadora:

aws ssm start-session \
  --target i-0123456789abcdef0 \
  --document-name AWS-StartPortForwardingSession \
  --parameters '{"portNumber":["8080"],"localPortNumber":["18080"]}' \
  --region us-east-1 \
  --profile soporte

Mientras la sesión siga activa, abre http://localhost:18080 en tu navegador o cliente. El ejemplo supone que la aplicación ya está en ejecución en el puerto remoto 8080; iniciar la sesión no instala ni inicia esa aplicación. Al terminar, cierra la sesión con Ctrl+C. Para terminar una sesión que quedó activa, un administrador con permiso ssm:TerminateSession puede usar el campo SessionId devuelto por start-session:

aws ssm terminate-session \
  --session-id ID-DE-LA-SESION \
  --region us-east-1 \
  --profile soporte

Si no anotaste el ID, puedes consultarlo con aws ssm describe-sessions --state Active si tu identidad tiene permiso para ver esas sesiones.

Identidad del sistema y límites de auditoría

IAM determina quién puede iniciar la sesión y a qué nodo puede dirigirse. En el sistema operativo, sin embargo, SSM Agent crea la cuenta ssm-user y las sesiones usan sus credenciales administrativas de forma predeterminada. Revisa quién puede iniciar sesiones; si una shell administrativa no es apropiada, consulta cómo restringir los permisos administrativos de ssm-user y configura el usuario del sistema operativo según tu política.

CloudTrail puede registrar las llamadas de API para iniciar y terminar sesiones. Si habilitas las preferencias de Session Manager, los comandos y su salida de una sesión de shell también pueden guardarse en CloudWatch Logs o S3. Revisa cómo funciona el registro de actividad de Session Manager y qué actividad registra CloudTrail.

Session Manager no registra el contenido de las sesiones que usan port forwarding ni SSH. En esos casos funciona como un túnel; CloudTrail puede conservar metadatos de inicio y fin, pero los comandos o el tráfico que circuló no quedan auditados por el registro de contenido de sesión de CloudWatch Logs o S3. No presentes esos registros de metadatos como evidencia del contenido transmitido. En shells con registro habilitado, evita escribir secretos en texto visible porque los comandos y su salida pueden quedar guardados.

Errores frecuentes

Costos y cierre de una prueba

AWS no cobra un cargo adicional por usar Session Manager con instancias EC2. Eso no significa que toda la configuración sea gratuita:

Para un laboratorio, cierra la sesión cuando termines. Si creaste endpoints de VPC o destinos de registros solo para esa prueba, elimínalos únicamente después de confirmar que no los comparte otro sistema; los endpoints siguen generando cargos mientras existen. El calculador de precios de AWS permite estimar la configuración completa.

Recursos para seguir aprendiendo

El repositorio comunitario de CloudFormation para EC2 privadas con Systems Manager sirve para comparar una arquitectura con endpoints de VPC, pero no lo despliegues sin revisarlo. Su plantilla agrega ec2messages sin condición, aunque ese endpoint no está disponible en regiones lanzadas desde 2024; además, el README muestra un ejemplo de Windows que pasa una contraseña como parámetro de un comando. No copies ese ejemplo con credenciales reales y adapta la plantilla a la región, los permisos y los servicios que realmente necesitas. Nuestra guía de CloudFormation explica una plantilla acotada, validación y revisión de cambios antes de ejecutar una pila. Para una vista más amplia de controles de AWS, consulta también el checklist de seguridad.

Comunidades y eventos AWS en español

El directorio de comunidades AWS reúne grupos para encontrar actividades y conversar con otras personas. Para aprender con comunidades de seguridad AWS en español: