- Simple AWS en Español
- Posts
- Session Manager: Conectarse por SSH a Instancias EC2 de Manera Segura
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
Asegúrate de que la instancia esté administrada por Systems Manager. Aquí se explica cómo configurar eso.
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:
Adjunta la Política de IAM AmazonSSMManagedInstanceCore al Rol de IAM asociado a la instancia
Sigue esta guía para crear tu propia política
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
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):ec2messages.region.amazonaws.com
ssm.region.amazonaws.com
ssmmessages.region.amazonaws.com
kms.region.amazonaws.com
si deseas cifrar las sesioneslogs.region.amazonaws.com
para enviar registros de sesión a CloudWatch Logss3.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:
Abre la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/
En el panel de navegación de la izquierda, haz clic en Instancias
Selecciona la instancia a la que deseas conectarte
Haz clic en Connectar
Ve a la pestaña Session Manager
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? |
Reply