Verbindung über ein IAM-Konto herstellen

Auf dieser Seite wird beschrieben, wie Sie sich mit einem Konto, das mit der Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) erstellt wurde, in einer AlloyDB for PostgreSQL-Instanz anmelden. Darin wird veranschaulicht, wie eine IAM-basierte Anmeldung mit dem psql-Befehlszeilenclient durchgeführt wird.

Eine Übersicht zum Herstellen einer Verbindung zu AlloyDB-Instanzen finden Sie unter Verbindungsübersicht.

Hinweise

Ihr Projekt, Ihr Cluster, Ihre Instanzen und Ihre IAM-Nutzerkonten müssen vorbereitet werden, bevor Sie sich mit IAM-Anmeldedaten in einer AlloyDB-Instanz anmelden können.

Weitere Informationen finden Sie unter IAM-Authentifizierung verwalten.

Mit einem OAuth 2.0-Token authentifizieren

So können sich ein Nutzer oder eine Anwendung bei einer AlloyDB-Datenbank authentifizieren:

  1. Autorisieren Sie die Google Cloud CLI mit demselben Nutzer- oder Dienstkonto, mit dem Sie sich in Ihrer AlloyDB-Instanz anmelden möchten.

  2. Anfordern eines OAuth 2.0-Tokens von Google Cloud mit dem gcloud auth print-access-token-Befehl:

    gcloud auth print-access-token

    In der Google Cloud wird als Ausgabe dieses Befehls ein OAuth 2.0-Token ausgegeben.

    Für zusätzliche Sicherheit kannst du das Token auf die Verwendung mit der AlloyDB-Authentifizierung beschränken. Gehe dazu so vor:

    1. Fügen Sie den Anmeldedaten für die aktuelle Umgebung mit dem Befehl gcloud auth application-default login den Umfang alloydb.login hinzu, falls Sie dies noch nicht getan haben:

      gcloud auth application-default login --scopes=https://www.googleapis.com/auth/alloydb.login,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/userinfo.email,openid
    2. Drucken Sie ein eingeschränktes OAuth 2.0-Token mit dem Befehl gcloud auth application-default print-access-token aus, wobei das Token nur auf die AlloyDB-Authentifizierung beschränkt wird:

      gcloud auth application-default print-access-token –-scopes=https://www.googleapis.com/auth/alloydb.login
      

    Mit dem OAuth 2.0-Token können Sie oder eine andere Person in Ihrem Namen authentifizierte Anfragen an Google Cloud senden. Behandeln Sie das Token mit demselben Sicherheitsniveau wie ein Passwort. Speichern Sie das Token entweder sicher oder speichern Sie es gar nicht. Im Beispiel für die Verwendung von psql weiter unten auf dieser Seite wird gezeigt, wie ein OAuth 2.0-Token in einer einzigen Aktion angefordert, verwendet und verworfen wird.

  3. Melden Sie sich mit den folgenden Anmeldedaten mit standardmäßigen PostgreSQL-Methoden in einer AlloyDB-Instanz an:

    • Geben Sie das im vorherigen Schritt abgerufene Zugriffstoken als Passwort an.

    • Bei einem IAM-Nutzerkonto ist der Datenbank-Nutzername die vollständige E-Mail-Adresse des Kontos.

    • Bei einem IAM-Dienstkonto ist der Datenbank-Nutzername die E-Mail-Adresse des Kontos ohne das Suffix .gserviceaccount.com.

Der folgende psql-Befehl veranschaulicht eine Möglichkeit, sich über die Befehlszeile bei einem IAM-Nutzer anzumelden. Dabei wird die Ausgabe von gcloud auth print-access-token der Umgebungsvariablen PGPASSWORD zugewiesen, die dann von psql als Datenbank-Anmeldepasswort verwendet wird.

PGPASSWORD=$(gcloud auth print-access-token) psql \
  -h INSTANCE_ADDRESS \
  -U USERNAME \
  -d DATABASE

Ersetzen Sie Folgendes:

  • INSTANCE_ADDRESS: Die IP-Adresse der AlloyDB-Instanz, zu der eine Verbindung hergestellt werden soll.

  • USERNAME: Eine Kennung für den IAM-Nutzer, mit der er sich bei der Instanz authentifizieren kann.

    Geben Sie für ein IAM-Nutzerkonto die vollständige E-Mail-Adresse des Nutzerkontos an. Beispiel: kai@altostrat.com.

    Geben Sie für ein IAM-Dienstkonto die Adresse des Dienstkontos ohne das Suffix .gserviceaccount.com an. Wenn Sie beispielsweise das Dienstkonto my-service@my-project.iam.gserviceaccount.com angeben möchten, verwenden Sie hier den Wert my-service@my-project.iam.

  • DATABASE: Der Name der Datenbank, zu der eine Verbindung hergestellt werden soll.

Beachten Sie, dass psql Passwörter, die in der Befehlszeile eingegeben werden und länger als 100 Zeichen sind, abschneidet. Wenn Sie psql mit einem OAuth 2.0-Token als Anmeldepasswort verwenden möchten, müssen Sie die Umgebungsvariable PGPASSWORD wie in diesem Beispiel gezeigt festlegen, anstatt sie bei Aufforderung manuell einzufügen.

Automatische Authentifizierung über den AlloyDB Auth-Proxy oder AlloyDB Language Connectors

Mit dem AlloyDB Auth Proxy oder den AlloyDB Language Connectors können Sie einen IAM-basierten AlloyDB-Nutzer automatisch authentifizieren und eine Verbindung zu einer Instanz herstellen, ohne ein OAuth 2.0-Token angeben zu müssen.

Für die Verwendung des AlloyDB Auth-Proxy muss der AlloyDB Auth-Proxy-Client mit aktiviertem --auto-iam-authn-Flag ausgeführt werden. Bei AlloyDB Language Connectors muss die IAM-Authentifizierung programmatisch aktiviert werden.

Bei der Verwendung der Sprachconnectors gibt es für jede Sprache eine entsprechende Option. Weitere Informationen finden Sie unter AlloyDB Language-Connectors konfigurieren.

Das IAM-Konto, mit dem Sie den Proxy-Client oder die Language Connectors ausführen, muss mit dem Konto übereinstimmen, das Sie als Datenbanknutzer hinzugefügt haben. Wenn Sie Ihre Arbeitslast beispielsweise mit dem IAM-Nutzerkonto kai@altostrat.com ausführen, können Sie den Proxy-Client oder die Language Connectors verwenden, um den Datenbanknutzer kai@altostrat.com automatisch zu authentifizieren, ohne ein OAuth 2.0-Token anzugeben. In diesem Beispiel funktioniert die automatische Authentifizierung mit keinem anderen Datenbanknutzer außer kai@altostrat.com.

Weitere Informationen zum Ausführen des Auth-Proxy finden Sie unter Verbindung mit dem AlloyDB Auth-Proxy herstellen.

Weitere Informationen zum Ausführen der Sprach-Connectors finden Sie unter Verbindung mit AlloyDB-Sprach-Connectors herstellen.

Probleme mit der IAM-Authentifizierung beheben

So ermitteln Sie die Ursache eines fehlgeschlagenen IAM-basierten Authentifizierungsversuchs:

  1. Rufen Sie in der Google Cloud Console die Seite „Log-Explorer“ auf.

    Zum Log-Explorer

  2. Klicken Sie unter Ressourcentyp auf AlloyDB-Instanz.

  3. Klicken Sie unter Schweregrad auf Benachrichtigung.

    Wenn Benachrichtigung nicht angezeigt wird, wurden im ausgewählten Zeitraum keine Authentifizierungsfehler protokolliert. Möglicherweise müssen Sie das Fenster mit den Steuerelementen im Log-Explorer anpassen.

  4. Prüfen Sie unter Abfrageergebnisse die Logeinträge auf eine der folgenden Meldungen:

    Request had invalid authentication credentials.
    Das Zugriffstoken ist ungültig.
    Caller does not have required permission to use project.
    Dem IAM-Hauptkonto fehlen die erforderlichen IAM-Rollen oder Berechtigungen. In der vollständigen Fehlermeldung werden die fehlenden Rollen oder Berechtigungen angegeben.
    IAM principal does not match database user.

    Das mit dem Zugriffstoken angegebene authentifizierte IAM-Hauptkonto stimmt nicht mit dem Datenbanknutzer überein, als der Sie eine Verbindung herstellen möchten.

    Führen Sie den folgenden Befehl aus, um den vom Token angegebenen Hauptbenutzer aufzurufen:

    curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=ACCESS_TOKEN" https://www.googleapis.com/oauth2/v1/tokeninfo
    

    Ersetzen Sie ACCESS_TOKEN durch das OAuth 2.0-Zugriffstoken.

    Request had insufficient scopes.
    Das Zugriffstoken enthält weder den Bereich alloydb.login noch den Bereich cloud-platform. Mindestens einer dieser Bereiche ist erforderlich.