Come posso connettermi alla mia istanza database Amazon RDS utilizzando un host bastione dalla mia macchina Linux/macOS?

4 minuti di lettura
0

Ho un'istanza database di Amazon Relational Database Service (Amazon RDS) che non è accessibile pubblicamente. Vorrei connettermi ad essa dalla mia macchina Linux/macOS. Come posso connettermi alla mia istanza database RDS utilizzando un host bastione?

Breve descrizione

Per connettersi a un'istanza Amazon RDS o Amazon Aurora database privata, è consigliabile utilizzare una VPN o AWS Direct Connect. Se è possibile utilizzare una VPN o AWS Direct Connect, l'opzione preferita è utilizzare un host bastione. È inoltre possibile utilizzare questo metodo per connetterti ad Aurora Serverless e RDS Proxy dall'esterno del VPC. Questo esempio mostra come configurare un host bastione per connettersi all'istanza database RDS da una macchina Linux/macOS, anche se l'istanza database RDS è privata.

Risoluzione

1.    Imposta la tua istanza database Amazon RDS su privata modificando l'istanza database. Imposta il parametro accessibile al pubblico su no, con sottoreti private (ad esempio, nessun gateway internet - igw nelle tabelle di routing). Imposta il gruppo di sicurezza per consentire al database di eseguire la portabilità (5432, 3306) da tutti gli IP.

2.    Avvia l'istanza EC2 più piccola disponibile nello stesso VPC dell'istanza database. Imposta la tua istanza Amazon Elastic Compute Cloud (Amazon EC2) in modo che sia accessibile da Internet, con sottoreti pubbliche (ad esempio, ha un gateway internet, igw nelle tabelle di routing). Imposta il gruppo di sicurezza per consentire l'IP della macchina Linux/macOS da cui stai tentando di connetterti.

3.    Esegui il seguente comando dalla tua macchina Linux/macOS per creare un tunnel per la connettività dalla tua macchina:

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

Quando si esegue il comando precedente (tunneling SSH), si configurano le seguenti impostazioni:

  • debug1: Local connections to LOCALHOST: 5432 forwarded to remote address 172.31.39.62:5432
  • debug1: Local forwarding listening on 127.0.0.1 port 5432.
  • debug1: channel 0: new [port listener]
  • debug1: Local forwarding listening on ::1 port 5432.
Syntax 2:
ssh -i "Private_key.pem" -f -N -L 5433:RDS_Instance_Endpoint:5432 ec2-user@EC2-Instance_Endpoint -v

Example Command:
ssh -i "private.pem" -f -N -L
5433:pg115.xxxx.us-east-2.rds.amazonaws.com:5432
ec2-user@ec2-xxxx-xxx9.us-east-2.compute.amazonaws.com -v

4.    Ora che il tunneling SSH è attivo, puoi connetterti alla tua istanza database dal tuo computer Linux/macOS locale. L'esempio seguente si connette a PostgreSQL, ma puoi anche usare questo metodo per connetterti a MySQL o a qualsiasi altro motore a cui desideri connetterti.

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 wish 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

Nota: MySQL tenta di connettersi utilizzando il socket se si utilizza la parola chiave localhost durante la connessione all'istanza database. Assicurati di utilizzare il nome host 127.0.0.1 quando accedi a un'istanza database MySQL. Per ulteriori informazioni, consulta la documentazione MySQL per [Can't connect to\ local] MySQL server.


Informazioni correlate

Host bastione Linux su AWS

Connect to a private Amazon RDS DB instance from a local machine using an Amazon EC2 instance as a bastion host