Direkt zum Inhalt

Wie behebe ich Probleme, wenn ich eine Verbindung zu meinem DB-Cluster in Aurora PostgreSQL-Compatible herstelle?

Lesedauer: 8 Minute
0

Ich möchte Verbindungsprobleme mit meinem Datenbank (DB)-Cluster in Amazon Aurora PostgreSQL-Compatible Edition beheben.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei AWS CLI-Fehlern. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Stelle sicher, dass du die richtigen Verbindungsparameter konfiguriert hast

Gehe wie folgt vor:

  1. Öffne die Amazon Relational Database Service (Amazon RDS)-Konsole.
  2. Wähle im Navigationsbereich Datenbanken aus.
  3. Wähle deinen DB-Cluster von Aurora PostgreSQL-Compatible aus.
  4. Beachte auf der Registerkarte Konnektivität und Sicherheit die folgenden Werte:<br id=hardline_break/> Endpunkt für Writer oder Reader<br id=hardline_break/> Standard-Portnummer 5432
  5. Stelle sicher, dass du den richtigen Datenbanknamen, Benutzernamen und das richtige Passwort hast.

Führe den folgenden Befehl psql aus, um die Verbindung zu testen:

psql -h your-cluster-endpoint -p 5432 -U your-username -d your-database-name

Hinweis: Ersetze your-cluster-endpoint durch deinen Cluster-Endpunkt, your-username durch deinen Datenbank-Benutzernamen und your-database-name durch deinen Datenbanknamen.

Testen der Netzwerkkonnektivität

Führe die folgenden Befehle aus, um zu überprüfen, ob der Client den DB-Cluster-Endpunkt von Aurora PostgreSQL-Compatible erreichen kann.

Telnet verwenden

Führe dann den folgenden telnet-Befehl aus:

telnet your-cluster-endpoint 5432

Hinweis: Ersetze your-cluster-endpoint durch deinen Cluster-Endpunkt.

Wenn die Verbindung erfolgreich ist, ähnelt die Ausgabe der folgenden:

Trying xxx.xxx.xxx.xxx...
Connected to your-cluster-endpoint.

Netcat verwenden

Wenn Telnet nicht verfügbar ist, führe den folgenden netcat-Befehl aus:

nc -zv your-cluster-endpoint 5432

Hinweis: Ersetze your-cluster-endpoint durch deinen Cluster-Endpunkt.

Wenn die Verbindung erfolgreich ist, ähnelt die Ausgabe der folgenden:

Connection to your-cluster-endpoint 5432 port [tcp/postgresql] succeeded!

Wenn bei den vorherigen Befehlen ein Timeout oder ein Fehler auftritt, liegt ein Problem mit der Netzwerkkonnektivität vor. Stelle sicher, dass du die richtigen Regeln der Sicherheitsgruppen für eingehenden Datenverkehr konfiguriert hast.

Die Regeln der Sicherheitsgruppe für eingehenden Datenverkehr überprüfen

Gehe wie folgt vor:

  1. Öffne die Amazon-RDS-Konsole.
  2. Wähle im Navigationsbereich Datenbanken aus.
  3. Wähle deinen DB-Cluster von Aurora PostgreSQL-Compatible aus.
  4. Notiere dir im Abschnitt Konnektivität und Sicherheit den Namen der Sicherheitsgruppe unter VPC-Sicherheitsgruppen.
  5. Öffne die Amazon Virtual Private Cloud (Amazon VPC)-Konsole.
  6. Wähle im Navigationsbereich Sicherheitsgruppen aus.
  7. Wähle deine Sicherheitsgruppe aus.
  8. Wähle Regeln für eingehenden Datenverkehr.
  9. Vergewissere dich, dass es eine Regel mit den folgenden Einstellungen gibt:<br id=hardline_break/> Der Typ ist PostgreSQL oder benutzerdefiniertes TCP.<br id=hardline_break/> Der Port ist 5432.<br id=hardline_break/> Die Quelle ist die IP-Adresse des Clients oder der entsprechende CIDR-Block.

Informationen zum Hinzufügen einer Regel für eingehenden Datenverkehr zu deiner Sicherheitsgruppe mithilfe der Amazon-VPC-Konsole findest du unter Sicherheitsgruppenregeln konfigurieren.

Um die AWS CLI zum Hinzufügen einer Regel für eingehenden Datenverkehr zu verwenden, führe den folgenden Befehl authorize-security-group-ingress aus:

aws ec2 authorize-security-group-ingress \
  --group-id your-group-id \
  --protocol tcp \
  --port 5432 \
  --cidr your-IP-address/32 \
  --region your-region

Hinweis: Ersetze your-group-id durch deine Sicherheitsgruppen-ID, your-IP-address/32 durch deine IP-Adresse oder deinen CIDR-Block und your-region durch deine AWS-Region.

Überprüfen der VPC-Netzwerk-ACL-Regeln für eingehenden Datenverkehr

Gehe wie folgt vor, um die Netzwerk-ACL-Regeln zu überprüfen:

  1. Öffne die Amazon-VPC-Konsole.
  2. Wähle im Navigationsbereich Netzwerk-ACLs aus.
  3. Wähle die Netzwerk-ACL aus, die dem DB-Subnetz zugeordnet ist.
  4. Wähle die Registerkarte Regeln für eingehenden Datenverkehr aus.
  5. Vergewissere dich, dass es eine Regel mit den folgenden Einstellungen gibt:<br id=hardline_break/> Der Typ ist PostgreSQL (5432) oder All Traffic (der gesamte Datenverkehr).<br id=hardline_break/> Die Quelle ist der IP-Adressbereich des Clients oder 0.0.0.0/0.

Informationen zum Hinzufügen einer Netzwerk-ACL-Regel findest du unter Regeln hinzufügen.

Überprüfen der Subnetz- und Routing-Konfiguration

Gehe wie folgt vor, um die Subnetzkonfiguration zu überprüfen:

  1. Öffne die Amazon-RDS-Konsole.
  2. Wähle im Navigationsbereich Datenbanken aus.
  3. Wähle deinen DB-Cluster von Aurora PostgreSQL-Compatible aus.
  4. Notiere dir auf der Registerkarte Konnektivität und Sicherheit den Namen der DB-Subnetzgruppe.
  5. Wähle den Link zur Subnetzgruppe.
  6. Stelle sicher, dass sich die Subnetze in den richtigen Availability Zones und der richtigen VPC befinden.

Informationen zur Überprüfung der Konfiguration der Routing-Tabellen findest du unter Ermitteln der Routing-Tabelle für ein Subnetz.

Überprüfen der Berechtigungen auf Datenbankebene

Stelle sicher, dass der Datenbankbenutzer über die erforderlichen Berechtigungen verfügt, um eine Verbindung mit der Datenbank herzustellen.

Eine Verbindung als primäre(r) Benutzer:in herstellen

Führe den folgenden psql-Befehl aus:

psql -h your-cluster-endpoint -p 5432 -U primary-username -d postgres

Hinweis: Ersetze your-cluster-endpoint durch deinen Cluster-Endpunkt und primary-username durch deinen primären Benutzernamen.

Überprüfen der Benutzerberechtigungen

Nachdem du als primäre(r) Benutzer:in eine Verbindung hergestellt hast, führe die folgenden SQL-Abfragen aus, um die Benutzerberechtigungen zu überprüfen.

Führe den folgenden Befehl aus, um alle Datenbankbenutzer aufzulisten:

SELECT usename, usesuper, usecreatedb, useconnlimit FROM pg_user ORDER BY usename;

Führe den folgenden Befehl aus, um bestimmte Benutzerberechtigungen zu überprüfen:

SELECT usename, usesuper, usecreatedb, useconnlimit FROM pg_user WHERE usename = 'your-username';

Hinweis: Ersetze your-username durch den Benutzernamen des Benutzers, dessen Berechtigungen du überprüfen möchtest.

Führe den folgenden Befehl aus, um Datenbanken und ihre Besitzer aufzulisten:

SELECT datname, datowner, datacl FROM pg_database WHERE datname NOT IN ('template0', 'template1');

Benutzerberechtigungen erstellen oder ändern

Wenn der/die Benutzer:in nicht existiert oder nicht über ausreichende Berechtigungen verfügt, führe die folgenden Befehle aus.

Führe den folgenden Befehl aus, um einen neuen Benutzer zu erstellen:

CREATE USER your_username WITH PASSWORD 'your_password';

Hinweis: Ersetze your_username durch den Benutzernamen des Benutzers, den du erstellst, und your_password durch ein sicheres Passwort.

Um dem/der Benutzer:in die Berechtigung zu erteilen, eine Verbindung zu einer Datenbank herzustellen, führe den folgenden Befehl aus:

GRANT CONNECT ON DATABASE your_database_name TO your_username;

Hinweis: Ersetze your_database_name durch deinen Datenbanknamen und your_username durch den Benutzernamen des Benutzers, dem du die Berechtigung erteilst.

Führe den folgenden Befehl aus, um dem/der Benutzer:in die Berechtigung zur Verwendung eines Schemas zu erteilen:

GRANT USAGE ON SCHEMA public TO your_username;

Hinweis: Ersetze your_username durch den Benutzernamen des Benutzers, dem du die Berechtigung erteilst.

Um dem/der Benutzer:in die Berechtigung für eine Tabelle zu erteilen, führe den folgenden Befehl aus:

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO your_username;

Hinweis: Ersetzeyour_username durch den Benutzernamen des Benutzers, dem du die Berechtigung erteilst.

Verbindungskontingente überwachen

Prüfe, ob der DB-Cluster sein maximales Verbindungskontingent erreicht hat.

Aktuelle Verbindungen überprüfen

Stelle eine Verbindung zum DB-Cluster her und führe dann die folgenden SQL-Abfragen aus.

Führe den folgenden Befehl aus, um die aktuelle Verbindungsanzahl zu überprüfen:

SELECT count(*) as current_connections FROM pg_stat_activity WHERE state = 'active';

Führe den folgenden Befehl aus, um die Einstellung für maximale Verbindungen zu überprüfen:

SHOW max_connections;

Führe den folgenden Befehl aus, um aktive Verbindungen nach Benutzern anzuzeigen:

SELECT usename, count(*) as connection_count FROM pg_stat_activity GROUP BY usename ORDER BY connection_count DESC;

Den Parameter max_connections ändern

Informationen zum Ändern des Parameters max_connections findest du unter Parameter in einer DB-Cluster-Parametergruppe in Amazon Aurora ändern.

Testen der SSL/TLS-Verbindungen

Aurora PostgreSQL-Compatible unterstützt verschlüsselte Verbindungen. Teste sowohl verschlüsselte als auch unverschlüsselte Verbindungen.

Testen ohne SSL

Um die Verbindung ohne SSL zu testen, führe den folgenden psql-Befehl aus:

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=disable"

Hinweis: Ersetze your-cluster-endpoint durch deinen Cluster-Endpunkt, your-database durch deinen Datenbanknamen und your-username durch deinen Benutzernamen.

Testen mit SSL

Führe den folgenden psql-Befehl aus, um die Verbindung mit SSL zu testen:

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=require"

Hinweis: Ersetze your-cluster-endpoint.cluster durch deinen Cluster-Endpunkt, your-database durch deinen Datenbanknamen und your-username durch deinen Benutzernamen.

Das RDS-CA-Zertifikat herunterlanden und es verwenden

Führe den folgenden wget-Befehl aus, um das RDS-Zertifikat der Zertifizierungsstelle (CA) herunterzuladen:

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

Führe den folgenden psql-Befehl aus, um das Zertifikat zu verwenden:

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=verify-full sslrootcert=global-bundle.pem"

Hinweis: Ersetze your-cluster-endpoint durch deinen Cluster-Endpunkt, your-database durch deinen Datenbanknamen und your-username durch deinen Benutzernamen.

Problembehandlung bei der IAM-Datenbankauthentifizierung

Wenn du die AWS Identity and Access Management (IAM)-Datenbankauthentifizierung verwendest, gehe wie folgt vor.

Authentifizierungstoken generieren

Um ein Authentifizierungstoken zu generieren, führe den folgenden AWS-CLI-Befehl generate-db-auth-token aus:

aws rds generate-db-auth-token \
  --hostname your-cluster-endpoint \
  --port 5432 \
  --region your-region \
  --username your-iam-username

Hinweis: Ersetze your-cluster-endpoint durch deinen Cluster-Endpunkt, your-region durch deine Region und your-iam-username durch deinen IAM-Datenbank-Benutzernamen.

Die IAM-Authentifizierung verwenden, um eine Verbindung herzustellen

Führe den folgenden psql-Befehl aus:

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-iam-username password=your-generated-token"

Hinweis: Ersetze your-cluster-endpoint durch deinen Cluster-Endpunkt, your-database durch deinen Datenbanknamen und your-iam-username durch deinen IAM-fähigen Benutzernamen. Ersetze außerdem your-generated-token durch das von dir generierte Token.

Überprüfen der IAM-Richtlinienberechtigungen

Stelle sicher, dass du die folgende Richtlinie an den/die IAM-Benutzer:in oder die IAM-Rolle angefügt hast:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds-db:connect"
      ],
      "Resource": [
        "arn:aws:rds-db:region:account-id:dbuser:cluster-resource-id/your-iam-username"
      ]
    }
  ]
}

Hinweis: Ersetze region durch deine Region, account-id durch deine AWS-Konto-ID, cluster-resource-id durch deine DB-Cluster-Ressourcen-ID und your-iam-username durch deinen IAM-Datenbank-Benutzernamen.

Weitere Informationen zur Problembehandlung bei der Verbindung findest du unter Problembehandlung bei Verbindungen zur Instance von RDS für PostgreSQL.

Ähnliche Informationen

Steuern des Datenverkehrs zu AWS-Ressourcen mithilfe von Sicherheitsgruppen

Steuern des Subnetz-Datenverkehrs mit Netzwerk-Zugriffssteuerungslisten

AWS OFFICIALAktualisiert vor 5 Monaten