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.