Wie behebe ich Fehler, die ich erhalte, wenn ich die IAM-Authentifizierung verwende, um eine Verbindung zu einer Amazon RDS für PostgreSQL-Instance oder einem Aurora PostgreSQL-Cluster herzustellen?
Ich möchte eine Verbindung zu meinem Amazon Relational Database Service (Amazon RDS) für eine PostgreSQL-Instance oder einen Amazon Aurora PostgreSQL-kompatiblen Edition-Cluster herstellen. Wenn ich die AWS Identity Access Management (IAM)-Authentifizierung für die Verbindung verwende, erhalte ich die Fehlermeldung „PAM authentication failed for user“ (Die PAM-Authentifizierung ist für den Benutzer fehlgeschlagen).
Behebung
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 der AWS CLI. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.
Die IAM-Authentifizierung ist deaktiviert
Die IAM-Authentifizierung ist standardmäßig deaktiviert. Aktiviere die IAM-Authentifizierung für deine RDS für PostgreSQL-Instance oder deinen Aurora PostgreSQL-kompatiblen Cluster.
Die IAM-Richtlinie beinhaltet nicht die Aktion „rds-db:connect“
Um die IAM-Datenbankauthentifizierung für die Verbindung mit deiner DB-Instance zu verwenden, aktualisiere deine Richtlinie, sodass sie die Aktion rds-db:connect enthält.
Beispiel für eine Richtlinie:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ " arn:aws:rds-db:region:account-id:dbuser:(DbiResourceId for RDS PostgreSQL or DbClusterResourceId for Aurora PostgreSQL)/db_user_name" ] } ] }
Hinweis: Stelle sicher, dass du die richtige Ressourcen-ID und den richtigen ARN in der Richtlinie verwendest. Um die Ressourcen-ID einer DB-Instance zu finden, wähle die DB-Instance oder den Cluster auf der Amazon RDS-Konsole aus und wähle dann den Tab Konfiguration aus.
Weitere Informationen findest du unter Erstellen und Verwenden einer IAM-Richtlinie für den IAM-Datenbankzugriff.
Hinweis: Die IAM-Authentifizierung unterstützt keine dienstspezifischen oder globalen Bedingungskontextschlüssel im Bedingungselement von Richtlinienanweisungen.
Die Rolle „rds_iam“ ist dem Datenbankbenutzer nicht zugeordnet
Um die IAM-Authentifizierung mit PostgreSQL zu verwenden, muss der Datenbankbenutzer die Rolle rds_iam übernehmen. Um zu bestätigen, dass diese Rolle dem Benutzer zugeordnet ist, führe den folgenden Befehl im PostgreSQL-Client aus:
\du
Erwartetes Ergebnis:
List of roles Role name | Attributes | Member of ----------------+------------------------------------------------------------+------------------------------------------------------------- db_user_name | | {rds_iam} postgres | Create role, Create DB | {rds_superuser} | Password valid until infinity |
Du kannst die folgende Abfrage auch auf jeder Plattform ausführen:
SELECT r.rolname, ARRAY( SELECT b.rolname FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) WHERE m.member = r.oid ) AS memberof FROM pg_catalog.pg_roles r WHERE r.rolname !~ '^pg_' ORDER BY 1;
Führe den folgenden Befehl aus, um einen Benutzer zu erstellen und die Rolle rds_iam zu gewähren:
CREATE USER db_user_name WITH LOGIN; GRANT rds_iam TO db_user_name;
Die Verbindung ist falsch
Authentifizierungstoken enthalten mehrere Zeichen, deren Verwendung in der Befehlszeile schwierig sein kann. Speichere das Authentifizierungstoken stattdessen in einer Umgebungsvariable. Verwende dann die Umgebungsvariable, wenn du eine Verbindung zu deinem Aurora PostgreSQL-Cluster herstellst.
Beispiel für die Generierung eines Authentifizierungstokens mit Umgebungsvariablen:
export RDSHOST='aurorapostgresql.cluster-abcdef12ghi.us-east-1.rds.amazonaws.com' export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-east-1 --username db_user_name)" psql "host=$RDSHOST port=5432 sslmode=verify-full sslrootcert=global-bundle.pem dbname=postgres user=db_user_name password=$PGPASSWORD"
Wenn der Client versucht, ohne SSL/TLS-Verbindung eine Verbindung zur DB-Instance herzustellen, erhältst du die folgende Fehlermeldung:
"FATAL: no pg_hba.conf entry for host "host.ip", user "<username>", database "postgres", SSL off FATAL: password authentication failed for user "db_user_name"" („SCHWERWIEGEND: kein pg_hba.conf-Eintrag für Host „host.ip“, Benutzer „“, Datenbank „postgres“, SSL aus SCHWERWIEGEND: Passwortauthentifizierung für Benutzer „db_user_name“ fehlgeschlagen“)
Die IAM-Datenbankauthentifizierung erfordert eine SSL/TLS-Verbindung, da alle Daten, die du an und von der RDS-DB-Instance überträgst, verschlüsselt sind. Stelle sicher, dass du eine SSL/TLS-Verbindung verwendest, um den vorherigen Fehler zu vermeiden. Es hat sich bewährt, die Option sslmode als verify-full zu verwenden und das Zertifikat in der Option sslrootcert in der Verbindungszeichenfolge anzugeben.
Informationen zum Herunterladen des neuesten Zertifikats der Zertifizierungsstelle (CA) findest du unter Verwenden von SSL/TLS zum Verschlüsseln einer Verbindung zu einem DB-Cluster.
Du verwendest eine falsche IAM-Rolle
Möglicherweise erhältst du eine Fehlermeldung, weil du eine falsche IAM-Rolle verwendest, um das Authentifizierungstoken zu generieren. Führe den Befehl get-caller-identity aus, um die angenommene Rolle des aktuellen IAM-Benutzers zu überprüfen:
aws sts get-caller-identity
Wenn die angenommene Rolle falsch ist, wechsle entweder von einem IAM-Benutzer zur richtigen IAM-Rolle oder übernimm die richtige Rolle.
Wenn du immer noch eine Fehlermeldung erhältst, überprüfe, ob das AWS-Konto Teil einer AWS Organizations-Organisation ist. Wenn das Konto Teil einer Organisation ist, erstelle eine Service-Kontrollrichtlinie (SCP), die rds-db: zulässt. Weitere Informationen findest du unter SCP-Auswirkungen auf Berechtigungen.
Prüfe außerdem, ob es eine Hierarchie des IAM-Benutzers gibt, die nicht über die rds-db-Berechtigung verfügt. Weitere Informationen findest du unter So verwendest du Service-Kontrollrichtlinien, um einen Berechtigungs-Integritätsschutz für alle Konten in deiner AWS-Organisation festzulegen.
Wenn du Berechtigungsgrenzen für IAM-Entitäten verwendest, lasse die Aktion rds-db:connect für deinen IAM-Benutzer oder deine IAM-Rolle zu. Informationen zum Ändern der Berechtigungsgrenzen für einen Benutzer findest du unter Ändern der Berechtigungsgrenze für einen Benutzer.
Ähnliche Videos


Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 6 Monaten
- AWS OFFICIALAktualisiert vor 5 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren