Nutzer verwalten und erstellen, die eine IAM-Datenbankauthentifizierung verwenden

Auf dieser Seite wird beschrieben, wie Sie ein Nutzer- oder Dienstkonto mit IAM-Datenbankauthentifizierung erstellen und verwalten. Weitere Informationen zur Einbindung von IAM finden Sie in der Übersicht zur IAM-Datenbankauthentifizierung.

Vorbereitung

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Installieren und initialisieren Sie das Cloud SDK.
  5. Aktivieren Sie die Cloud Key Management Service API.

    Aktivieren Sie die API

  6. Sie müssen die Rolle "Cloud SQL-Administrator" in Ihrem Nutzerkonto haben.

    Zur IAM-Seite

  7. Aktivieren Sie die IAM-Datenbankauthentifizierung für Ihre Cloud SQL-Instanz.

Nutzer- oder Dienstkonto mit IAM-Datenbankauthentifizierung erstellen

Sie fügen den Nutzer jeder Instanz hinzu, die die Datenbanken enthält, auf die der Nutzer zugreifen muss. Nach dem Hinzufügen kann der Nutzer auf alle Instanzen und Datenbanken im Projekt zugreifen.

So erstellen Sie einen Datenbanknutzer oder ein Dienstkonto mit IAM-Datenbankauthentifizierung:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite "Cloud SQL-Instanzen".

    Zur Seite „Cloud SQL-Instanzen“

  2. Klicken Sie auf die Instanz, um ihre Übersichtsseite zu öffnen.
  3. Wählen Sie im Navigationsmenü die Option Nutzer aus.
  4. Klicken Sie auf NUTZERKONTO HINZUFÜGEN.
  5. Lassen Sie die Identity and Access Management-Schaltfläche aktiviert und fügen Sie die E-Mail-Adresse unter Mitglied hinzu. Die Rolle „Cloud SQL-Instanznutzer“ muss dem Nutzerkonto bereits zugewiesen sein. Weitere Informationen finden Sie unter Nutzer- oder Dienstkonto Log-in-Zugriff erteilen.
  6. Klicken Sie auf HINZUFÜGEN.

gcloud

Nutzer erstellen

Verwenden Sie die E-Mail-Adresse, zum Beispiel test-user@gmail.com, um den Nutzer zu identifizieren.

Ersetzen Sie Folgendes:

  • EMAIL: durch die E-Mail-Adresse des Nutzers.
  • INSTANCE_NAME: durch den Namen der Instanz, auf die der Nutzer Zugriff erhalten soll.
gcloud sql users create EMAIL --instance=INSTANCE_NAME
    --type=cloud_iam_user

Dienstkonto erstellen

Ersetzen Sie Folgendes:

  • EMAIL: durch die E-Mail-Adresse des Dienstkontos. Da die Länge von Datenbank-Nutzernamen begrenzt ist, müssen Sie das Suffix .gserviceaccount.com in der E-Mail-Adresse weglassen. Der Nutzername für das Dienstkonto sa-name@project-id.iam.gserviceaccount.com sollte beispielsweise sa-name@project-id.iam lauten.
  • INSTANCE_NAME: durch den Namen der Instanz, auf die das Dienstkonto Zugriff erhalten soll.
gcloud sql users create EMAIL --instance=INSTANCE_NAME
    --type=cloud_iam_service_account …

REST v1beta4

Nutzer erstellen

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • project-id: Ihre Projekt-ID
  • location-id: die Standort-ID
  • instance-id: die Instanz-ID für die Instanz, zu der Sie den Nutzer hinzufügen
  • user-name: die E-Mail-Adresse des Nutzers
  • operation-id: die ID des Vorgangs

HTTP-Methode und URL:

POST https://www.googleapis.com/sql/v1beta4/projects/project-id/locations/location-id/instances/instance-id/users

JSON-Text anfordern:

{
  "name": "user-name",
  "type": "CLOUD_IAM_USER"
  }

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie müssten in etwa folgende JSON-Antwort erhalten:

