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

Lecture de 6 minute(s)
0

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

Brève description

Pour créer un tunnel SSH, vous pouvez utiliser Session Manager, une fonctionnalité d'AWS Systems Manager qui vous permet d'utiliser la redirection de port pour les hôtes distants. Cette fonctionnalité est prise en charge sur les versions 3.1.1374.0 et ultérieures de l'agent SSM. La redirection de port est une alternative aux étapes ci-dessous. Pour plus d'informations sur la redirection de port hôte distant, consultez Démarrer une session.

Le gestionnaire de séance Session 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.
  • 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 session 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.    SSM Agent v2.3.672.0 ou version ultérieure.

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 : en cas d'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.


Informations connexes

Configuration automatisée du gestionnaire de séance sans Passerelle Internet

session-manager-without-igw

Connectez-vous à distance en toute sécurité à une instance de base de données Amazon RDS ou Amazon EC2 à l'aide de votre interface utilisateur

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 6 mois