Passer au contenu

Comment utiliser un tunnel SSH pour me connecter à mon cluster Amazon DocumentDB depuis l'extérieur d'un Amazon VPC ?

Lecture de 7 minute(s)
0

Je souhaite accéder à un cluster Amazon DocumentDB (compatible avec MongoDB) déployé dans un Amazon Virtual Private Cloud (Amazon VPC). Je souhaite utiliser un tunnel SSH pour accéder au cluster depuis l'extérieur de l'Amazon VPC.

Brève description

Pour utiliser un tunnel SSH afin de transférer le trafic de votre machine locale vers le cluster Amazon DocumentDB, utilisez une instance Amazon Elastic Compute Cloud (Amazon EC2) comme hôte bastion ou de rebond. L'hôte bastion sert de proxy qui transfère le trafic de votre machine locale vers le cluster Amazon DocumentDB.

Résolution

La résolution suivante utilise une instance EC2 comme hôte bastion. L'hôte bastion utilise le client d'interface de ligne de commande (CLI) MongoDB pour se connecter au cluster Amazon DocumentDB depuis une machine locale via un tunnel SSH.

Prérequis :

Vérifiez que le cluster Amazon DocumentDB est accessible depuis l'hôte bastion Amazon EC2

Utilisez la paire de clés privées pour vous connecter à l'hôte bastion depuis votre machine locale via SSH :

ssh -i path_to_pem_file instance-user-name@instance-public-dns-name

Remarque : remplacez path_to_pem_file par le chemin de votre fichier clé .pem. Remplacez instance-user-name par le nom d'utilisateur de votre instance. Remplacez instance-public-dns-name par le nom DNS public ou l'adresse IP de votre instance.

Pour en savoir plus, consultez la section Se connecter à votre instance Linux à l'aide d'un client SSH.

Pour authentifier votre cluster, téléchargez le certificat d'autorité de certification (CA) pour Amazon DocumentDB :

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

Utilisez le client MongoDB CLI pour vous connecter au cluster Amazon DocumentDB :

mongo --tls --host cluster-endpoint --tlsCAFile global-bundle.pem --username primary-username --password master-password

Remarque : remplacez cluster-endpoint par le point de terminaison du cluster DocumentDB. Remplacez primary-username par le nom d'utilisateur principal de la base de données. Remplacez primary-password par le mot de passe principal de la base de données.

Pour plus d'informations, consultez la section Se connecter à l'aide d'Amazon EC2.

Configurer le tunnel SSH

Après avoir vérifié la connexion au cluster à partir d'un hôte bastion, configurez le tunnel SSH.

Pour configurer un tunnel SSH entre votre machine locale et un hôte bastion, exécutez une commande similaire à l'exemple suivant :

ssh -i path_to_pem_file -L local-port:cluster-endpoint:remote-port instance-user-name@instance-public-dns-name -N -f

Remarque : remplacez path_to_pem_file par le chemin d'accès au fichier de clé privée de l’instance EC2. Remplacez local-port par le numéro de port que vous souhaitez utiliser sur votre machine locale. Remplacez cluster-endpoint par le point de terminaison du cluster. emplacez remote-port par le numéro de port de la base de données distante.

Dans l'exemple suivant, le tunnel SSH lie le port 27017 de la machine locale au cluster Amazon DocumentDB distant :

ssh -i "ec2Access.pem" -L 27017:sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 ec2-user@ec2-zz-aaa-yyy-zzz.compute-1.amazonaws.com -N -f

Les options de ligne de commande suivantes sont utilisées dans l'exemple de commande précédent :

  • i identity_file, utilise la paire de clés privées de l'instance (fichier .pem) pour l'authentification.
  • L port:host:hostport, lie le port sur l'hôte local (client) pour transférer le trafic sur le port hôte de l'hôte distant.
  • N, n'exécute pas de commande à distance. Cela n'est utile que lorsque vous transférez des ports.
  • f, exécute le SSH afin qu'il s'exécute en arrière-plan.

Pour vérifier que le tunnel SSH s'exécute en arrière-plan, exécutez une commande similaire à l'exemple suivant.

Remarque : remplacez local-port par le numéro de port.

Linux et macOS :

lsof -P | grep -i "listen" | grep local-port

Windows :

netstat -abn | findstr "LISTEN" | findstr local-port

