Direkt zum Inhalt

Wie verwende ich einen SSH-Tunnel, um von außerhalb einer Amazon VPC eine Verbindung zu meinem Amazon DocumentDB-Cluster herzustellen?

Lesedauer: 6 Minute
0

Ich möchte auf einen Amazon DocumentDB-Cluster (mit MongoDB-Kompatibilität) zugreifen, der in einer Amazon Virtual Private Cloud (Amazon VPC) bereitgestellt ist. Ich möchte einen SSH-Tunnel verwenden, um von außerhalb der Amazon VPC auf den Cluster zuzugreifen.

Kurzbeschreibung

Um einen SSH-Tunnel zu verwenden, um den Datenverkehr von deinem lokalen Computer zu einem Amazon DocumentDB-Cluster weiterzuleiten, verwende eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance als Bastion- oder Jump-Host. Der Bastion-Host fungiert als Proxy, der den Datenverkehr von deinem lokalen Computer zum Amazon DocumentDB-Cluster weiterleitet.

Lösung

Die folgende Lösung verwendet eine EC2-Instance als Bastion-Host. Der Bastion-Host verwendet den MongoDB-Befehlszeilenschnittstellen (CLI)-Client, um über einen SSH-Tunnel von einem lokalen Computer aus eine Verbindung zum Amazon DocumentDB-Cluster herzustellen.

Voraussetzungen:

Bestätigen, dass der Amazon DocumentDB-Cluster vom Amazon EC2-Bastion-Host aus erreichbar ist

Verwende das private Schlüsselpaar, um über SSH von deinem lokalen Computer eine Verbindung zum Bastion-Host herzustellen:

ssh -i path_to_pem_file instance-user-name@instance-public-dns-name

Hinweis: Ersetze path_to_pem_file durch den Pfad zu deiner .pem-Schlüsseldatei. Ersetze instance-user-name durch den Benutzernamen deiner Instance. Ersetze instance-public-dns-name durch den öffentlichen DNS-Namen oder die IP-Adresse deiner Instance.

Weitere Informationen findest du unter Mithilfe von SSH eine Verbindung zu der Linux-Instance herstellen.

Um deinen Cluster zu authentifizieren, lade das Zertifikat der Zertifizierungsstelle (CA) für Amazon DocumentDB herunter:

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

Verwende den MongoDB-CLI-Client, um eine Verbindung zum Amazon DocumentDB-Cluster herzustellen:

mongo --tls --host cluster-endpoint --tlsCAFile global-bundle.pem --username primary-username --password master-password

Hinweis: Ersetze cluster-endpoint durch den Endpunkt deines DocumentDB-Clusters. Ersetze primary-username durch deinen primären Datenbankbenutzernamen. Ersetze primary-password durch das Master-Passwort deiner Datenbank.

Weitere Informationen findest du unter Mithilfe von Amazon EC2 verbinden.

SSH-Tunnel konfigurieren

Nachdem du die Verbindung zum Cluster über einen Bastion-Host überprüft hast, konfiguriere den SSH-Tunnel.

Um einen SSH-Tunnel von deinem lokalen Computer zu einem Bastion-Host einzurichten, führe einen Befehl aus, der dem folgenden Beispiel ähnelt:

ssh -i path_to_pem_file -L local-port:cluster-endpoint:remote-port instance-user-name@instance-public-dns-name -N -f

Hinweis: Ersetze path_to_pem_file durch den Pfad zu deiner privaten EC2-Instance-Schlüsseldatei. Ersetze local-port durch die Portnummer, die du auf deinem lokalen Computer verwenden möchtest. Ersetze cluster-endpoint durch den Endpunkt deines DB-Clusters. Ersetze remote-port durch die Portnummer deiner Remote-Datenbank.

Im folgenden Beispiel bindet der SSH-Tunnel den Port 27017 des lokalen Computers an den Remote-Amazon DocumentDB-Cluster:

ssh -i "ec2Access.pem" -L 27017:sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 ec2-user@ec2-zz-aaa-yyy-zzz.compute-1.amazonaws.com -N -f

Die folgenden Befehlszeilenoptionen werden im vorherigen Beispielbefehl verwendet:

  • i identity_file verwendet das private Schlüsselpaar der Instance (.pem-Datei) zur Authentifizierung.
  • L port:host:hostport bindet den Port auf dem lokalen (Client-)Host, um den Datenverkehr an den Host-Port des Remote-Hosts weiterzuleiten.
  • N führt keinen Remote-Befehl aus. Diese Option ist nur nützlich, wenn du Ports weiterleitest.
  • f führt SSH im Hintergrund aus.

Um zu überprüfen, dass der SSH-Tunnel im Hintergrund ausgeführt wird, führe einen Befehl aus, der dem folgenden Beispiel ähnelt.

Hinweis: Ersetze local-port durch deine Portnummer.

Linux und macOS:

lsof -P | grep -i "listen" | grep local-port

Windows:

netstat -abn | findstr "LISTEN" | findstr local-port

Hinweis: Du musst ein Administratorbenutzer sein, um den vorherigen Befehl unter Windows auszuführen.

Um zu bestätigen, dass der lokale Host am lokalen Port 27017 lauscht, führe den folgenden Befehl aus:

nc -zv 127.0.0.1 27017

Überprüfe die Ausgabe. Wenn der SSH-Tunnel erfolgreich eingerichtet ist, siehst du eine Ausgabe, die dem folgenden Beispiel ähnelt:

❯ lsof -P | grep -i "listen" | grep 27017ssh 52787 user 7u IPv4 0x1256bbb543454447 0t0 TCP localhost:27017 (LISTEN)
❯ netstat -abn | findstr "LISTEN" | findstr 27017TCP 127.0.0.1:27017 0.0.0.0:0 LISTENING
❯ nc -zv 127.0.0.1 27017Connection to 127.0.0.1 port 27017 [tcp/*] succeeded!

Das vorherige Beispiel verwendet Port 27017.

Eine Verbindung zum Amazon DocumentDB-Cluster von deinem lokalen Computer herstellen

Verwende die MongoDB Shell oder einen GUI-Client, um von deinem lokalen Computer eine Verbindung zum Amazon DocumentDB-Cluster herzustellen.

Hinweis: Bevor du die Verbindung herstellst, lade das CA-Zertifikat für Amazon DocumentDB auf deinen lokalen Computer herunter.

Um mit der MongoDB Shell eine Verbindung zum Amazon DocumentDB-Cluster herzustellen, führe den folgenden Befehl aus:

mongo --tls --tlsAllowInvalidHostnames --tlsCAFile global-bundle.pem --username primary-username --password primary-password

Hinweis: Ersetze primary-username durch deinen Datenbankbenutzernamen. Ersetze primary-password durch dein Datenbankpasswort.

Der vorherige Beispielbefehl gibt die Parameter --host und --port nicht explizit an. Wenn du die Parameter --host und --port nicht angibst, versucht die MongoDB Shell, sich mit dem lokalen Host deines Computers am lokalen Port 27017 zu verbinden. Der SSH-Tunnel leitet die Verbindung dann an den Amazon DocumentDB-Cluster-Endpunkt weiter.

Wenn du auf deinem lokalen Computer einen anderen Port als 27017 verwendest, verwende den Parameter --port, um den benutzerdefinierten Port explizit anzugeben. Weitere Informationen findest du unter Auf einem Remote-Host mit einer Bereitstellung verbinden auf der MongoDB-Website.

Wichtige Überlegungen

Prüfe die folgenden Überlegungen:

  • Einige GUI-Clients haben eine SSH-Tunnel-Option, z. B. MongoDB Compass oder Studio 3T. Wenn du diese Clients verwendest, musst du den SSH-Tunnel mit der MongoDB-CLI nicht manuell erstellen und verwalten. Speichere stattdessen die SSH-Tunnel-Konfiguration in den Verbindungseinstellungen des GUI-Clients. Weitere Informationen findest du in der Dokumentation deines jeweiligen GUI-Clients.
  • Wenn du die SSL/TLS-Host-Namenvalidierung umgehen musst, verwende den Parameter --tlsAllowInvalidHostnames, um über einen SSH-Tunnel zu verbinden. Der Host-Name in der Verbindungszeichenfolge mongodb://localhost:27017 stimmt nicht mit dem Host-Namen überein, der im Amazon DocumentDB-Cluster-Serverzertifikat enthalten ist. Wenn du direkt mit dem Cluster über einen Amazon DocumentDB-Cluster-Endpunkt verbindest, musst du den Parameter --tlsAllowInvalidHostnames nicht verwenden.
  • Gib für GUI-Clients wie MongoDB Compass und Studio 3T die Option tlsAllowInvalidHostnames in der Verbindungszeichenfolge an, tlsAllowInvalidHostnames=true. Oder aktiviere die Option **Allow Invalid Hostnames** in den Verbindungseinstellungen auf der Registerkarte SSL/TLS.
  • Wenn du einen SSH-Tunnel verwendest, um eine Verbindung herzustellen, ist es eine bewährte Methode, eine Verbindung zum Cluster-Endpunkt herzustellen. Wenn du replicaSet=rs0 in deiner Verbindungszeichenfolge angibst, kann ein Fehler auftreten. Wenn du MongoDB Compass für den SSH-Tunnel verwendest, aktiviere Direct Connection, um die Replica-Set-Verbindung zu deaktivieren. Weitere Informationen findest du unter Registerkarte „Allgemeine Verbindungen“ auf der MongoDB-Website.

Ähnliche Informationen

Verbindung zu einem Amazon DocumentDB-Cluster von außerhalb einer Amazon VPC herstellen

Was ist MongoDB Compass?auf der MongoDB-Website

AWS OFFICIALAktualisiert vor 5 Monaten