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)
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 ?
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 :
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
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
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)