Remarque : vous devez être un administrateur pour exécuter la commande précédente sous Windows.

Pour vérifier que l'hôte local écoute sur le port local 27017, exécutez la commande suivante :

nc -zv 127.0.0.1 27017

Examinez la sortie. Si le tunnel SSH est correctement établi, une sortie similaire à l'exemple suivant s'affiche :

❯ lsof -P | grep -i "listen" | grep 27017ssh 52787 user 7u IPv4 0x1256bbb543454447 0t0 TCP localhost:27017 (LISTEN)
❯ netstat -abn | findstr "LISTEN" | findstr 27017TCP 127.0.0.1:27017 0.0.0.0:0 LISTENING
❯ nc -zv 127.0.0.1 27017Connection to 127.0.0.1 port 27017 [tcp/*] succeeded!

L'exemple précédent utilise le port 27017.

Se connecter au cluster Amazon DocumentDB depuis la machine locale

Utilisez le shell MongoDB ou un client GUI pour vous connecter au cluster Amazon DocumentDB depuis la machine locale.

Remarque : avant d'établir la connexion, téléchargez le certificat CA pour Amazon DocumentDB sur la machine locale.

Pour utiliser le shell MongoDB et vous connecter au cluster Amazon DocumentDB, exécutez la commande suivante :

mongo --tls --tlsAllowInvalidHostnames --tlsCAFile global-bundle.pem --username primary-username --password primary-password

Remarque : remplacez primary-username par le nom d'utilisateur de la base de données. Remplacez primary-password par le mot de passe de la base de données.

L'exemple de commande précédent ne spécifie pas explicitement les paramètres --host et --port. Lorsque vous ne spécifiez pas les paramètres --host et --port, MongoDB Shell essaie de se connecter à l'hôte local de votre machine sur le port local 2701. Le tunnel SSH transmet ensuite la connexion au point de terminaison du cluster Amazon DocumentDB.

Lorsque vous utilisez un port autre que 27017 sur votre machine locale, utilisez le paramètre --port pour spécifier explicitement le port personnalisé. Pour plus d'informations, consultez la page Se connecter à un déploiement sur un hôte distant sur le site Web de MongoDB.

Considérations importantes

Examinez les considérations suivantes :

  • Certains clients GUI disposent d'une option de tunnel SSH, comme MongoDB Compass ou Studio 3T. Lorsque vous utilisez ces clients, vous n'avez pas besoin de créer et de gérer manuellement le tunnel SSH à l'aide de la CLI MongoDB. À la place, enregistrez la configuration du tunnel SSH dans les paramètres de connexion du client GUI. Pour plus d'informations, consultez la documentation de votre client GUI spécifique.
  • Lorsque vous devez contourner la validation des noms d'hôte SSL/TLS, utilisez le paramètre --tlsAllowInvalidHostnames pour vous connecter via un tunnel SSH. Le nom d'hôte figurant dans la chaîne de connexion, mongodb://localhost:27017, ne correspond pas au nom d'hôte figurant dans le certificat de serveur de cluster Amazon DocumentDB. Si vous vous connectez directement au cluster via un point de terminaison de cluster Amazon DocumentDB, vous n'avez pas besoin d'utiliser le paramètre --tlsAllowInvalidHostnames.
  • Pour les clients GUI tels que MongoDB Compass et Studio 3T, spécifiez l'option tlsAllowInvalidHostnames dans la chaîne de connexion, tlsAllowInvalidHostnames=true. Vous pouvez également activer l'option **Allow Invalid Hostnames** dans les paramètres de connexion de l'onglet SSL/TLS.
  • Lorsque vous utilisez un tunnel SSH pour vous connecter, il est recommandé de vous connecter au point de terminaison du cluster. Si vous spécifiez replicaSet=rs0 dans votre chaîne de connexion, une erreur peut se produire. Lorsque vous utilisez MongoDB Compass pour le tunnel SSH, activez la connexion directe pour désactiver la connexion au jeu de réplicas. Pour plus d'informations, consultez la page Onglet Connexion générale sur le site Web de MongoDB.

Informations connexes

Connexion à un cluster Amazon DocumentDB depuis l'extérieur d'un Amazon VPC

Qu'est-ce que MongoDB Compass ? sur le site Web de MongoDB

AWS OFFICIELA mis à jour il y a 5 mois