Tengo problemas para acceder a la instancia de AWS RDS en una subred privada utilizando el administrador de sesiones a través de la instancia ec2 (Ubuntu).
Reenvío de puertos mediante el administrador de sesiones de AWS:
aws ssm start-session --target $INSTANCE_ID \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":[3307],"localPortNumber":["8000"]}' \
--profile=production \
--region=us-east-1`
Ahora el puerto local 8000 se reenvió exitosamente al puerto 3307 de EC2.
lsof -nP +c 15 | grep LISTEN
session-manager 59744 xrage 12u IPv4 0xa6c821d0a800e9a1 0t0 TCP 127.0.0.1:8000 (LISTEN)
La instancia EC2 tiene una regla iptable que reenvía todo el tráfico en el puerto 3307 al host rds en el puerto 3306 (PUERTO MYSQL).
sudo iptables -t nat -A OUTPUT -o lo -d 127.0.0.1 -p tcp --dport 3307 -j DNAT --to-destination <rds_private_ip>:3306
Esto me permitió acceder al host remoto en el puerto deseado desde ec2, pero aún así, no se puede acceder al host remoto localmente en el puerto 8000.
Detalles de la red en la máquina local -
- No usar ningún proxy
- Firewall deshabilitado en mac
Está claro que la configuración de SSM está funcionando, pero algo más está bloqueando este tráfico. Necesito ayuda aquí.
Respuesta1
Cuando dijiste que el host remoto puede acceder a la instancia de MySQL, ¿probaste ese puerto (telnet) o el cliente de línea de comando mysql, solo para confirmar?
Suponiendo que sí a lo anterior, pasaría al siguiente paso. Tengo entendido que AWS-StartPortForwardingSession cubre este escenario: tiene algo ejecutándose en su EC2, digamos una base de datos MySQL que implementó e instaló manualmente. Quiere reenviar el tráfico desde su estación de trabajo (por ejemplo) a la instancia de MySQL que se ejecuta en EC2, a través de SSM. Para eso se diseñó AWS-StartPortForwardingSession.
En su caso, EC2 es más bien un host bastión y su instancia de MySQL es de tipo RDS. Por lo tanto, su EC2 no aloja nada; simplemente es una puerta de enlace para conectarse a su RDS.
Suponiendo que la suposición anterior sea correcta, usaría AWS-StartSSHSession en su lugar (https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html).
La respuesta completa sería detallada, pero lo hice hace unos meses:https://medium.com/@clearwaterstream/recipe-connect-to-an-rds-database-in-a-private-subnet-from-your-workstation-over-https-c66db6ead9f0
Respuesta2
El 27 de mayo de 2022, AWSapoyo anunciadoparaReenvío de puertos a hosts remotos mediante el Administrador de sesión:
Para comenzar, instale SSM Agent versión 3.1.1374.0 o posterior en las instancias administradas con las que está estableciendo una sesión de reenvío de puertos. Puede iniciar una sesión de reenvío de puertos desde la línea de comando utilizando el
AWS-StartPortForwardingSessionToRemoteHost
documento del Administrador de sesión.
Para iniciar una sesión de reenvío de puertos, ejecute el siguiente comando desde la CLI. Reemplace los valores de <EC2_INSTANCE_ID>
, <RDS_DB>
, <RDS_PORT>
y <LOCAL_PORT>
con su información:
aws ssm start-session \
--target <EC2_INSTANCE_ID> \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters '{"host":["<RDS_DB>"], "portNumber":["<RDS_PORT>"], "localPortNumber":["<LOCAL_PORT>"]}'
Más detalles están disponibles en la documentación de AWS:AWS Systems Manager - Guía del usuario - Administrador de sesiones - Inicio de una sesión (reenvío de puertos a un host remoto).
Publicaciones de blog de AWS relacionadas:
- Utilice el reenvío de puertos en AWS Systems Manager Session Manager para conectarse a hosts remotos
- Conéctese de forma segura a una instancia de base de datos de Amazon RDS o Amazon EC2 de forma remota con su GUI preferida
Problemas relacionados con GitHub y solicitudes de extracción:
- aws/amazon-ssm-agent - Número 208 - Solicitud de función: reenviar al puerto remoto
- aws/amazon-ssm-agent - Problema n.º 240 - Solicitud de función: permitir especificar IP para AWS-StartSSHSession n.º 240
- aws/amazon-ssm-agent - Solicitud de extracción n.º 389: compatibilidad con la especificación de un host para el reenvío de puertos
Pregunta relacionada con StackOverflow: