Wie verwende ich die IAM-Authentifizierung, um eine Verbindung zu meinem Amazon RDS für PostgreSQL oder Amazon Aurora-PostgreSQL herzustellen?

Lesedauer: 4 Minute
0

Ich verfüge über eine Amazon Relational Database Service (Amazon RDS) für PostgreSQL- oder eine Amazon Aurora PostgreSQL-Compatible Edition-DB-Instance. Ich möchte die AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Authentifizierung verwenden, um eine Verbindung zu meiner Instance herzustellen.

Kurzbeschreibung

Die IAM-Datenbankauthentifizierung ist sicherer als native Authentifizierungsmethoden. Weitere Informationen findest du unter IAM-Datenbankauthentifizierung für MariaDB, MySQL und PostgreSQL.

Gehe wie folgt vor, um die IAM-Datenbankauthentifizierung mithilfe von IAM-Rollen einzurichten:

  1. Aktiviere die IAM-DB-Authentifizierung auf der RDS-DB-Instance.
  2. Erstelle einen IAM-Benutzer und füge eine IAM-Richtlinie hinzu, die den Datenbankbenutzer der IAM-Rolle zuordnet.
  3. Hänge die IAM-Rolle an die Amazon Elastic Compute Cloud (Amazon EC2)-Instance an.
  4. Generiere einen AWS-Authentifizierungstoken, um die IAM-Rolle zu identifizieren.
  5. Lade die SSL-Stammzertifikatsdatei oder die Zertifikats-Bundle-Datei herunter.
  6. Verwende die Anmeldeinformation deiner IAM-Rolle und das Authentifizierungstoken oder ein SSL-Zertifikat, um eine Verbindung zur RDS-DB-Instance herzustellen.

Wenn du MySQL ausführst, findest du weitere Informationen unter Wie erlaube ich Benutzern, sich mit ihren IAM-Anmeldeinformationen bei einer Amazon RDS für MySQL-DB-Instance zu authentifizieren?

Lösung

Voraussetzungen

Folgende Voraussetzungen müssen erfüllt sein:

  • Eine Amazon RDS für PostgreSQL-DB-Instance oder einen Aurora PostgreSQL-kompatiblen Cluster starten, der die IAM-Datenbankauthentifizierung unterstützt
  • Eine EC2-Instance starten, um eine Verbindung zur Datenbank herzustellen

Weitere Informationen findest du unter IAM-Datenbankauthentifizierung für Aurora und IAM-Datenbankauthentifizierung für Amazon RDS.

Verwende das Runbook AWSSupport-TroubleshootRDSIAMAuthentication, um die für die IAM-Authentifizierung mit einer Amazon RDS-Instance oder einem Aurora-Cluster erforderliche Konfiguration zu überprüfen oder Fehler bei der IAM-Authentifizierung zu beheben. Weitere Informationen findest du unter AWSupport-TroubleshootRDSIAMAuthentication.

Verwendung der IAM-Datenbankauthentifizierung

