Wie stelle ich mithilfe der IAM-Authentifizierung eine Verbindung zu meinem Amazon RDS für PostgreSQL oder Amazon-Aurora-PostgreSQL her?

Lesedauer: 5 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)-Authentifizierung verwenden, um eine Verbindung zu meiner Instance herzustellen.

Kurzbeschreibung

Die IAM-Datenbankauthentifizierung ist aus den folgenden Gründen sicherer als native Authentifizierungsmethoden:

  • IAM verwendet Ihre AWS-Zugriffsschlüssel, um Datenbank-Authentifizierungstoken zu generieren. Sie müssen die Anmeldeinformationen des Datenbankbenutzers nicht speichern.
  • Authentifizierungstoken haben eine Lebensdauer von 15 Minuten, sodass Sie das Zurücksetzen von Passwörtern nicht erzwingen müssen.
  • Die IAM-Datenbankauthentifizierung erfordert eine SSL-Verbindung. Hierdurch werden alle Daten verschlüsselt, die Sie zu und von Ihrer Amazon-RDS-DB-Instance übertragen.
  • Wenn Ihre Anwendung auf Amazon Elastic Compute Cloud (Amazon EC2) ausgeführt wird, können Sie die Anmeldeinformationen des Amazon-EC2-Instance-Profils verwenden, um auf die Datenbank zuzugreifen. Sie müssen keine Datenbankkennwörter auf Ihrer Instance speichern.

Gehen Sie folgendermaßen vor, um die IAM-Datenbankauthentifizierung mithilfe von IAM-Rollen einzurichten:

  1. Aktivieren Sie die IAM-DB-Authentifizierung auf der RDS-DB-Instance.
  2. Erstellen Sie einen IAM-Benutzer und fügen Sie eine IAM-Richtlinie hinzu, die den Datenbankbenutzer der IAM-Rolle zuordnet.
  3. Hängen Sie die IAM-Rolle an die EC2-Instance an.
  4. Generieren Sie ein AWS-Authentifizierungstoken, um die IAM-Rolle zu identifizieren.
  5. Laden Sie die SSL-Stammzertifikatsdatei oder die Zertifikatspaketdatei herunter.
  6. Um eine Verbindung zur RDS-DB-Instance herzustellen, verwenden Sie die Anmeldeinformation Ihrer IAM-Rolle und das Authentifizierungstoken oder ein SSL-Zertifikat.

Wenn Sie MySQL ausführen, finden Sie weitere Informationen unter Wie erlaube ich Benutzern, sich mit ihren IAM-Anmeldeinformationen bei einer Amazon RDS for MySQL-DB-Instance zu authentifizieren?

Lösung

Bevor Sie beginnen, müssen Sie die folgenden Voraussetzungen erfüllen:

  • Starten Sie eine Amazon RDS for PostgreSQL-DB-Instance oder einen Aurora PostgreSQL-Compatible-Cluster, der die IAM-Datenbankauthentifizierung unterstützt
  • Starten Sie eine EC2-Instance, um eine Verbindung zur Datenbank herzustellen

Weitere Informationen finden Sie unter IAM-Datenbankauthentifizierung für Aurora und IAM-Datenbankauthentifizierung für Amazon RDS.

Um eine Verbindung zu einer RDS-DB-Instance oder einem Aurora PostgreSQL-Compatible-DB-Cluster herzustellen, verwenden Sie die IAM-Datenbankauthentifizierung für PostgreSQL:

  1. Aktivieren Sie die IAM-Authentifizierung auf Ihrer RDS-DB-Instance oder Ihrem Aurora-Cluster.

  2. Erstellen Sie einen IAM-Benutzer und hängen Sie 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: Ersetzen Sie iamuser durch die IAM-Benutzerinformationen.

  3. Melden Sie sich als Hauptbenutzer bei Ihrer Amazon RDS for PostgreSQL-DB-Instance oder Ihrem Aurora PostgreSQL-Compatible-Cluster an:

    psql

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

    pgAdmin

    Wählen Sie im pgAdmin-Navigationsbereich die Option Server aus. Wählen Sie dann den Servernamen aus und geben Sie das Hauptbenutzerkennwort ein.

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

    CREATE USER iamuser WITH LOGIN;
    GRANT rds_iam TO iamuser;
  5. Führen Sie generate-db-auth-token mit dem von Ihnen erstellten Benutzernamen aus. Hierdurch wird ein temporäres Passwort erstellt, das Sie in einem späteren Schritt verwenden:

    [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ählen Sie die Registerkarte Allgemein aus und deaktivieren Sie das Feld Jetzt verbinden. Geben Sie auf der Registerkarte Verbindung den Hostnamen, den Port und den Benutzernamen ein, jedoch noch nicht das Passwort. Stellen Sie auf der Registerkarte SSL den SSL-Modus auf Erforderlich ein und speichern Sie die Serververbindung.

  7. (Optional) Auf der Registerkarte SSL können Sie den SSL-Modus zu verify-full ändern. Geben Sie für den ausgewählten SSL-Modus den Pfad des Zertifikats ein. Führen Sie den folgenden Befehl aus, um den Pfad herunterzuladen:

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

    Hinweis: 2015-Root-Zertifikate sind 2020 abgelaufen. Informationen zum Umstieg auf ein 2019-Root-Zertifikat finden Sie unter Rotation Ihres SSL/TLS-Zertifikats.

    Wenn Ihre Anwendung keine Zertifikatsketten akzeptiert, laden Sie das Zertifikatspaket herunter, das sowohl das alte als auch das neue Stammzertifikat enthält:

    $ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
  8. Nachdem Sie den Server erstellt haben, stellen Sie eine Verbindung zum Server her. Geben Sie das temporäre Token ein, das generate-db-auth-token für den Benutzer iamuser generiert, wenn Sie dazu aufgefordert werden.

Führen Sie für psql den folgenden Befehl aus, um eine Verbindung herzustellen. In diesem Beispiel wird die Umgebungsvariable $PGPASSWORD verwendet, die Sie bei der Generierung des Tokens festgelegt haben. 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 Sie versuchen, die Verbindung mit demselben Token wiederherzustellen, schlägt die Verbindung fehl. Sie müssen ein neues Token generieren.

Wenn Sie immer noch eine Fehlermeldung erhalten, die der Fehlermeldung PAM authentication failed for your user ähnelt, überprüfen Sie, ob das AWS-Konto Teil einer Organisation von AWS Organizations ist. Wenn das Konto Teil einer Organisation ist, fügen Sie rds-db:* zur Service-Kontrollrichtlinie (SCP) der Organisation hinzu, zu der das Konto gehört. Prüfen Sie 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 finden Sie unter So verwenden Sie Service-Kontrollrichtlinien, um Berechtigungsrichtlinien für alle Konten in Ihrer AWS-Organisation festzulegen.

Ähnliche Informationen

Verwendung der IAM-Authentifizierung mit Aurora PostgreSQL-Compatible