Wie verwende ich einen SSH-Tunnel über AWS Systems Manager, um auf meine privaten VPC-Ressourcen zuzugreifen?

Lesedauer: 5 Minute
0

Ich möchte einen SSH-Tunnel über AWS Systems Manager verwenden, um auf meine privaten VPC-Ressourcen zuzugreifen. Wie kann ich das machen?

Kurzbeschreibung

Verwenden Sie für die Erstellung eines SSH-Tunnel den Session Manager, eine Funktion von AWS Systems Manager, mit der Sie die Portweiterleitung für Remote-Hosts verwenden können. Diese Feature wird in den SSM-Versionen 3.1.1374.0 und höher für die Kundendienstmitarbeiter unterstützt. Die Portweiterleitung ist eine Alternative zu den folgenden Schritten. Weitere Informationen zur Remote-Host-Portweiterleitung finden Sie unter Starten einer Sitzung.

Der Session Manager verwendet die Systems Manager-Infrastruktur für die Erstellung einer SSH-ähnlichen Sitzung mit einer Instance. Der Session Manager tunnelt echte SSH-Verbindungen, sodass Sie direkt von Ihrem lokalen Computer aus zu einer anderen Ressource in Ihrer Virtual Private Cloud (VPC) tunneln können. Eine von Ihnen erstellte verwaltete Instance fungiert als Bastion-Host oder Gateway zu Ihren AWS-Ressourcen.

Die Vorteile dieser Konfiguration sind:

  • Höhere Sicherheit: Diese Konfiguration verwendet nur eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance (den Bastion-Host) und verbindet den ausgehenden Port 443 mit der Systems Manager-Infrastruktur. Auf diese Weise können Sie den Session Manager ohne eingehende Verbindungen verwenden. Die lokale Ressource darf eingehenden Datenverkehr nur von der Instance zulassen, die als Bastion-Host fungiert. Daher ist es nicht erforderlich, eine Regel für eingehenden Verkehr öffentlich aufzustellen.
  • **Einfache Bedienung:**Sie können direkt von Ihrem lokalen Computer aus auf Ressourcen in Ihrer privaten VPC zugreifen.

Hinweis: Anweisungen für den Zugriff auf Ihre EC2-Instances mit einem Terminal oder einer einzelnen Portweiterleitung mithilfe von Systems Manager finden Sie unter Session Manager einrichten.

Voraussetzungen

Erfüllen Sie die Voraussetzungen für Session Manager

Installieren Sie das Session Manager-Plugin für das AWS Command Line Interface (AWS CLI)

Erlauben Sie SSH-Verbindungen über den Sitzungsmanager und stellen Sie sicher, dass die SSH-Verbindungsanforderungen erfüllt sind.

**Hinweis:**Folgendes muss installiert sein, damit Sie das SSH-Feature nutzen können:

  1. SSM Agent v2.3.672.0 oder neuer.

  2. Session Manager Plugin v1.1.23 oder neuer auf Ihrem lokalen Computer.

  3. AWS CLI v1.16.12 oder neuer auf Ihrem lokalen Computer.

Behebung

Der SSH-Tunnel wird wie folgt mit dem Session Manager gestartet:

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehlermeldungen erhalten,stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.

  1. Der SSH-Tunnel wird mit folgendem Befehls gestartet:
ssh -i /path/my-key-pair.pem username@instance-id -L localport:targethost:destport
  1. Führen Sie den folgenden Befehl aus, um den Zugriff auf den Tunnel auf dem in Schritt 1 erstellten Zielport zu testen:
telnet 127.0.0.1 localport

Im vorherigen Beispiel werden 127.0.0.1 und localport umgewandelt, um auf targethost:destport zuzugreifen.

Beispielkonfigurationen

Szenario 1

Erstellen Sie einen Tunnel von Ihrem lokalen Computer aus, um auf eine MySQL-Datenbank zuzugreifen, die auf einer EC2-Instance läuft, indem Sie den SSM-Host als Bastion-Host verwenden.

Verwendete Ressourcen

instance1: Eine EC2-Instance, die als Bastion-Host fungiert und von AWS Systems Manager verwaltet wird.

Hostname = ec2-198-51-100-1.compute-1.amazonaws.com Instance-id = i-0123456789abcdefa

instance2: Eine EC2-Instance, die MySQL-Datenbank auf dem Standardport 3306 ausführt.

    Hostname = ec2-198-51-100-2.compute-1.amazonaws.com

