Comment me connecter à mon instance de base de données Amazon RDS à l'aide d'un hôte bastion depuis mon ordinateur Linux/macOS ?

Lecture de 4 minute(s)
0

Je dispose d'une instance de base de données Amazon Relational Database Service (Amazon RDS) qui n'est pas accessible publiquement. Je voudrais me connecter à partir de mon ordinateur Linux/macOS. Comment me connecter à mon instance de base de données RDS à l'aide d'un hôte bastion ?

Brève description

Pour une connexion à une instance privée d'Amazon RDS ou d'Amazon Aurora DB, la meilleure pratique consiste à utiliser un VPN ou AWS Direct Connect. Si vous ne pouvez pas utiliser un VPN ou AWS Direct Connect, il est préférable d'utiliser un hôte bastion. Vous pouvez également utiliser cette méthode pour vous connecter à Aurora Serverless et RDS Proxy à l'extérieur du VPC. Cet exemple montre comment configurer un hôte bastion pour se connecter à votre instance de base de données RDS à partir d'un posteLinux/macOS, même si l'instance de base de données RDS est privée.

Résolution

1.    Indiquez que votre instance de base de données Amazon RDS est privée en modifiant l’instance de base de données. Affectez au paramètre publicly accessible (accessible au public ) la valeur no (non), avec des sous-réseaux privés (c'est-à-dire pas de passerelle Internet - igw dans les tables de routage). Définissez le groupe de sécurité pour autoriser la base de données sur le port (5432, 3306) à partir de toutes les adresses IP.

2.    Lancez la plus petite instance EC2 disponible dans le même VPC que votre instance de base de données. Définissez votre instance Amazon Elastic Compute Cloud (Amazon EC2) pour qu'elle soit accessible à partir d'Internet, avec des sous-réseaux publics (c'est-à-dire qu'elle a une passerelle Internet - igw dans les tables de routage). Définissez le groupe de sécurité pour autoriser l'adresse IP de la machine Linux/macOS à partir de laquelle vous essayez de vous connecter.

3.    Exécutez la commande suivante à partir de votre poste Linux/macOS pour créer un tunnel pour la connectivité à partir de votre machine :

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

Lorsque vous exécutez la commande ci-dessus (tunnel SSH), vous définissez les paramètres suivants :

  • debug1 : Connexions locales à LOCALHOST : 5432 transféré à l'adresse distante 172.31.39. 62:5432
  • debug1 : Transfert local écoute sur 127.0.0.1 port 5432.
  • debug1 : canal 0 : nouveau [port listener]
  • debug1 : Transfert local écoute sur ::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.    À présent que le tunnel SSH est en place, vous pouvez vous connecter à votre instance de base de données à partir de votre poste local Linux/macOS. Cet exemple permet d'établir une connexion avec PostgreSQL. Cette méthode peut également être utilisée pour se connecter à MySQL ou à tout autre moteur de base de données.

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

Remarque : MySQL se connecte par le biais d'un socket si vous utilisez le mot-clé localhost lors de la connexion à l'instance de la base de données. Veillez à utiliser le nom d'hôte 127.0.0.1 lorsque vous accédez à une instance de base de données MySQL. Pour plus d'informations, consultez la documentation MySQL Connexion impossible au serveur MySQL [local].


Informations connexes

Hôtes Linux Bastion sur AWS

Connexion à une instance de base de données Amazon RDS privée à partir d'un ordinateur local à l'aide d'une instance Amazon EC2 comme hôte bastion