Comment utiliser un tunnel SSH via AWS Systems Manager pour accéder aux ressources de mon VPC privé ?

Dernière mise à jour : 24/03/2021

Je souhaite utiliser un tunnel SSH via AWS Systems Manager pour accéder aux ressources de mon VPC privé. Comment faire ?

Brève description

Le gestionnaire de séance AWS Systems Manager utilise l'infrastructure Systems Manager pour créer une séance de type SSH avec une instance. Le gestionnaire de séance tunnelise de véritables connexions SSH. Vous pouvez donc tunneliser vers une autre ressource au sein de votre Virtual Private Cloud (VPC) directement à partir de votre machine locale. Lorsque vous créez une instance gérée, elle se comporte comme un hôte bastion ou une passerelle vers vos ressources AWS. Cette configuration présente les avantages suivants :

  • Sécurité accrue : Cette configuration utilise une seule instance Amazon Elastic Compute Cloud (Amazon EC2), qui est l'hôte bastion ; elle connecte le port sortant 443 à l'infrastructure du Systems Manager. Cela vous permet d'utiliser le gestionnaire de séance sans aucune connexion entrante. La ressource locale doit autoriser le trafic entrant uniquement à partir de l'instance agissant en tant qu'hôte bastion. Par conséquent, il n'est pas nécessaire de définir publiquement une règle pour le trafic entrant.
  • Simplicité d'utilisation : Vous pouvez accéder aux ressources de votre VPC privé directement à partir de votre ordinateur local.

Remarque : Pour obtenir des instructions sur la façon d'accéder à vos instances EC2 avec un terminal ou une redirection de port unique à l'aide de Systems Manager, reportez-vous à Configuration du gestionnaire de séance.

Prérequis

Remplissez les conditions préalables du gestionnaire de séance

Installez le plug-in Session Manager pour l'interface de ligne de commande AWS (CLI AWS)

Activez les connexions SSH via le gestionnaire de séance et assurez-vous que les exigences de connexion SSH sont satisfaites.

Remarque : Les éléments suivants doivent être installés pour utiliser la fonction SSH :

1.    L'agent AWS Systems Manager (agent SSM) v2.3 672.0, ou une version plus récente.

2.    Le plug-in de gestionnaire de séance v1.1.23, ou une version plus récente, sur votre ordinateur local.

3.    AWS CLI v1.16.12, ou une version plus récente, sur votre ordinateur local.

Solution

Pour démarrer le tunnel SSH à l'aide du gestionnaire de séance, procédez comme suit :

Remarque : si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

1.    Pour démarrer le tunnel SSH, exécutez la commande suivante :

ssh -i /path/my-key-pair.pem username@instance-id -L localport:targethost:destport

2.    Pour tester l'accès au tunnel sur le port cible créé à l'étape 1, exécutez la commande suivante :

telnet 127.0.0.1 localport

Dans l'exemple précédent, 127.0.0.1 et localport permettent d'accéder à targethost:destport.

Exemples de configurations

Scénario 1

Créez un tunnel à partir de votre ordinateur local pour accéder à une base de données MySQL s'exécutant sur une instance EC2, à l'aide de l'hôte SSM comme hôte bastion.

Ressources utilisées

instance1 : instance EC2 faisant office d'hôte bastion et gérée par AWS Systems Manager.

    Hostname = ec2-198-51-100-1.compute-1.amazonaws.com ID d'instance = i-0123456789abcdefa

instance2 : instance EC2 exécutant la base de données MySQL sur le port par défaut 3306.

    Hostname = ec2-198-51-100-2.compute-1.amazonaws.com

Instructions

1.    Depuis un ordinateur local (par exemple, votre ordinateur portable), exécutez la commande SSH pour vous connecter à l'instance1, à l'aide de connections SSH gérées par le gestionnaire de séance. Cette commande établit un tunnel vers le port 3306 sur instance2, et le présente sur votre ordinateur local sur le port 9090.

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 9090:ec2-198-51-100-2.compute-1.amazonaws.com:3306

Remarque : dans l'exemple précédent, le port 9090 est disponible sur la machine locale.

2.    Depuis l'ordinateur local, accédez à la base de données à l'aide du port disponible utilisé à l'étape 1 (9090 dans cet exemple).

mysql -u user -h 127.0.0.1 -P 9090 -p password

Important : tous les groupes de sécurité, listes de contrôle d'accès au réseau (ACL réseau), règles de sécurité ou logiciels de sécurité tiers présents sur instance2 doivent autoriser le trafic depuis l'instance1. Dans l'exemple précédent, l'instance2 doit autoriser l'accès au port 3306 à partir de l'instance1.

Scénario 2

Créez trois tunnels sur une seule connexion SSH depuis votre ordinateur local pour :

  • vous connecter au port SSH dans l'instance1 ;
  • accéder à une base de données MySQL dans l'instance RDS ;
  • accéder à un serveur web dans l'instance3.

Ressources utilisées

instance1 : instance EC2 faisant office d'hôte bastion et gérée par AWS Systems Manager.

    Hostname = ec2-198-51-100-1.compute-1.amazonaws.com ID d'instance = i-0123456789abcdefa

Instance RDS : instance MySQL RDS située dans un sous-réseau privé.

    Hostname = DBinstanceidentifier.abcdefg12345.region.rds.amazonaws.com

instance3 : instance EC2 située dans un sous-réseau privé

    Hostname = ec2-198-51-100-3.compute-3.amazonaws.com

Instructions

1.    Démarrez la séance avec trois tunnels, à l'aide de la commande SSH.

Remarque : la commande comporte trois appels de tunnel distincts.

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 8080:ec2-198-51-100-1.compute-1.amazonaws.com:22 -L 9090:DBinstanceidentifier.abcdefg12345.region.rds.amazonaws.com:3306 -L 9091:ec2-198-51-100-3.compute-1.amazonaws.com:80

Remarque : dans l'exemple précédent, les ports 8080, 9090 et 9091 sont disponibles sur la machine locale.

2.    Accédez à SSH depuis l'ordinateur local vers l'instance1. Le port local 8080 tunnelise vers le port SSH (22) sur l'instance1. La paire de clés et le nom d'utilisateur correspondent à l'instance vers laquelle vous tunnelisez (dans cet exemple, l'instance1).

ssh -i /path/key-pair_instance1.pem username_of_instance1@127.0.0.1 -p 8080

3.    Accédez à la base de données sur l'instance RDS. Le port local 9090 crée un tunnel vers le port 3306 sur l'instance RDS. Vous pouvez utiliser MySQL Workbench, qui vous permet d'accéder au serveur de base de données à l'aide de l'interface graphique, avec 127.0.0.1 en tant que nom d'hôte et 9090 en tant que port. Sinon, exécutez la commande suivante dans l'invite de commande shell :

mysql -u user -h 127.0.0.1 -P 9090 -p password

4.    Depuis la machine locale, pour accéder au site web sur l'instance3, ouvrez le navigateur et naviguez vers le site web.

http://127.0.0.1:9091

Important : tous les groupes de sécurité, listes ACL réseau, règles de sécurité ou logiciels de sécurité tiers présents sur l'instance RDS et l'instance3 doivent autoriser le trafic depuis l'instance1. Dans l'exemple précédent, l'instance3 doit autoriser l'accès au port 80 à partir de l'instance1.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?