{
  "kind": "sql#operation",
  "targetLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/locations/location-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Dienstkonto erstellen

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • service-account-id: Ihre Dienstkonto-ID
  • project-id: Ihre Projekt-ID
  • instance-id: die Instanz-ID für die Instanz, zu der Sie das Dienstkonto hinzufügen
  • operation-id: die ID des Vorgangs

HTTP-Methode und URL:

POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users

JSON-Text anfordern:

{
    "name": "service_account_id"
    "type": "CLOUD_IAM_SERVICE_ACCOUNT"
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie müssten in etwa folgende JSON-Antwort erhalten:

{
"kind": "sql#operation",
  "targetLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-11-20T04:08:00.211Z",
  "startTime": "2020-11-20T04:08:00.240Z",
  "endTime": "2020-11-20T04:08:02.003Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Nutzer- oder Dienstkonto Log-in-Zugriff erteilen

Der Datenbank-Nutzername muss die E-Mail-Adresse des IAM-Nutzers sein, zum Beispiel test-user@gmail.com. Da die E-Mail-Adresse Sonderzeichen (@ und .) enthält, muss sie in Anführungszeichen gesetzt werden.

Die E-Mail-Adresse des Dienstkontos muss das Format ???@???.???.gserviceaccount.com haben.

So erteilen Sie einem Nutzer- oder Dienstkonto Log-in-Zugriff:

Console

  1. Rufen Sie in der Cloud Console die Seite IAM auf.

    Zur IAM-Seite

  2. Klicken Sie auf Hinzufügen.
  3. Geben Sie unter Neue Mitglieder eine E-Mail-Adresse ein. Sie können Einzelpersonen oder Dienstkonten als Mitglieder hinzufügen, allerdings muss jedes Projekt mindestens eine Einzelperson als Mitglied enthalten.
  4. Wechseln Sie unter Rolle auswählen zu Cloud SQL und wählen Sie Cloud SQL-Instanznutzer aus.
  5. Klicken Sie auf Speichern.

gcloud

Führen Sie gcloud projects add-iam-policy-binding mit dem Flag --role=roles/cloudsql.instanceUser aus.

Ersetzen Sie Folgendes:

  • PROJECT_ID: durch die ID des Projekts, für das der Nutzer autorisiert sein soll.
  • EMAIL: durch die E-Mail-Adresse des Nutzers.
Führen Sie für ein Nutzerkonto den folgenden Befehl aus:
gcloud projects add-iam-policy-binding PROJECT_ID
    --member=user:EMAIL --role=roles/cloudsql.instanceUser
Führen Sie für ein Dienstkonto den folgenden Befehl aus:
gcloud projects add-iam-policy-binding PROJECT_ID
    --member=serviceAccount:EMAIL --role=roles/cloudsql.instanceUser

REST v1beta4

Weisen Sie eine Rolle zu. Bearbeiten Sie dazu die vom Befehl get-iam-policy zurückgegebene JSON- oder YAML-Richtlinie. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

{
      "role": "roles/cloudsql.instanceUser",
      "members": [
                   "user:user@example.com"
                 ]
    }

Cloud SQL-Nutzer Datenbankberechtigungen erteilen

Damit ein Nutzer- oder Dienstkonto eine Verbindung zu einer Datenbank herstellen oder Abfragen in ihr ausführen kann, müssen ihm Berechtigungen für diese Datenbank erteilt werden. Zu den Berechtigungen, die Sie erteilen können, gehören unter anderem SELECT, INSERT, UPDATE, DELETE, CREATE und CONNECT. Auf der Referenzseite zu GRANT finden Sie eine vollständige Liste der Berechtigungen, die Sie Nutzern und Dienstkonten erteilen können. Führen Sie GRANT in der Postgres-Befehlszeile aus. Beispiel:

Ersetzen Sie Folgendes:

  • EMAIL: durch die E-Mail-Adresse des Nutzers. Da die E-Mail-Adresse Sonderzeichen (@ und .) enthält, muss sie in Anführungszeichen gesetzt werden.
  • SCHEMA_NAME: durch den Schemanamen der Tabelle.
postgres=> grant all on all tables in schema SCHEMA_NAME to "EMAIL";

Anmeldedaten in Audit-Logs ansehen

Sie können Audit-Logs aktivieren, um IAM-Anmeldungen bei der Datenbank zu erfassen. Bei Problemen mit der Anmeldung können Sie mithilfe der Audit-Logs das Problem diagnostizieren.

Hinweis: Audit-Logging verursacht zusätzliche Kosten. Weitere Informationen finden Sie unter den Preisen für das Logging von Daten.

Nach der Konfiguration können Sie mit der Loganzeige Audit-Logs zum Datenzugriff von erfolgreichen Anmeldungen ansehen.

Ein Log kann beispielsweise Informationen wie die folgenden enthalten:

{
 insertId: "..."
 logName: "projects/.../logs/cloudaudit.googleapis.com%2Fdata_access"
 protoPayload: {
  @type: "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail: "..."
  }
  authorizationInfo: [
   0: {
    granted: true
    permission: "cloudsql.instances.login"
    resource: "instances/..."
    resourceAttributes: {
    }
   }
  ]
  methodName: "cloudsql.instances.login"
  request: {
   @type: "type.googleapis.com/google.cloud.sql.authorization.v1.InstancesLoginRequest"
   clientIpAddress: "..."
   database: "..."
   databaseSessionId: ...
   instance: "projects/.../locations/us-central1/instances/..."
   user: "..."
  }
  requestMetadata: {
   callerIp: "..."
   destinationAttributes: {
   }
   requestAttributes: {
    auth: {
    }
    time: "..."
   }
  }
  resourceName: "instances/..."
  serviceName: "cloudsql.googleapis.com"
  status: {
  }
 }
 receiveTimestamp: "..."
 resource: {
  labels: {
   database_id: "...:..."
   project_id: "..."
   region: "us-central"
  }
  type: "cloudsql_database"
 }
 severity: "INFO"
 timestamp: "..."
}

Fehler bei der Anmeldung beheben

Wenn bei einer Anmeldung ein Fehler auftritt, gibt PostgreSQL aus Sicherheitsgründen eine kurz gefasste Fehlermeldung zurück. Beispiel:

PGPASSWORD=not-a-password psql --host=... --username=... --dbname=...
psql: error: could not connect to server: FATAL:  Cloud SQL IAM user authentication failed for user "..."
FATAL:  pg_hba.conf rejects connection for host "...", user "...", database "...", SSL off

Weitere Einzelheiten zum Fehler können Sie den PostgreSQL-Fehlerlogs entnehmen. Weitere Informationen finden Sie unter Logs ansehen.

Der folgende Logeintrag beschreibt beispielsweise für den vorherigen Fehler, welche Maßnahme Sie zum Lösen des Problems ergreifen können.

F ... [152172]: [1-1] db=...,user=... FATAL:  Cloud SQL IAM user authentication failed for user "..."
I ... [152172]: [2-1] db=...,user=... DETAIL:  Request is missing required authentication credential. Expected OAuth 2 access token, log in cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.

Prüfen Sie die angezeigte Fehlermeldung. Wenn in der Meldung nicht angegeben ist, dass Sie die Cloud SQL-IAM-Nutzerauthentifizierung oder Cloud SQL-IAM-Dienstkontoauthentifizierung verwendet haben, prüfen Sie, ob der für die Anmeldung verwendete Datenbank-Nutzertyp entweder CLOUD_IAM_USER oder CLOUD_IAM_SERVICE_ACCOUNT ist. Sie können dafür die Console oder den Befehl gcloud sql users list verwenden. Prüfen Sie bei einem IAM-Nutzer, ob der Datenbank-Nutzername die E-Mail-Adresse des IAM-Nutzers ist. Prüfen Sie bei einem Dienstkonto, ob es die E-Mail-Adresse des Dienstkontos ohne das Domain-Suffix .gserviceaccount.com ist.

Wenn Sie die IAM-Datenbankauthentifizierung verwendet haben, prüfen Sie die Details der Fehlermeldung. Sie finden die Fehlermeldung im Fehlerlog der Datenbank. Wenn die Meldung angibt, dass das als Passwort gesendete Zugriffstoken (OAuth 2.0) ungültig war, können Sie mit dem gcloud-Befehl gcloud auth application-default print-access-token so nach Details suchen:

curl -H "Content-Type: application/x-www-form-urlencoded" /
     -d "access_token=$(gcloud auth application-default print-access-token)" /
     https://www.googleapis.com/oauth2/v1/tokeninfo

Prüfen Sie, ob das Token für das jeweilige IAM-Nutzerkonto bzw. -Dienstkonto bestimmt und nicht abgelaufen ist.

Wenn die Details zeigen, dass eine Berechtigung fehlt, prüfen Sie, ob dem IAM-Nutzerkonto bzw. -Dienstkonto die Berechtigung cloudsql.instances.login mithilfe der vordefinierten Rolle Cloud SQL Instance User oder einer benutzerdefinierten Rolle in der IAM-Richtlinie des Instanzprojekts erteilt wurde. Weitere Informationen finden Sie in Richtlinien-Fehlerbehebung für IAM.

Wenn eine Anmeldung fehlschlägt, weil die IAM-Datenbankauthentifizierung nicht verfügbar ist, kann sich der Nutzer mit dem Standardnutzer und -passwort von PostgreSQL anmelden. Mit dieser Methode erhält der Nutzer trotzdem Zugriff auf die gesamte Datenbank.

Nächste Schritte