Wie kann ich von einem lokalen Computer aus eine Verbindung zu einer privaten Amazon-RDS-DB-Instance herstellen, wenn ich eine Amazon-EC2-Instance als Bastion-Host verwende?

Lesedauer: 6 Minute
0

Ich möchte eine Amazon-Elastic-Compute-Cloud-Instance (Amazon EC2) als Bastion-Host (Jump) verwenden. Dann möchte ich die Instance von einem lokalen Computer aus verwenden, um eine Verbindung zu einer privaten Amazon-Relational-Database-Service-DB-Instance (Amazon RDS) herzustellen.

Kurzbeschreibung

Um eine Amazon-EC2-Instance als Jump Server zu verwenden, um von einem lokalen Rechner aus eine Verbindung zu einer privaten Amazon-RDS-DB-Instance herzustellen, gehen Sie wie folgt vor:

1.    Starten und konfigurieren Sie Ihre EC2-Instance und konfigurieren Sie dann die Netzwerkeinstellungen der Instance.

2.    Konfigurieren Sie die Sicherheitsgruppen der RDS-DB-Instance.

3.    Stellen Sie von Ihrem lokalen Gerät aus eine Verbindung zur RDS-DB-Instance her.

Wichtig: Für das Herstellen einer Verbindung zu einer privaten Amazon-RDS- oder Amazon-Aurora-DB-Instance ist es eine bewährte Methode, ein VPN oder AWS Direct Connect zu verwenden. Wenn Sie diese Optionen nicht verwenden können, verwenden Sie einen Bastion-Host. Die folgende Beispielkonfiguration verwendet Sicherheitsgruppen, um den Zugriff einzuschränken. Sie können jedoch die Netzwerk-Zugriffskontrollliste (Netzwerk-ACL) von Subnetzen einschränken, um die Verbindung sicherer zu machen. Sie können auch den Routbereich Ihres Internet-Gateways einschränken, um einen kleineren Bereich anstelle von 0.0.0.0/0 zu verwenden. Fügen Sie beispielsweise beim Hinzufügen des Internet-Gateways nur den erforderlichen CIDR-Bereich in die Routing-Tabelle für das Ziel ein. Weitere Informationen finden Sie unter Beispiele für Routingoptionen.

Lösung

Die folgende Beispielkonfiguration gilt für eine Amazon-RDS-for-MySQL-Instance in einer Amazon Virtual Private Cloud (Amazon VPC). Für die Instance sind Sicherheitsgruppen für eine EC2-Instance eingerichtet.

Starten und Konfigurieren der EC2-Instance

1.    Öffnen Sie die Amazon-EC2-Konsole und wählen Sie dann Instance starten aus.

2.    Wählen Sie ein Amazon Machine Image (AMI) aus.

3.    Wählen Sie einen Instance-Typ aus, und wählen Sie dann Weiter: Instance-Details konfigurieren.

4.    Wählen Sie für Netzwerk die VPC aus, welche die RDS-DB-Instance verwendet.

5.    Wählen Sie für Subnet das Subnetz aus, das ein Internet-Gateway in seiner Routing-Tabelle enthält. Wenn Sie noch kein Internet-Gateway haben, können Sie es dann dem Subnetz hinzufügen, nachdem die EC2-Instance erstellt wurde.

6.    Stellen Sie für die automatische Zuweisung öffentlicher IP sicher, dass Aktivieren ausgewählt ist.

7.    Wählen Sie Weiter: Speicher hinzufügen und passen Sie dann den Speicher nach Bedarf an.

8.    Wählen Sie Weiter: Tags hinzufügen und fügen Sie dann nach Bedarf Tags hinzu.

