Direkt zum Inhalt

Wie stelle ich mit einem Bastion-Host von meinem Linux- oder macOS-Rechner aus eine Verbindung zu meiner Amazon RDS DB-Instance her?

Lesedauer: 4 Minute
0

Ich habe eine Amazon Relational Database Service (Amazon RDS) DB-Instance, die nicht öffentlich zugänglich ist. Ich möchte von meinem Linux- oder macOS-Rechner aus eine Verbindung zu ihr herstellen.

Kurzbeschreibung

Um eine Verbindung zu einer privaten Amazon-RDS- oder Amazon-Aurora-DB-Instance herzustellen, empfiehlt es sich, ein VPN oder AWS Direct Connect zu verwenden. Wenn du weder ein VPN noch AWS Direct Connect verwenden kannst, kannst du stattdessen einen Bastion-Host verwenden. Du kannst diese Methode auch von einem Linux- oder macOS-Rechner aus verwenden, um eine Verbindung zu Amazon Aurora Serverless und Amazon-RDS-Proxy von außerhalb der Virtual Private Cloud (VPC) der Instance herzustellen.

Lösung

Um einen Bastion-Host zu verwenden, um von einem Linux- oder macOS-Rechner aus eine Verbindung zu deiner Amazon RDS DB-Instance herzustellen, befolge diese Schritte:

  1. Stelle deine Amazon RDS DB-Instance auf privat ein. Dazu ändere die DB-Instance mit den folgenden Parametern:
    Setze den Parameter publicly accessible (öffentlich zugänglich) auf no (nein) und verwende private Subnetze.
    Verwende kein Internet gateway - igw (Internet-Gateway - igw) in deinen Routing-Tabellen.
    Konfiguriere die Sicherheitsgruppe so, dass sie für die DB die Ports 5432 und 3306 von allen IP-Adressen zulässt.

  2. Starte die kleinste verfügbare EC2-Instance in derselben VPC wie deine DB-Instance:
    Verwende Internet gateway - igw (Internet-Gateway - igw) in deinen Routing-Tabellen. Dieser Wert öffnet deine Amazon Elastic Compute Cloud (Amazon EC2)-Instance für das Internet, wenn sie sich in einem öffentlichen Subnetz befindet.
    Richte die Sicherheitsgruppe so ein, dass sie die IP-Adresse des Linux- oder macOS-Rechners zulässt, von dem aus du eine Verbindung herstellen möchtest.

  3. Um einen Tunnel für die Konnektivität zu erstellen, führe den folgenden Befehl auf deinem Linux- oder macOS-Rechner aus:

    Syntax 1:
    ssh -i <identity_file> -f -l <bastion-host-username> -L
    <local-port-you-connect-to>:<rds-endpoint>:<rds:listening-port>
    <bastion-host-public-ip> -v
    
    Example command:
    ssh -i "private_key.pem" -f -l ec2-user -L 5432:172.31.39.62:5432  3.133.141.189 -v

    Wenn du diesen Befehl für das SSH-Tunneling ausführst, konfiguriere die folgenden Einstellungen mit diesen Werten:
    debug1: Lokale Verbindungen zu LOCALHOST: 5432 an Remote-Adresse 172.31.39.62:5432 weitergeleitet
    debug1: Lokale Weiterleitung hört auf 127.0.0.1 Port 5432
    debug1: Kanal 0: neuer [port listener]
    debug1: Lokale Weiterleitung hört auf ::1 Port 5432

    Syntax 2:
    ssh -i "Private_key.pem" -f -N -L 5432:RDS_Instance_Endpoint:5432 ec2-user@EC2-Instance_Endpoint -v
    
    Example command:
    ssh -i "private.pem" -f -N -L
    5432:pg115.xxxx.us-east-2.rds.amazonaws.com:5432
    ec2-user@ec2-xxxx-xxx9.us-east-2.compute.amazonaws.com -v
  4. Du kannst nun von deinem lokalen Rechner aus eine Verbindung zu deiner DB-Instance herstellen. Der folgende Beispielbefehl stellt eine Verbindung zu PostgreSQL her, aber du kannst dieselbe Methode verwenden, um eine Verbindung zu MySQL oder zu einer beliebigen anderen Engine herzustellen:

    Syntax -
    psql -hlocalhost -Upostgres -p<local-port-you-connect-to> -d postgres
    
    -h = localhost
    
    -U = the username present in the DB for connectivity
    
    -p = 'local-port-you-connect-to' from the SSH Tunneling command
    
    -d = Any DB, user who wants to connect.
    
    Example command -
    a483e73d651f:.ssh rahul_saha$ psql -hlocalhost -Upostgres -p5432 -d postgres
    Password for user postgres:
    psql (12.1, server 11.5)
    SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
    Type "help" for help.
    
    postgres=> \l
                                      List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
    -----------+----------+----------+-------------+-------------+-----------------------
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     rdsadmin  | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin
     template0 | rdsadmin | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin          +
               |          |          |             |             | rdsadmin=CTc/rdsadmin
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
    (4 rows)
    
    $ psql -hlocalhost -Upostgres -p -d postgres
    $ mysql -h127.0.0.1 -uroot -p

Hinweis: Wenn du das Schlüsselwort localhost verwendest, wenn du dich mit der DB-Instance verbindest, versucht MySQL, den Socket für die Verbindung zu verwenden. Stelle sicher, dass du den Hostnamen 127.0.0.1 verwendest, um auf eine MySQL DB-Instance zuzugreifen. Weitere Informationen findest du unter Can't connect to [local] MySQL server (Verbindung zum [local] MySQL-Server kann nicht hergestellt werden) auf der MySQL-Website.

Ähnliche Informationen

Linux bastion hosts on AWS (Linux-Bastion-Hosts auf AWS)

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