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

Dernière mise à jour : 16/11/2020

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

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. Cette fonctionnalité signifie que 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 fonctionne avec une seule instance Amazon Elastic Compute Cloud (Amazon EC2), qui est l'hôte bastion ; c'est le port sortant 443 qui se connecte à l'infrastructure du gestionnaire de séance. Cela vous permet d'utiliser le gestionnaire de séance sans aucune connexion entrante. La ressource locale n’a besoin d’autoriser le trafic entrant qu’à 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 à l'aide de Systems Manager, reportez-vous à Configurer Systems Manager.

Conditions préalables

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.

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution des commandes depuis l'interface de ligne de commande AWS (CLI AWS), assurez-vous que vous utilisez la version de cette dernière.

1.    Démarrez le tunnel SSH à l'aide du gestionnaire de séance.

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

2.    Testez l'accès au tunnel sur le port cible créé à l'étape 1.

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 privée, à 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 l'instance 2, 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

Dans l'exemple précédent, le port 9090 est un port disponible sur l'ordinateur local.

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

Remarque : Assurez-vous que 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 l'instance2 autorisent 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'instance2 ;
  • 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

instance2 : instance de base de données EC2 située dans un sous-réseau privé.

    Hostname = ec2-198-51-100-2.compute-2.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 invocations de tunnel distinctes.

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:ec2-198-51-100-2.compute-1.amazonaws.com:3306 -L 9091:ec2-198-51-100-3.compute-1.amazonaws.com:80

Dans l'exemple précédent, 8080, 9090 et 9091 sont des ports disponibles sur l'ordinateur local.

2.    Accédez à SSH depuis l'ordinateur local vers l'instance1. Le port local 8080 est tunnelisé 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'instance2. Le port local 9090 est tunnelisé vers le port 3306 sur l'instance2.

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

4.    Depuis l'ordinateur local, accédez au site web sur l'instance3 en utilisant le navigateur.

http://127.0.0.1:9091

Remarque : Assurez-vous que les groupes de sécurité, listes ACL réseau, règles de sécurité ou logiciels de sécurité tiers présents sur l'instance2 et l'instance3 autorisent 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 ?