Wie behebe ich Fehler, wenn ich per IAM-Authentifizierung eine Verbindung zu einer Instance von Amazon RDS für PostgreSQL oder einem Aurora-PostgreSQL-Cluster herstelle?
Es treten Fehler auf, wenn ich über die Authentifizierung von AWS Identity Access Management (IAM) eine Verbindung zu meiner Instance von Amazon Relational Database Service (Amazon RDS) für PostgreSQL oder einem mit Amazon Aurora PostgreSQL kompatiblen Edition-Cluster herstelle.
Kurzbeschreibung
In den folgenden Fällen wird möglicherweise die Fehlermeldung „PAM authentication failed for user“ angezeigt:
- Die IAM-Authentifizierung ist deaktiviert.
- Die IAM-Richtlinie beinhaltet nicht die Aktion „rds-db:connect“.
- Die Rolle „rds_iam“ ist dem Datenbankbenutzer nicht zugeordnet.
- Die Verbindung ist falsch.
- Eine falsche IAM-Rolle wird verwendet.
Lösung
Hinweis: Wenn beim Ausführen von Befehlen über die AWS Command Line Interface (AWS CLI) Fehlermeldungen angezeigt werden, findest du unter Fehlerbehebung für die AWS CLI Informationen zum weiteren Vorgehen. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Die IAM-Authentifizierung ist deaktiviert.
Standardmäßig ist die IAM-Authentifizierung deaktiviert. Aktiviere die IAM-Authentifizierung für deine Instance von Amazon RDS für PostgreSQL oder deinen Aurora-PostgreSQL-kompatiblen Cluster.
Die IAM-Richtlinie beinhaltet nicht die Aktion „rds-db:connect“.
Um per IAM-Datenbankauthentifizierung eine Verbindung zu deiner DB-Instance herzustellen, aktualisiere die Richtlinie so, dass sie die Aktion rds-db:connect enthält.
Das Folgende ist eine Beispielrichtlinie:
{ "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 in der Richtlinie die richtige Ressourcen-ID und den richtigen Amazon-Ressourcennamen (ARN) verwendest.
Um die Ressourcen-ID einer DB-Instance zu ermitteln, wähle die DB-Instance oder den Cluster in der Amazon-Aurora- und RDS-Konsole und anschließend die Registerkarte Konfiguration. Weitere Informationen findest du unter Erstellen und Verwenden einer IAM-Richtlinie für den IAM-Datenbankzugriff.
Hinweis: Die IAM-Authentifizierung unterstützt keine servicespezifischen oder globalen Bedingungskontextschlüssel im Bedingungselement von Richtlinienanweisungen.
Die Rolle „rds_iam“ ist dem Datenbankbenutzer nicht zugeordnet.
Zur Nutzung der IAM-Authentifizierung mit PostgreSQL muss der Datenbankbenutzer die Rolle rds_iam annehmen. Um zu bestätigen, dass diese Rolle dem Benutzer zugeordnet ist, führe den folgenden Befehl im PostgreSQL-Client aus:
\du
Folgende Ausgabe wird erwartet:
List of roles Role name | Attributes | Member of ----------------+------------------------------------------------------------+------------------------------------------------------------- db_user_name | | {rds_iam} postgres | Create role, Create DB | {rds_superuser} | Password valid until infinity |
Die folgende Abfrage lässt sich 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 ihm die Rolle rds_iam zu erteilen:
CREATE USER db_user_name WITH LOGIN; GRANT rds_iam TO db_user_name;
Die Verbindung ist falsch.
Authentifizierungstoken enthalten mehrere Zeichen, deren Nutzung in der Befehlszeile schwierig sein kann. Speichere das Authentifizierungstoken stattdessen in einer Umgebungsvariablen. Nutze dann die Umgebungsvariable, wenn du eine Verbindung zum Aurora-PostgreSQL-Cluster herstellst.
Im Folgenden findest du ein Beispiel für die Generierung von Authentifizierungstoken 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, wird die folgende Fehlermeldung angezeigt:
"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""
Die IAM-Datenbankauthentifizierung erfordert eine SSL/TLS-Verbindung, da alle Daten, die an und von der DB-Instance übertragen werden, verschlüsselt sind. Nutze unbedingt eine SSL/TLS-Verbindung, um den vorherigen Fehler zu vermeiden. Es hat sich bewährt, die Option sslmode auf verify-full zu setzen und das Zertifikat in der Option sslrootcert in der Verbindungszeichenfolge anzugeben.
Informationen zum Herunterladen des neuesten Zertifikats der Zertifizierungsstelle (CA) findest du unter Verschlüsseln einer Verbindung zu einem DB-Cluster mithilfe von SSL/TLS.
Eine falsche IAM-Rolle wird verwendet.
Möglicherweise wird eine Fehlermeldung angezeigt, weil du das Authentifizierungstoken mithilfe einer falschen IAM-Rolle generierst. Führe den Befehl get-caller-identity aus, um die angenommene Rolle des aktuellen IAM-Benutzers zu überprüfen:
aws sts get-caller-identity
Ist die angenommene Rolle falsch, wechsle entweder von einem IAM-Benutzer zur richtigen IAM-Rolle oder nimm die richtige Rolle an. Wenn nach wie vor eine Fehlermeldung angezeigt wird, überprüfe, ob das AWS-Konto einer Organisation in AWS Organizations angehört. Gehört das Konto einer Organisation an, musst du eine Service-Kontrollrichtlinie (SCP) erstellen, die rds-db: zulässt. Weitere Informationen findest du unter Auswirkungen von SCPs auf Berechtigungen.
Prüfe außerdem, ob es eine Hierarchie des IAM-Benutzers gibt, die nicht über die Berechtigung rds-db verfügt. Weitere Informationen findest du unter So legst du mithilfe von Service-Kontrollrichtlinien einen Berechtigungs-Integritätsschutz für alle Konten in deiner AWS-Organisation fest.
Wenn du Berechtigungsgrenzen für IAM-Entitäten verwendest, lasse die Aktion rds-db:connect für den IAM-Benutzer oder die IAM-Rolle zu. Informationen zum Ändern der Berechtigungsgrenzen für einen Benutzer findest du unter So änderst du die Berechtigungsgrenze für einen Benutzer.
Verbindung über ein anderes AWS-Konto herstellen
Wenn du die Verbindung zu einem Aurora-PostgreSQL-kompatiblen Cluster über ein anderes Konto herstellst, musst du das Authentifizierungstoken mithilfe temporärer Anmeldeinformationen aus dem Konto des Clusters generieren. Führe den folgenden AWS-CLI-Befehl assume-role aus, um eine Rolle im Konto des Clusters anzunehmen:
aws sts assume-role \ --role-arn arn:aws:iam::CLUSTER-ACCOUNT-ID:role/ROLE-NAME \ --role-session-name cross-account-session
Hinweis: Ersetze CLUSTER-ACCOUNT-ID durch die ID des AWS-Kontos, in dem sich der Cluster befindet, und ROLE-NAME durch deinen IAM-Rollennamen.
Exportiere anschließend die temporären Anmeldeinformationen und generiere das Authentifizierungstoken:
export AWS_ACCESS_KEY_ID=TEMPORARY-ACCESS-KEY export AWS_SECRET_ACCESS_KEY=TEMPORARY-SECRET-KEY export AWS_SESSION_TOKEN=TEMPORARY-SESSION-TOKEN export PGPASSWORD="$(aws rds generate-db-auth-token --hostname CLUSTER-ENDPOINT --port 5432 --region REGION --username DB-USER-NAME)"
Hinweis: Ersetze TEMPORARY-ACCESS-KEY, TEMPORARY-SECRET-KEY und TEMPORARY-SESSION-TOKEN durch die Werte aus der Ausgabe von assume-role. Ersetze CLUSTER-ENDPOINT durch deinen Cluster-Endpunkt, REGION durch deine AWS-Region und DB-USER-NAME durch deinen Datenbank-Benutzernamen.
Wenn du das Token direkt mit den Anmeldeinformationen des Quellkontos generierst, wird selbst bei richtiger Konfiguration aller IAM-Richtlinien und Vertrauensbeziehungen eine Fehlermeldung angezeigt, wonach die Authentifizierung des Passworts fehlgeschlagen ist. Das Token muss aus Anmeldeinformationen generiert werden, die demselben Konto wie der Cluster angehören.
Weiterführende Informationen
IAM-Datenbankauthentifizierung für Aurora
Herstellen einer Verbindung zum DB-Cluster mithilfe der IAM-Authentifizierung
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr