Jak mogę korzystać z tunelowania portów, aby połączyć się z prywatną instancją bazy danych za pośrednictwem bastionu sieciowego?


12

Mam bastion sieciowy, który jest publicznie dostępny example.compute-1.amazonaws.comi prywatną instancję bazy danych postgres wpostgres.example.us-east-1.rds.amazonaws.com:5432

Mogę użyć ssh do bastionu

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

Potem, gdy jestem w bastionie, tworzę tunel ssh z:

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

Następnie mogę sprawdzić, czy tunel działa, łącząc się z bazą danych z bastionu za pomocą localhost:

$ psql -p 5432 -h localhost -U postgres

Nie mogę jednak połączyć się z bazą danych zdalnie (bez bastionu).

$ 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?

Skonfigurowałem grupę zabezpieczeń bastionu, aby akceptowała ruch przychodzący na porcie 5432.

Czy używam ssh -Lpoprawnie? Czy powinienem używać go poza bastionem? Wszelkie porady będą mile widziane.

Odpowiedzi:


20

Podczas tworzenia tunelu SSH nie ujawnia on otwartego portu zewnętrznemu światu. Otwarty port jest dostępny tylko jako localhost. Tak skutecznie zrobiliście, tworząc tunel z bastionu, do bastionu.

Zamiast tego chcesz utworzyć tunel z komputera lokalnego przez bastion.

Tak więc tunel tworzysz jako część połączenia z komputera lokalnego do bastionu . Nie musisz tworzyć kolejnego połączenia SSH.

Więc lokalnie wykonałeś:

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

Zakładając, że postgres.example.us-east-1.rds.amazonaws.com rozwiązuje problem z prywatnym adresem IP.

Następnie, aby połączyć się z serwerem, nadal lokalnie, połącz się tak, jakby serwer był lokalny:

$ psql -p 5432 -h localhost -U postgres

Robiąc to, nie musisz używać monitu na bastionie.


To zadziałało dla mnie, dzięki! Jedyną rzeczą, o której zapomniałem dla każdego, kto używa komendy psql, po prostu tam się zawiesza: Upewnij się, że twoja grupa db db pozwala na dostęp z bastionu.
Goran

-1

To zadziałało dla mnie. Upewnij się, że masz klienta psql zainstalowanego lokalnie.

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

Tworząc instancję db w aws, pamiętaj, aby zdefiniować następujące elementy:

  1. Nazwa Użytkownika
  2. hasło
  3. nazwa bazy danych
  4. numer portu

Musiałem także utworzyć grupę zabezpieczeń dla VPC, w której znajdowała się baza danych. Po utworzeniu upewnij się, że instancja db używa tego dla swojej grupy zabezpieczeń. Grupa bezpieczeństwa ma następujące zasady:

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

Ale to nie przechodzi przez bastion, prawda? Po prostu
łączysz się

Przechodzi przez vpc, przez które jest wystawiona instancja rds. Dołączasz vpc do instancji rds podczas tworzenia.
timxor

Tak, myślę, że pierwotne pytanie dotyczyło przejścia przez serwer bastionu w VPC, więc instancja RDS nie jest publicznie ujawniona (tak to czytam)
RhysC

To nie było pytanie, a twoja odpowiedź wcale nie pomaga w rozwiązaniu problemu.
Radko Dinev,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.