9.    Wählen Sie Weiter: Sicherheitsgruppe konfigurieren, wählen Sie Regel hinzufügen und geben dann Sie Folgendes ein: Typ: Geben Sie Benutzerdefinierte TCP-Regel ein. Protokoll: Geben Sie TCP ein. Portbereich: Geben Sie 22 ein. Quelle: Geben Sie die IP-Adresse Ihres lokalen Computers ein. Standardmäßig ist die Quell-IP-Adresse für alle zugänglich, aber Sie können den Zugriff auf Ihre lokale öffentliche IP-Adresse einschränken.

10.    Wählen Sie Überprüfen und Starten.

11.    Wählen Sie Starten.

Konfigurieren Sie die Sicherheitsgruppen der RDS-DB-Instance

Hinweis: Informationen zum automatischen Verbinden einer oder mehrerer EC2-Instances mit einer RDS-Datenbank finden Sie unter Automatisches Verbinden einer EC2-Instance mit einer RDS-Datenbank.

1.    Öffnen Sie die Amazon-RDS-Konsole und wählen Sie dann im Navigationsbereich Datenbanken aus.

2.    Wählen Sie den Namen der RDS-DB-Instance aus. Oder erstellen Sie eine RDS-DB-Instance, falls Sie noch keine haben.

3.    Wählen Sie die Registerkarte Konnektivität und Sicherheit aus.

4.    Wählen Sie im Abschnitt Sicherheit den Link unter VPC-Sicherheitsgruppen aus.

5.    Wählen Sie die Sicherheitsgruppe aus, wählen Sie Aktionen und wählen Sie dann Eingangsregeln bearbeiten.

6.    Wählen Sie Regel hinzufügen und geben Sie dann Folgendes ein: Typ: Geben Sie Benutzerdefinierte TCP-Regel ein. Protokoll: Geben Sie TCP ein. Port Range: Geben Sie den Port Ihrer RDS-DB-Instance ein. Quelle: Geben Sie die private IP-Adresse Ihrer EC2-Instance ein.

7.    Wählen Sie Speichern aus.

Diese Konfiguration der Sicherheitsgruppe erlaubt Datenverkehr von der privaten IP-Adresse der EC2-Instance. Wenn die EC2-Instance und die RDS-DB-Instance dieselbe VPC verwenden, müssen Sie die von der RDS-DB-Instance verwendete Routing-Tabelle nicht ändern. Wenn die VPC unterschiedlich ist, erstellen Sie eine VPC-Peering-Verbindung, um Verbindungen zwischen diesen VPCs zu erlauben.

Hinweis: Wenn Sie eine skalierbarere Lösung verwenden, seien Sie vorsichtig. Wenn Sie beispielsweise die Sicherheitsgruppen-ID in einer Sicherheitsgruppenregel verwenden, stellen Sie sicher, dass sie den Zugriff auf eine Instance nicht einschränkt. Konfigurieren Sie die Regel stattdessen so, dass der Zugriff auf alle Ressourcen eingeschränkt wird, die die spezifische Sicherheitsgruppen-ID verwenden.

Stellen Sie von Ihrem lokalen Computer aus eine Verbindung zur RDS-DB-Instance her

Je nach verwendetem Client können sich die Schritte zum Herstellen einer Verbindung mit der RDS-DB-Instance unterscheiden. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit einer Amazon-RDS-DB-Instance. Wenn Sie MySQL verwenden, ist es eine bewährte Methode, SSL zum Verschlüsseln der Verbindung zwischen der Clientanwendung und Amazon RDS zu verwenden.

Im folgenden Beispiel wird der MySQL-Workbench-Client verwendet, um eine Verbindung zum Bastion-Host herzustellen:

1.    Starten Sie eine neue Verbindung und wählen Sie dann Standard TCP/IP über SSH als Verbindungsmethode aus.

