Tiempo de espera al conectar RDS mediante el administrador de sesiones de AWS a través de la instancia EC2

Tiempo de espera al conectar RDS mediante el administrador de sesiones de AWS a través de la instancia EC2

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-StartPortForwardingSessionToRemoteHostdocumento 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:

Problemas relacionados con GitHub y solicitudes de extracción:

Pregunta relacionada con StackOverflow:

información relacionada