Verbindung zur öffentlichen postgresql rds-Instanz kann nicht hergestellt werden

23

Ich habe eine grundlegende Test-PostgreSQL-RDS-Instanz in einer VPC erstellt, die über ein einziges öffentliches Subnetz verfügt und über das öffentliche Internet verbunden werden kann. Es wird die Standardsicherheitsgruppe verwendet, die für Port 5432 geöffnet ist. Wenn ich versuche, eine Verbindung herzustellen, schlägt dies fehl. Ich muss etwas sehr einfaches vermissen - aber ich bin ziemlich verloren.

Hier sind die Datenbankeinstellungen. Beachten Sie, dass sie wie folgt gekennzeichnet sind Publicly Accessible: RDS-Einstellungen

Beachten Sie, dass die Einstellungen für Sicherheitsgruppen offen sind (dies wird in den obigen RDS-Einstellungen durch den grünen "autorisierten" Hinweis neben dem Endpunkt bestätigt): Sicherheitsgruppeneinstellungen

Hier ist der Befehl, mit dem ich mich verbinden möchte:

psql --host=myinstance.xxxxxxxxxx.us-east-1.rds.amazonaws.com \
     --port=5432 
     --username=masteruser 
     --password 
     --dbname=testdb

Und dies ist das Ergebnis, das ich erhalte, wenn ich versuche, eine Verbindung von einem Yosemite MacBook Pro herzustellen (Hinweis: Es wird in eine IP-Adresse von 54 aufgelöst. *):

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?

Ich habe keine Art von Firewall aktiviert und kann mich mit öffentlichen PostgreSQL-Instanzen anderer Anbieter (z. B. Heroku) verbinden.

Tipps zur Fehlerbehebung wären sehr dankbar, da ich hier ziemlich ratlos bin.

Aktualisieren

Per Kommentar sind hier die eingehenden ACL-Regeln für die Standard-VPC: Netzwerk-ACL-Konfiguration

Edward Q. Bridges
quelle
1
Haben Sie sich mit den NetworkACLs herumgetrieben? Ich würde dort nach einer möglichen Einstellung suchen, die den Internetzugang blockieren könnte.
Optichip
Danke für die Antwort! Die ACLs scheinen nichts zu blockieren, da die erste Regel darin besteht, alle Ports von allen Quellen pro Anhang zuzulassen.
Edward Q. Bridges

Antworten:

27

Das Problem bestand darin, dass die eingehende Regel in der Sicherheitsgruppe eine Sicherheitsgruppe als Quelle angab. Das Problem wurde behoben, indem ich eine CIDR mit meiner IP-Adresse verwendete.

Edward Q. Bridges
quelle
6
Für alle, die nicht wissen, wie CIDR funktioniert. Wenn Ihre IP-Adresse 91.61.76.202 lautet (Sie können Ihre unter myipaddress.com finden ), legen Sie als Quelle 91.61.76.202/32
Tom G,
Möchten Sie einen Screenshot davon machen, wie diese Lösung aussieht?
Smaccoun
Ich würde mich freuen, aber ich habe diese Instanz nicht mehr online.
Edward Q. Bridges
11

War mit einem ähnlichen Problem konfrontiert, und so habe ich es gelöst:

Klicken Sie auf die Sicherheitsgruppe für die RDS-Instanz und überprüfen Sie die eingehenden Regeln. Sie könnten so etwas sehen:

Bildbeschreibung hier eingeben

Stellen Sie den IP-Bereich so ein, dass er Ihre IP enthält, oder wählen Sie "Überall" in der Dropdown-Liste "Quelle", um von localhost oder von einem beliebigen Ort aus darauf zuzugreifen:

Bildbeschreibung hier eingeben

Miguel Mota
quelle
Ja das funktioniert Ich habe die dort vorhandene benutzerdefinierte Regel beibehalten und eine neue Regel hinzugefügt, die meine IP-Adresse automatisch ermittelt hat.
MSC
1

Ich hatte ein ähnliches Problem beim Herstellen einer Verbindung zu postgres. Obwohl ich öffentlich auf true zugreifen konnte, konnte ich keine Verbindung herstellen.

Ich habe der Sicherheitsgruppe eine Regel für eingehende Nachrichten hinzugefügt, und jetzt funktioniert sie einwandfrei.

Bildbeschreibung hier eingeben

Abhash Kumar
quelle
0

Ich wollte nur meine Erkenntnisse hinzufügen, um jemandem Zeit zu sparen. Diese oben beschriebene Lösung funktionierte auf einer dev ec2-Instanz, aber nachdem ich auf einen neuen Server migriert hatte, funktionierte sie nicht mehr. Es stellte sich heraus, dass sich sowohl meine RDS-Instanz als auch meine EC2-Instanz in derselben VPC befanden, sodass die RDS-Instanz die öffentliche IP-Adresse, die ich ihrer Sicherheitsgruppe hinzugefügt hatte, nicht sehen konnte. Damit dies funktioniert, müssen Sie der Sicherheitsgruppe der RDS-Instanzen die private IP-Adresse der EC2-Instanz hinzufügen, die Sie in den Details finden.

Muhammed Bilal Iqbal
quelle
-1

Nachdem ich meine Postgres-Instanz erstellt hatte, listete meine Standardsicherheitsgruppe (rds-launch-wizard) nur meine IP-Adresse auf, sodass ich einen Typ des gesamten Datenverkehrs und eine Quelle von überall hinzufügen musste, bevor ich eine Verbindung herstellen konnte. Ich bin kein Netzwerkexperte, aber es ist seltsam, dass ich als eingehende Regel keine Verbindung mit meiner eigenen IP-Adresse herstellen konnte.

jones-chris
quelle