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-StartPortForwardingSessionToRemoteHost
Session 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:
- Verwenden Sie die Portweiterleitung im AWS Systems Manager Session Manager, um eine Verbindung zu Remote-Hosts herzustellen
- Stellen Sie über Ihre bevorzugte GUI eine sichere Remote-Verbindung zu einer Amazon RDS- oder Amazon EC2-Datenbankinstanz her.
Verwandte GitHub-Probleme und Pull Requests:
- aws/amazon-ssm-agent – Problem Nr. 208 – Funktionsanforderung: Weiterleitung an Remote-Port
- aws/amazon-ssm-agent – Problem Nr. 240 – Funktionsanforderung: IP-Angabe für AWS-StartSSHSession #240 zulassen
- aws/amazon-ssm-agent – Pull Request Nr. 389 – Unterstützung für die Angabe eines Hosts für die Portweiterleitung
Verwandte StackOverflow-Frage: