Wie verwende ich einen SSH-Tunnel, um von außerhalb einer Amazon VPC eine Verbindung zu meinem Amazon DocumentDB-Cluster herzustellen?
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:
- Erstelle einen Amazon DocumentDB-Cluster.
- Starte eine Instance mit einer öffentlichen IP-Adresse in derselben Amazon VPC wie der Amazon DocumentDB-Cluster.
- Verknüpfe ein privates Schlüsselpaar (.pem-Datei) mit der Instance, die du auf deinen lokalen Computer heruntergeladen hast.
- Verknüpfe eine Sicherheitsgruppe mit dem Amazon DocumentDB-Cluster. Die Sicherheitsgruppe erlaubt Kommunikation von der Instance über den Port, der mit dem Amazon DocumentDB-Cluster konfiguriert ist (Standard: 27017).
- Verknüpfe eine Sicherheitsgruppe mit der Instance. Die Sicherheitsgruppe erlaubt Kommunikation von deinem lokalen Computer über den SSH-Port (22).
- Installiere die MongoDB Shell oder einen GUI-Client auf deinem lokalen Computer.
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
- Themen
- Database
- Sprache
- Deutsch
