DEV Community

Cover image for SSM-Bastion ou comment se connecter a une instance/bdd privée sur AWS
Ménahem Houri
Ménahem Houri

Posted on

SSM-Bastion ou comment se connecter a une instance/bdd privée sur AWS

Un des challenges les plus fréquents d'un projet sur AWS en ce qui concerne la sécurité et l'accessibilité d'une EC2 ou d'une base de donnée privée tourne autour du Bastion.

Le Bastion est le point central pour accéder depuis l'extérieur à des resources privées. (hors DirectConnect)

SSH Bastion

Architecture classique d'un bastion via un tunnel SSH

Qu'en est-il de la resilience ?
Filtrer les IP's entrantes via un Security Group ?
La rotation des clés SSH

ça sera pas mal de travail au quotidien...

Alors comment accéder a son instance privée de manière sécurisée ?

Avec le navigateur, directement, vous pouvez utiliser AWS Systems Manager Session Manager ou meme dans certains cas EC2 Serial Console

Sinon concrètement ? comment accéder à une base de donnée sur AWS (Redshift, Aurora, DocumentDB, RDS,...) ou se connecter en SSH sans utiliser sur l'EC2 de destination Session Manager ?

SSM-Bastion

Je suis très heureux de partager avec vous SSM-Bastion, comment cela fonctionne-t-il ?

SSM-Bastion
Architecture de SSM-Bastion

Voyons ça de plus prés, premièrement l'instance n'as pas besoin d'être exposée publiquement (via un subnet public)
Résilience et réduction de cout avec une Spot instance dans un Auto Scaling group.

1/ Via un script, l'utilisateur qui souhaite se connecter lance une commande de port forwarding, authentifié par son AWS Access Key et Secret Key.
L'instance EC2 qui est déployée en tant que SSM-Bastion doit communiquer avec des points de terminaison AWS, lorsque vous vous trouver dans un VPC sans NAT Gateway vous allez avoir besoin des endpoints suivants :

SSM-Bastion Endpoints

Note : Pour KMS vous allez avoir besoin de l'activer à travers la console ou par cli

2/ Après que l'utilisateur ait lancé le port forwarding command (via Run Command) l'EC2 SSM-Bastion crée le tunnel vers la destination

3/ Une fois le tunnel créé (via socket), la session est ouverte sur le poste local, permettant de s'y connecter a partir du localhost

Lancement d'une connexion - exemple

Pour lancer une session avec le script il existe 2 possibilités

1/ Session interactive (sans paramètre dans la commande)
./ssm-bastion-port-forwarding.sh

Session interactive

Une connexion vers une EC2 privée avec l'IP 10.0.0.1 écoutant sur le port 3006, le port ouvert sur la machine sera 9090

2/ Avec arguments dans la ligne de commande
Vous pouvez lancer directement une session avec les arguments dans la ligne de commande, ci-dessous les paramètres nécessaires

./ssm-bastion-port-forwarding.sh ip_ou_dns_destination port_destination port_source

avec-arguments

Example d'une connexion avec une destination secrete le port de destination est le 4567, le port ouvert sur la machine locale est 8768

Après ça vous pouvez utiliser votre connexion sur localhost:port_ouvert

Vous pouvez retrouver le code Terraform ainsi que lscript Bash sur github

Top comments (0)