Comment puis-je utiliser le tunneling de port pour me connecter à une instance de base de données privée via un bastion réseau?


12

J'ai un bastion réseau accessible au public example.compute-1.amazonaws.comet une instance de base de données postgres privée àpostgres.example.us-east-1.rds.amazonaws.com:5432

Je peux entrer dans le bastion en utilisant

$ ssh -i key.pem ec2-user@example.compute-1.amazonaws.com

Puis une fois dans le bastion je crée un tunnel ssh avec:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

Je peux ensuite vérifier que le tunnel fonctionne en se connectant à la base de données depuis le bastion en utilisant localhost:

$ psql -p 5432 -h localhost -U postgres

Cependant, je ne peux pas me connecter à la base de données à distance (sans être dans le bastion).

$ psql -p 5432 -h example.compute-1.amazonaws.com -U postgres
psql: could not connect to server: Connection refused
Is the server running on host "example.compute-1.amazonaws.com" () and accepting
TCP/IP connections on port 5432?

J'ai configuré le groupe de sécurité du bastion pour accepter le trafic entrant sur le port 5432.

Suis-je en ssh -Ltrain d' utiliser correctement? Dois-je l'utiliser en dehors du bastion? Tout conseil serait très apprécié.

Réponses:


20

Lorsque vous créez un tunnel SSH, il n'expose pas le port ouvert au monde extérieur. Le port ouvert, est uniquement disponible en tant que localhost. Donc, ce que vous avez fait, c'est de créer un tunnel de votre bastion à votre bastion.

Au lieu de cela, ce que vous voulez faire est de créer un tunnel à partir de votre ordinateur local via votre bastion.

Ainsi, vous créez votre tunnel dans le cadre de votre connexion de votre ordinateur local à votre bastion . Vous n'avez pas besoin de créer une autre connexion SSH.

Donc, localement, vous exécuteriez:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

En supposant que postgres.example.us-east-1.rds.amazonaws.com se résout en adresse IP privée.

Ensuite, pour vous connecter à votre serveur, toujours localement, connectez-vous comme si le serveur était local:

$ psql -p 5432 -h localhost -U postgres

Ce faisant, il n'est pas nécessaire d'utiliser une invite sur votre bastion.


Cela a fonctionné pour moi, merci! La seule chose que j'ai oubliée pour tous ceux qui ont la commande psql se bloque: assurez-vous que votre groupe de sécurité db autorise l'accès depuis le bastion.
Goran

-1

Cela a fonctionné pour moi. Assurez-vous que le client psql est installé localement.

psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName

Lors de la création de votre instance db sur aws, assurez-vous de définir les éléments suivants:

  1. Nom d'utilisateur
  2. mot de passe
  3. nom de la base de données
  4. numéro de port

J'ai également dû créer un groupe de sécurité pour le VPC dans lequel se trouvait la base de données. Après sa création, assurez-vous que votre instance db l'utilise pour son groupe de sécurité. Le groupe de sécurité a les règles suivantes:

inbound--> type:PostgreSQL, protocol:TCP port range:5432, source:0.0.0.0/0

outbound--> type:All Traffic, protocol:All, port range:all, destination:0.0.0.0/0

Mais cela ne passe pas par un bastion, non? Vous venez de vous connecter directement à RDS
RhysC

Il passe par un vpc à travers lequel l'instance rds est exposée. Vous attachez le vpc à l'instance rds lors de la création.
timxor

Oui, je pense que la question initiale était de passer par un serveur bastion dans le VPC, donc l'instance RDS n'est pas exposée publiquement (enfin c'est comme ça que je l'ai lu)
RhysC

Ce n'était pas la question et votre réponse n'aide pas du tout à résoudre le problème.
Radko Dinev
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.