Session Manager: Conectarse por SSH a Instancias EC2 de Manera Segura

AWS Systems Manager es un servicio que te ayuda a administrar flotas de instancias EC2. Session Manager es una capacidad de Systems Manager, que te permite conectarte a través de SSH a instancias EC2 sin necesidad de claves SSH.

Una vez configurado, puedes usar Session Manager para conectarte por SSH a una instancia EC2 con solo dos clicks, directamente desde la consola de AWS EC2 y sin claves SSH. También puedes usarlo directamente desde tu interfaz de línea de comandos con AWS CLI.

Características de Session Manager

La función de Session Manager es simple: permite a los usuarios de IAM conectarse por SSH a instancias EC2. Viene con varias características para ayudarte a administrar quién puede usarlo y cómo:

Limitar quién tiene acceso a qué instancias

Los permisos para usar Session Manager son permisos de IAM asociados con Usuarios o Roles de IAM. Esto te permite crear políticas que otorguen el permiso para iniciar una sesión de Session Manager solo para ciertos recursos, por ejemplo instancias EC2 con la etiqueta Development. Luego puedes asociar estas políticas de IAM con los Usuarios o Roles de IAM correspondientes, para otorgar solo a ciertas personas la capacidad de usar Session Manager, y solo con los recursos especificados (instancias EC2).

También puedes incluir restricciones adicionales en la Política de IAM, como que la dirección IP de origen de la solicitud esté en un cierto rango, o que el Usuario de IAM se haya autenticado con MFA.

Monitorear y alertar sobre el inicio de sesión

Cada vez que Session Manager inicia una nueva sesión, se dispara un evento, que se envía automáticamente a EventBridge y se registra en CloudTrail. Puedes usar el historial de eventos de CloudTrail para ver quién inició una sesión, cuándo y en qué recurso.

También puedes crear una regla en EventBridge para enviar eventos de inicio de sesión a un tema de SNS, que a su vez puede notificarte por correo electrónico cuando se inicie una sesión. Si no has configurado Organizations y estás ejecutando un entorno de producción en la misma cuenta que otros entornos, podrías filtrar el evento según a qué instancia se esté accediendo por SSH.

Registrar cada comando y salida utilizados en la sesión

Session Manager se puede conectar a CloudWatch Logs, y puede enviar registros de toda la sesión cuando se cierra, o transmitir continuamente registros de sesión en tiempo real. Esto se puede usar para revisión posterior y propósitos de archivo, o puedes escanearlos en tiempo real para detectar ciertos comandos ejecutados en tus instancias EC2.

Usando CloudWatch Metrics, puedes generar métricas sobre cuántas veces se ejecutan algunos comandos. Con CloudWatch Alerts puedes recibir alertas por correo electrónico si la ejecución de algún comando excede un umbral, o incluso desencadenar respuestas automatizadas como finalizar una sesión y eliminar los permisos de un usuario para usar Session Manager.

Session Manager también te permite ver cada sesión iniciada en tus instancias EC2 durante los últimos 30 días, incluido el usuario que la inició y la marca de tiempo de cuándo sucedió.

Limitar los comandos que se pueden usar en la sesión SSH

De forma predeterminada, Session Manager permite a los usuarios usar cualquier comando. Sin embargo, puedes limitar los comandos que los usuarios pueden ejecutar usando Session Manager. Estas limitaciones son por Usuario de IAM que tiene acceso a Session Manager, por lo que podrías hacer que algunas personas puedan ejecutar un comando como sudo su, y hacer que otras no puedan ejecutar el mismo comando en las mismas instancias.

Reenviar una conexión a una base de datos o host remoto

Session Manager te permite iniciar una conexión SSH que salta a través de una instancia administrada por Session Manager y se reenvía a otra instancia o base de datos. Esto te permite crear jump hosts (también conocidos como hosts bastión) que son administrados por Session Manager, y que usas para conectarte a otro destino, como una instancia de base de datos sin una dirección IP pública, pero a la que se puede acceder desde el host de salto.

El destino no necesita ser administrado por Session Manager, solo necesita ser accesible desde la instancia a la que te estás conectando. Puedes usar esto para conexiones SSH, conexiones de base de datos o cualquier cosa que se pueda hacer desde la instancia administrada por Session Manager.

Beneficios de usar Session Manager en lugar de claves SSH

Estos son los beneficios clave de usar Session Manager:

No es necesario compartir o rotar claves SSH

Con Session Manager, ya no usas claves SSH. Si quieres que alguien pueda conectarse por SSH a una instancia EC2, le otorgas permisos a su usuario de IAM o IAM Identity Center para usar Session Manager, y pueden conectarse sin cambios por su parte.

Si quieres eliminar el acceso a una persona en particular, eliminas sus permisos de IAM, sin afectar a ningún otro usuario. Si estuvieras usando claves SSH, tendrías que rotar la clave SSH utilizada para esa instancia y compartirla con todas las demás personas que acceden a la instancia. Session Manager lo hace mucho más fácil.

No es necesario tener puertos abiertos a Internet

Session Manager no requiere que abras el puerto 22 a todas las direcciones IP en los Security Groups de las instancias. Esto elimina una vulnerabilidad donde cualquiera podría intentar conectarse a tus instancias a través de ese puerto.

No es necesario tener una dirección IP pública

Las instancias no necesitan una dirección IP pública o acceso a Internet para ser accesibles desde Session Manager. Necesitarán un VPC Endpoint para que puedan conectarse a Session Manager, pero eso sucede a través de la dirección IP privada de la instancia y no expone la instancia a ningún otro tipo de conexión. De esta manera, las instancias detrás de los balanceadores de carga ya no tienen motivos para usar direcciones IP públicas, lo que es una postura de seguridad mucho mejor y será relevante para los costos una vez que AWS comience a cobrar $3.6/mes por dirección IPv4 pública en uso.

No es necesario un host bastión

Los hosts bastión se usan típicamente para exponer solo una instancia a Internet y usarla para saltar a otras instancias en la red privada. Sus principales beneficios son que solo instalas claves SSH en una instancia y que solo fortaleces una instancia contra intentos de actores maliciosos. Al eliminar la necesidad de claves SSH y eliminar todo el acceso público a tus instancias, ya no necesitas saltar la conexión a través de un host bastión.

Cómo configurar AWS Session Manager

Instrucciones paso a paso para configurar Session Manager

  1. Asegúrate de que la instancia esté administrada por Systems Manager. Aquí se explica cómo configurar eso.

  2. Asegúrate de que la instancia tenga permisos para usar Session Manager. Aquí tienes dos formas de agregar estos permisos, puedes seguir cualquiera de ellas:

    1. Adjunta la Política de IAM AmazonSSMManagedInstanceCore al Rol de IAM asociado a la instancia

    2. Sigue esta guía para crear tu propia política

  3. Asegúrate de que el agente de SSM esté instalado en la instancia. Se instala de forma predeterminada en la mayoría de las AMI de EC2, pero por si acaso, aquí te explico cómo instalarlo para Linux, Windows y macOS

  4. Asegúrate de que la instancia tenga acceso HTTPS (puerto 443) a estos endpoints (esto se puede hacer a través de acceso a Internet o con un VPC Endpoint):

    1. ec2messages.region.amazonaws.com

    2. ssm.region.amazonaws.com

    3. ssmmessages.region.amazonaws.com

    4. kms.region.amazonaws.com si deseas cifrar las sesiones

    5. logs.region.amazonaws.com para enviar registros de sesión a CloudWatch Logs

    6. s3.region.amazonaws.com para enviar registros de sesión a S3

Cómo iniciar una sesión con Session Manager

Para iniciar una sesión desde la consola:

  1. Abre la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/

  2. En el panel de navegación de la izquierda, haz clic en Instancias

  3. Selecciona la instancia a la que deseas conectarte

  4. Haz clic en Connectar

  5. Ve a la pestaña Session Manager

  6. Haz clic en Connectar

Captura de pantalla de Session Manager

Para iniciar una sesión desde la CLI, usa el siguiente comando, reemplazando {INSTANCE_ID} con el ID de la instancia a la que estás tratando de conectarte:

aws ssm start-session --target {INSTANCE_ID}

Para una mejor experiencia usando la CLI, instala el complemento de CLI para Session Manager.

¿Te gustó este artículo?

Login or Subscribe to participate in polls.

Reply

or to participate.