Verwende die IAM-Datenbankauthentifizierung für PostgreSQL, um eine Verbindung zu einer RDS-DB-Instance oder einem Aurora PostgreSQL-kompatiblen DB-Cluster herzustellen:

  1. Aktiviere die IAM-Authentifizierung auf deiner RDS-DB-Instance oder deinem Aurora-Cluster.

  2. Erstelle einen IAM-Benutzer und hänge dann die folgende Richtlinie an:

    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "rds-db:connect"
          ],
          "Resource": [
            "arn:aws:rds-db:REGION:ACCOUNT:dbuser:RESOURCE_ID/iamuser"
          ]
        }
      ]
    }

    Hinweis: Ersetze iamuser durch die IAM-Benutzerinformationen.

  3. Melde dich als Hauptbenutzer bei deiner Amazon RDS für PostgreSQL-DB-Instance oder deinem Aurora PostgreSQL-kompatiblen Cluster an:
    psql

    psql -h {database or cluster endpoint} -U {Master username} -d {database name}

    pgAdmin

    Wähle im pgAdmin-Navigationsbereich die Option Server aus. Wähle dann den Servernamen aus und gib das Hauptbenutzerpasswort ein.

  4. Erstelle einen untergeordneten Benutzer, der denselben Namen wie der IAM-Benutzer hat:

    CREATE USER iamuser WITH LOGIN; GRANT rds_iam TO iamuser;
  5. Führe generate-db-auth-token mit dem von dir erstellten Benutzernamen aus. Durch diese Aktion wird ein temporäres Passwort erstellt, das du in einem späteren Schritt verwendest:

    [ec2-user@ip-172-31-24-237 ~]$ export RDSHOST="aurorapg-ssl.cluster-XXXXXXXXXXX.us-west-2.rds.amazonaws.com"[ec2-user@ip-172-31-24-237 ~]$ export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username iamuser)"
    [ec2-user@ip-172-31-24-237 ~]$ echo $PGPASSWORD
    aurorapg-ssl.cluster-XXXXXXX.us-west-2.rds.amazonaws.com:5432/?Action=connect&DBUser=iamuser&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Credential=AKIA2O5GXNVDTAMABZFE%2F20190909%2Fus-west-2%2Frds-db%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Date=20190909T171907Z&X-Amz-Signature=ead28003477c3082e5a17529ac8316db4f4bdf2fa8f79d3aaea806e9bafa2673
    [ec2-user@ip-172-31-24-237 ~]$
  6. Um in pgAdmin eine neue Serververbindung herzustellen, wähle die Registerkarte Allgemein aus und deaktiviere das Feld Jetzt verbinden. Gib auf der Registerkarte Verbindung den Hostnamen, den Port und den Benutzernamen ein, jedoch noch nicht das Passwort. Stelle auf der Registerkarte SSL den SSL-Modus auf Erforderlich ein und speichere dann die Serververbindung.

  7. (Optional) Auf der Registerkarte SSL kannst du den SSL-Modus in verify-full ändern. Gib für den ausgewählten SSL-Modus den Pfad des Zertifikats ein. Führe den folgenden Befehl aus, um den Pfad herunterzuladen:

    wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

    Wenn deine Anwendung keine Zertifikatsketten akzeptiert, lade das Zertifikats-Bundle herunter, das sowohl alte als auch neue Stammzertifikate enthält:

    $ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
  8. Stelle eine Verbindung zum Server her. Gib das temporäre Token ein, das generate-db-auth-token für den Benutzer iamuser generiert, wenn du dazu aufgefordert wirst.

    Führe für psql den folgenden Befehl aus, um eine Verbindung herzustellen. In diesem Beispiel wird die Umgebungsvariable $PGPASSWORD verwendet, die du bei der Generierung des Tokens festgelegt hast. Diese Variable initiiert die Verbindung:

    psql -h aurorapg-ssl.cfkx5hi8csxj.us-west-2.rds.amazonaws.com -p 5432 "sslmode=verify-full sslrootcert=rds-ca-2019-root.pem dbname=aurora_pg_ssl user=iamuser"

    **Hinweis:**Jedes Token läuft 15 Minuten nach der Generierung ab. Wenn du versuchst, die Verbindung mit demselben Token wiederherzustellen, schlägt die Verbindung fehl. Du musst ein neues Token generieren.

Wenn du immer noch eine Fehlermeldung erhältst, die der Fehlermeldung PAM authentication failed for your user ähnelt, überprüfe, ob das AWS-Konto Teil einer Organisation von AWS Organizations ist. Wenn das Konto Teil einer Organisation ist, füge rds-db:* zur Service-Kontrollrichtlinie (SCP) der Organisation hinzu, zu der das Konto gehört. Prüfe außerdem, ob es eine Hierarchie des IAM-Benutzers oder der IAM-Rolle 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.

Ähnliche Informationen

Verwendung der IAM-Authentifizierung mit der Aurora PostgreSQL-kompatiblen Edition

Rotation deines SSL/TLS-Zertifikats.