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
:
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):
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:
quelle
Antworten:
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.
quelle
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:
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:
quelle
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.
quelle
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.
quelle
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.
quelle