Zeitüberschreitung beim Verbinden von RDS mit AWS-Sitzungsmanager über EC2-Instanz

Zeitüberschreitung beim Verbinden von RDS mit AWS-Sitzungsmanager über EC2-Instanz

Ich habe Probleme beim Zugriff auf eine AWS RDS-Instanz in einem privaten Subnetz mithilfe des Sitzungsmanagers über eine EC2-Instanz (Ubuntu).

Portweiterleitung mit AWS Session Manager -

    aws ssm start-session --target $INSTANCE_ID \
                       --document-name AWS-StartPortForwardingSession \
                       --parameters '{"portNumber":[3307],"localPortNumber":["8000"]}' \
                                             --profile=production \
                       --region=us-east-1`

Jetzt wurde der lokale Port 8000 erfolgreich an Port 3307 von EC2 weitergeleitet.

lsof -nP +c 15 | grep LISTEN

session-manager 59744 xrage 12u IPv4 0xa6c821d0a800e9a1 0t0 TCP 127.0.0.1:8000 (LISTEN)

Die EC2-Instanz verfügt über eine iptable-Regel, die den gesamten Datenverkehr auf Port 3307 an den RDS-Host auf Port 3306 (MYSQL-PORT) weiterleitet.

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

Dadurch konnte ich von EC2 aus auf den Remote-Host am gewünschten Port zugreifen. Der Remote-Host ist jedoch weiterhin nicht lokal über Port 8000 erreichbar.

Netzwerkdetails auf dem lokalen Rechner -

  • Ich verwende keinen Proxy
  • Firewall auf dem Mac deaktiviert

Es ist also klar, dass das SSM-Setup funktioniert, aber etwas anderes diesen Datenverkehr blockiert. Ich brauche hier etwas Hilfe.

Antwort1

Als Sie sagten, dass der Remote-Host auf die MySQL-Instanz zugreifen kann, haben Sie zur Bestätigung diesen Port (Telnet) oder den MySQL-Befehlszeilenclient ausprobiert?

Wenn ich das oben Gesagte mit Ja beantworte, würde ich mit dem nächsten Schritt fortfahren. Meines Wissens nach soll AWS-StartPortForwardingSession dieses Szenario abdecken: Auf Ihrem EC2 läuft etwas, beispielsweise eine MySQL-Datenbank, die Sie manuell erstellt und installiert haben. Sie möchten den Datenverkehr von Ihrer Workstation (beispielsweise) über SSM an die MySQL-Instanz weiterleiten, die auf EC2 läuft. Dafür wurde AWS-StartPortForwardingSession entwickelt.

In Ihrem Fall ist EC2 eher ein Bastion-Host und Ihre MySQL-Instanz ist vom Typ RDS. Ihr EC2 hostet also nichts – es ist lediglich ein Gateway zur Verbindung mit Ihrem RDS.

Vorausgesetzt, die obige Annahme ist richtig, würde ich stattdessen AWS-StartSSHSession verwenden (https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html).

Die vollständige Antwort wäre sehr ausführlich, aber ich habe es vor ein paar Monaten getan:https://medium.com/@clearwaterstream/recipe-connect-to-an-rds-database-in-a-private-subnet-from-your-workstation-over-https-c66db6ead9f0

Antwort2

Am 27. Mai 2022, AWSUnterstützung angekündigtfürPortweiterleitung an Remote-Hosts mit Session Manager:

Installieren Sie zunächst SSM Agent Version 3.1.1374.0 oder höher auf den verwalteten Instanzen, mit denen Sie eine Portweiterleitungssitzung einrichten. Sie können eine Portweiterleitungssitzung über die Befehlszeile mithilfe des AWS-StartPortForwardingSessionToRemoteHostSession Manager-Dokuments starten.

Um eine Portweiterleitungssitzung zu starten, führen Sie den folgenden Befehl von der CLI aus. Ersetzen Sie die Werte von <EC2_INSTANCE_ID>, <RDS_DB>, <RDS_PORT>und <LOCAL_PORT>durch Ihre Informationen:

aws ssm start-session \
    --target <EC2_INSTANCE_ID> \
    --document-name AWS-StartPortForwardingSessionToRemoteHost \
    --parameters '{"host":["<RDS_DB>"], "portNumber":["<RDS_PORT>"], "localPortNumber":["<LOCAL_PORT>"]}'

Weitere Einzelheiten finden Sie in der AWS-Dokumentation:AWS Systems Manager – Benutzerhandbuch – Session Manager – Starten einer Sitzung (Portweiterleitung zum Remote-Host).

Verwandte AWS-Blogbeiträge:

Verwandte GitHub-Probleme und Pull Requests:

Verwandte StackOverflow-Frage:

verwandte Informationen