Anweisungen

  1. Führen Sie auf einem lokalen Computer (z. B. Ihrem Laptop) den SSH-Befehl aus, um mithilfe von SSH auf Session Manager-Basis eine Verbindung zu instance1 herzustellen. Dieser Befehl richtet einen Tunnel zu Port 3306 auf instance2 ein und präsentiert ihn auf Ihrem lokalen Computer auf Port 9090.
ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 9090:ec2-198-51-100-2.compute-1.amazonaws.com:3306

Hinweis: Im vorherigen Beispiel ist Port 9090 auf dem lokalen Computer verfügbar.

  1. Greifen Sie vom lokalen Computer aus über den in Schritt 1 verwendeten verfügbaren Port auf die Datenbank zu (in diesem Beispiel 9090).
mysql -u user -h 127.0.0.1 -P 9090 -p password

**Hinweis:**Alle Sicherheitsgruppen, Netzwerk-Zugriffssteuerungslisten (Netzwerk-ACL), Sicherheitsregeln oder Sicherheitssoftware von Drittanbietern, die auf instance2 vorhanden sind, müssen den Datenverkehr von instance1 zulassen. Im vorherigen Beispiel muss instance2 den Zugriff auf Port 3306 von instance1 aus zulassen.

Szenario 2

Erstellen Sie drei Tunnel über eine einzige SSH-Verbindung von Ihrem lokalen Computer zu:

  • Verbinden Sie sich mit dem SSH-Port in instance1
  • Greifen Sie in einer RDS Instance auf MySQL Datenbank zu
  • Greifen Sie in instance3 auf einen Webserver zu

Verwendete Ressourcen

instance1: Eine EC2-Instance, die als Bastion-Host fungiert und von AWS Systems Manager verwaltet wird.

Hostname = ec2-198-51-100-1.compute-1.amazonaws.com Instance-id = i-0123456789abcdefa

RDS instance: Eine MySQL RDS Instance, die sich in einem privaten Subnetz befindet.

    Hostname = DBinstanceidentifier.abcdefg12345.region.rds.amazonaws.com

instance3: Eine EC2 Instance, die sich in einem privaten Subnetz befindet

    Hostname = ec2-198-51-100-3.compute-3.amazonaws.com

Anweisungen

  1. Starten Sie die Sitzung mit drei Tunneln mit dem SSH-Befehl.

**Hinweis:**Der Befehl enthält drei separate Tunnelaufrufe.

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 8080:ec2-198-51-100-1.compute-1.amazonaws.com:22 -L 9090:DBinstanceidentifier.abcdefg12345.region.rds.amazonaws.com:3306 -L 9091:ec2-198-51-100-3.compute-1.amazonaws.com:80

Hinweis: Im vorherigen Beispiel sind die Ports 8080, 9090 und 9091 auf dem lokalen Computer verfügbar.

  1. Greifen Sie vom lokalen Computer auf SSH auf instance1 zu. Der lokale Port 8080 führt einen Tunnel zum SSH-Port (22) auf instance1. Das Schlüsselpaar und der Benutzername beziehen sich auf die Instance, zu der Sie tunnelen (in diesem Beispiel instance1).
ssh -i /path/key-pair_instance1.pem username_of_instance1@127.0.0.1 -p 8080
  1. Greifen Sie auf die Datenbank auf der RDS instance zu. Der lokale Port 9090 führt einen Tunnel zu Port 3306 auf der RDS instance. Mit der MySQL Workbench können Sie mit der Sie über die GUI auf den DB-Server zugreifen, mit 127.0.0.1 als Hostname und 9090 alsPort. Oder führen Sie den folgenden Befehl in der Shell-Befehlszeile aus:
mysql -u user -h 127.0.0.1 -P 9090 -p password
  1. Um vom lokalen Computer aus auf die Website auf instance3 zuzugreifen, öffnen Sie den Browser und navigieren Sie zur Website.
http://127.0.0.1:9091

Wichtig: Alle Sicherheitsgruppen, Netzwerk-ACL, Sicherheitsregeln oder Sicherheitssoftware von Drittanbietern, die auf RDS instance und instance3 vorhanden sind, müssen den Datenverkehr von instance1 zulassen. Im vorherigen Beispiel muss instance3 den Zugriff auf Port 80 von instance1 aus zulassen.


Weitere Informationen

Automatisierte Konfiguration von Session Manager ohne Internet-Gateway

Session Manager ohne igw

Stellen Sie mit Ihrer bevorzugten GUI eine sichere Remote-Verbindung zu einer Amazon RDS- oder Amazon EC2-Datenbank-Instance her