¿Cómo puedo conectarme a mi instancia de base de datos de Amazon RDS mediante un host bastión desde mi máquina Linux o macOS?

4 minutos de lectura
0

Tengo una instancia de base de datos de Amazon Relational Database Service (Amazon RDS) a la que no se puede acceder públicamente. Me gustaría conectarme a ella desde mi máquina Linux o macOS. ¿Cómo puedo conectarme a mi instancia de base de datos de RDS mediante un host bastión?

Breve descripción

Para conectarse a una instancia de base de datos privada de Amazon RDS o Amazon Aurora, se recomienda utilizar una VPN o AWS Direct Connect. Si no puede usar una VPN ni una AWS Direct Connect, la opción preferida es usar un host bastión. También puede usar este método para conectarse a Aurora Serverless y RDS Proxy desde fuera de la VPC. En este ejemplo se muestra cómo configurar un host bastión para que se conecte a la instancia de base de datos de RDS desde una máquina Linux o macOS, aunque la instancia de base de datos de RDS sea privada.

Resolución

  1. Configure su instancia de base de datos de Amazon RDS como privada modificando la instancia de base de datos. Establezca el parámetro de acceso público a no, con subredes privadas (es decir, sin puerta de enlace de Internet, igw en las tablas de enrutamiento). Configure el grupo de seguridad para permitir que la base de datos haga puertos (5432, 3306) desde todas las IP.

2.    Lance la instancia EC2 más pequeña disponible en la misma VPC que la instancia de base de datos. Configure su instancia de Amazon Elastic Compute Cloud (Amazon EC2) para que sea accesible desde Internet, con subredes públicas (es decir, que tenga una puerta de enlace de Internet igw en las tablas de enrutamiento). Configure el grupo de seguridad para que permita la IP de la máquina Linux/macOS desde la que intenta conectarse.

3.    Ejecute el siguiente comando desde su máquina Linux o macOS para crear un túnel de conectividad desde su máquina:

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

Cuando ejecuta el comando anterior (tunelización SSH), configura los siguientes ajustes:

  • depuración1: Conexiones locales a LOCALHOST: 5432 reenviado a la dirección remota 172.31.39.62:5432
  • depuración1: Reenvío local, escucha activada en 127.0.0.1 puerto 5432.
  • depuración1: canal 0: nuevo [port listener]
  • depuración1: Reenvío local, escucha activada en ::1 puerto 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.    Ahora que la tunelización SSH está lista, puede conectarse a su instancia de base de datos desde su máquina Linux o macOS local. El siguiente ejemplo se conecta a PostgreSQL, pero también puede usar este método para conectarse a MySQL o a cualquier otro motor al que quiera conectarse.

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 intenta conectarse mediante el socket si utiliza la palabra clave localhost al conectarse a la instancia de base de datos. Asegúrese de usar el nombre de host 127.0.0.1 al acceder a una instancia de base de datos de MySQL. Para obtener más información, consulte la documentación de MySQL sobre No me puedo conectar al servidor [local]MySQL.


Información relacionada

Hosts bastión de Linux en AWS

Conéctese a una instancia de base de datos privada de Amazon RDS desde un equipo local con una instancia de Amazon EC2 que actúe como un host bastión