Stworzyłem podstawową testową instancję PostgreSQL RDS w VPC, która ma jedną publiczną podsieć i która powinna być dostępna do połączenia przez publiczny internet. Używa domyślnej grupy zabezpieczeń, która jest otwarta dla portu 5432. Gdy próbuję się połączyć, nie działa. Tęsknię za czymś bardzo prostym - ale jestem na to zagubiony.
Oto ustawienia bazy danych, pamiętaj, że jest oznaczony jako Publicly Accessible
:
Oto ustawienia grupy zabezpieczeń, zwróć uwagę, że jest szeroko otwarte (potwierdzone w powyższych ustawieniach RDS zieloną „autoryzowaną” wskazówką obok punktu końcowego):
Oto polecenie, którego próbuję użyć do połączenia:
psql --host=myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com \
--port=5432
--username=masteruser
--password
--dbname=testdb
I to jest wynik, który otrzymuję, gdy próbuję połączyć się z Yosemite MacBook Pro (uwaga, rozwiązuje się na 54. * adres IP):
psql: could not connect to server: Operation timed out
Is the server running on host "myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com" (54.xxx.xxx.xxx) and accepting
TCP/IP connections on port 5432?
Nie mam włączonej żadnej zapory ogniowej i mogę łączyć się z publicznymi instancjami PostgreSQL na innych dostawcach (np. Heroku).
Wszelkie wskazówki dotyczące rozwiązywania problemów byłyby bardzo mile widziane, ponieważ jestem tutaj bardzo zagubiony.
Aktualizacja
Dla komentarza, oto przychodzące reguły ACL dla Domyślnego VPC:
źródło
Odpowiedzi:
Problem polegał na tym, że reguła ruchu przychodzącego w grupie zabezpieczeń określała grupę zabezpieczeń jako źródło. Zmiana na CIDR, który zawierał mój adres IP, rozwiązała problem.
źródło
Napotkałem podobny problem i tak to rozwiązałem:
Kliknij grupę zabezpieczeń dla instancji RDS i sprawdź reguły ruchu przychodzącego. Możesz zobaczyć coś takiego:
Musisz ustawić zakres adresów IP, aby zawierał adres IP lub po prostu wybierz „Anywhere” w menu Source, aby był dostępny z lokalnego hosta lub z dowolnego miejsca:
źródło
Miałem podobny problem podczas łączenia z postgres. Wydarzenie, chociaż miałem publicznie dostęp do prawdy, nie mogłem się połączyć.
Dodałem jedną regułę reguły przychodzącej w grupie zabezpieczeń i teraz działa ona doskonale.
źródło
Chciałem tylko dodać moje ustalenia, aby kogoś zaoszczędzić trochę czasu. To opisane powyżej rozwiązanie działało na instancji dev ec2, ale po migracji na nowy serwer przestało działać. Okazało się, że zarówno moja instancja RDS, jak i instancja EC2 były w tym samym VPC, więc instancja RDS nie widziała publicznego adresu IP, który dodałem do swojej grupy bezpieczeństwa. Aby to działało, należy dodać do grupy zabezpieczeń instancji RDS prywatny adres IP instancji EC2, który można znaleźć w szczegółach.
źródło
Po utworzeniu instancji Postgres moja domyślna grupa zabezpieczeń (rds-launch-wizard) wymieniła tylko mój adres IP, więc musiałem dodać typ całego ruchu i źródło dowolnego miejsca, aby móc się połączyć. Nie jestem ekspertem od sieci, ale to dziwne, że nie mogłem połączyć się z własnym adresem IP jako regułą przychodzącą.
źródło