2.    Geben Sie für die SSH-Einstellungen die folgenden Details über die EC2-Instance ein: Öffentliche IP automatisch zuweisen: Stellen Sie sicher, dass für die Option DNS-Hostnamen die Option Aktivieren ausgewählt ist. SSH-Hostname: Geben Sie den öffentlichen DNS-Namen der EC2-Instance oder ihre öffentliche IP-Adresse ein. SSH-Benutzername: Geben Sie den Benutzernamen für Ihre EC2-Instance ein. ec2-user ist beispielsweise der Benutzername für EC2-Linux-Computer. SSH-Schlüsseldatei: Wählen Sie den privaten Schlüssel aus, den Sie beim Erstellen der EC2-Instance verwendet haben. Hinweis: Eine EC2-Instance, die mit einer öffentlichen IP-Adresse gestartet wurde, hat ein öffentliches DNS, wenn auf der VPC, in der sie erstellt wurde, DNS-Hostnamen aktiviert sind.

3.    Geben Sie für die MySQL-Instance-Einstellungen Folgendes ein: MySQL-Hostname: Geben Sie den Endpunkt der RDS-DB-Instance ein. MySQL-Serverport: Geben Sie 3306 ein. Oder, wenn Sie einen benutzerdefinierten Port verwenden, geben Sie die benutzerdefinierte Portnummer ein. Benutzername: Geben Sie den Benutzernamen der RDS-DB-Instance ein. Passwort: Geben Sie das Passwort der RDS-DB-Instance ein.

4.    Wählen Sie Verbindung testen aus.

5.    Geben Sie nach erfolgreicher Verbindung einen Verbindungsnamen ein und speichern Sie dann die Verbindung.

Um von Ihrem lokalen MySQL-Client über einen SSH-Tunnel eine Verbindung zu einer privaten RDS-Instance herzustellen, sind die folgenden Befehle zu verwenden.

Linux oder macOS:

1.    Führen Sie den folgenden Befehl aus, um einen SSH-Tunnel zu konfigurieren:

ssh -i "YOUR_EC2_KEY" -L LOCAL_PORT:RDS_ENDPOINT:REMOTE_PORT EC2_USER@EC2_HOST -N -f

Hinweis: Ersetzen Sie YOUR_EC2_KEY, LOCAL_PORT, RDS_ENDPOINT, REMOTE_PORT, EC2_USER und EC2_HOST durch Ihre relevanten Informationen.

Nachdem die benutzerdefinierten Felder im vorherigen Befehl ausgefüllt sind, sieht der Befehl dem folgenden Beispiel ähnlich:

ssh -i "ec2Key.pem" -L 3336:rdsinstance.xxx.xxx.rds.amazonaws.com:3306 ec2-user@ec2-34-244-136-223.xxxcompute.amazonaws.com -N -f

2.    Führen Sie die folgenden Befehle aus, um zu testen und zu bestätigen, dass der Tunnel den lokalen Port überwacht:

lsof -i4 -P | grep -i "listen" | grep LOCAL_PORT
nc -zv 127.0.0.1 LOCAL_PORT

Hinweis: Ersetzen Sie LOCAL_PORT durch die Nummer Ihres lokalen Ports.

3.    Wenn Ihr Tunnel erfolgreich Ihren lokalen Port abhört, wird eine Ausgabe ähnlich der folgenden angezeigt:

lsof -i4 -P | grep -i "listen" | grep 3336
ssh       17692 user    8u  IPv4 0x3bc46bcfeffce12f      0t0  TCP localhost:3336 (LISTEN)

nc -zv 127.0.0.1 3336
Connection to 127.0.0.1 port 3336 [tcp/directv-tick] succeeded!

4.    Führen Sie den folgenden Befehl aus, um von Ihrem lokalen Computer aus eine Verbindung zu Ihrer RDS-Instance herzustellen, indem Sie Ihre EC2-Instance als Bastion-Host verwenden:

mysql -h 127.0.0.1 -P LOCAL_PORT -u RDS_USER -p

Hinweis: Ersetzen Sie LOCAL_PORT durch die Nummer Ihres lokalen Ports und DB_USER durch Ihren RDS-DB-Benutzernamen.


Relevante Informationen

Wie behebe ich Probleme beim Herstellen einer Verbindung zu meiner Amazon-RDS-DB-Instance?