Nutzer mit IAM-Datenbankauthentifizierung verwalten

Auf dieser Seite wird beschrieben, wie Sie einen Nutzer oder ein Dienstkonto hinzufügen, das die IAM-Datenbankauthentifizierung für eine Datenbank verwendet und wie Sie diese Nutzer- und Dienstkonten verwalten. Weitere Informationen zur Einbindung von IAM finden Sie unter IAM-Authentifizierung.

Hinweise

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  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 Google Cloud-Projekt muss aktiviert sein.

  4. Installieren Sie die Google Cloud CLI.
  5. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

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

    Zur Projektauswahl

  7. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  8. Installieren Sie die Google Cloud CLI.
  9. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  10. Cloud Key Management Service API aktivieren.

    Aktivieren Sie die API

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

    Zur IAM-Seite

  12. Aktivieren Sie die IAM-Datenbankauthentifizierung für Ihre Cloud SQL-Instanz.
  13. Achten Sie darauf, dass Sie den Nutzern, die es benötigen, IAM-Zugriff für jedes Projekt gewähren, das Datenbanken enthält, auf die die Nutzer zugreifen müssen. Weitere Informationen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.
  14. Achten Sie darauf, dass Sie für jeden Dienst, der Zugriff auf Datenbanken im Projekt benötigt, ein Dienstkonto hinzugefügt haben.

Fügen Sie der Datenbank einen IAM-Nutzer oder ein Dienstkonto hinzu

Sie müssen für jeden IAM-Nutzer, der Zugriff auf die Datenbankinstanz haben soll, einen neuen Datenbanknutzer erstellen. Der Datenbank-Nutzername muss die E-Mail-Adresse des IAM-Nutzers sein, zum Beispiel test-user@example.com.

Bei der Verwendung von REST-Befehlen muss der Nutzername Anführungszeichen verwenden, da er Sonderzeichen (@ und .) enthält.

Dienstkonten haben das Format service-account-name@project-id.iam.gserviceaccount.com.

Fügen Sie einen neuen Datenbanknutzer hinzu und wählen Sie IAM als Authentifizierungsmethode aus, um einen IAM-Nutzer oder ein Dienstkonto hinzuzufügen:

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.

    Cloud SQL-Instanzen aufrufen

  2. Klicken Sie auf den Instanznamen, um die Seite Übersicht einer Instanz zu öffnen.
  3. Wählen Sie im SQL-Navigationsmenü die Option Nutzer aus.
  4. Klicken Sie auf Nutzerkonto hinzufügen. Der Tab Nutzerkonto zur Instanz instance_name hinzufügen wird geöffnet.
  5. Klicken Sie auf das Optionsfeld Cloud IAM.
  6. Geben Sie in das Feld Hauptkonto die E-Mail-Adresse des Nutzers oder Dienstkontos ein, das Sie hinzufügen möchten.
  7. Klicken Sie auf Add. Der Nutzer ist jetzt in der Nutzerliste enthalten.
  8. Wenn dem Nutzer nicht die Rolle Cloud SQL-Instanznutzer zugewiesen ist, wird links neben dem Nutzernamen das Symbol Dreieck angezeigt.

    Um dem Nutzer Anmeldeberechtigungen zu erteilen, klicken Sie auf das Symbol und wählen Sie dann IAM-Rolle hinzufügen aus. Das Symbol wird nicht mehr angezeigt. Der Nutzer ist jetzt Mitglied der Rolle.

gcloud

Nutzerkonto erstellen

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

Ersetzen Sie Folgendes:

  • USERNAME: 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 USERNAME \
--instance=INSTANCE_NAME \
--type=cloud_iam_user

Dienstkonto erstellen

Dabei gilt:

  • SERVICE_ACCT: durch die E-Mail-Adresse des Dienstkontos.
  • INSTANCE_NAME: durch den Namen der Instanz, auf die das Dienstkonto Zugriff erhalten soll.
gcloud sql users create SERVICE_ACCT \
--instance=INSTANCE_NAME \
--type=cloud_iam_service_account

Terraform

Verwenden Sie eine Terraform-Ressource, um IAM-Nutzer- und -Dienstkonten in einer Instanz mit aktivierter IAM-Datenbankauthentifizierung hinzuzufügen.

resource "google_sql_database_instance" "default" {
  name             = "postgres-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    database_flags {
      name  = "cloudsql.iam_authentication"
      value = "on"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

# Specify the email address of the IAM user to add to the instance
# This resource does not create a new IAM user account; this account must
# already exist

resource "google_sql_user" "iam_user" {
  name     = "test-user@example.com"
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_USER"
}

# Specify the email address of the IAM service account to add to the instance
# This resource does not create a new IAM service account; this service account
# must already exist

# Create a new IAM service account

resource "google_service_account" "default" {
  account_id   = "cloud-sql-postgres-sa"
  display_name = "Cloud SQL for Postgres Service Account"
}

resource "google_sql_user" "iam_service_account_user" {
  # Note: for PostgreSQL only, Google Cloud requires that you omit the
  # ".gserviceaccount.com" suffix
  # from the service account email due to length limits on database usernames.
  name     = trimsuffix(google_service_account.default.email, ".gserviceaccount.com")
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_SERVICE_ACCOUNT"
}

Änderungen anwenden

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

Verzeichnis vorbereiten

Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

  1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

    Kopieren Sie den Beispielcode in das neu erstellte main.tf.

    Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade

Änderungen anwenden

  1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

  3. Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

Änderungen löschen

So löschen Sie das Projekt:

  1. Um den Löschschutz zu deaktivieren, setzen Sie in der Terraform-Konfigurationsdatei das Argument deletion_protection auf false.
    deletion_protection =  "false"
  2. Wenden Sie die aktualisierte Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply
  1. Entfernen Sie Ressourcen, die zuvor mit Ihrer Terraform-Konfiguration angewendet wurden, indem Sie den folgenden Befehl ausführen und yes an der Eingabeaufforderung eingeben:

    terraform destroy

REST Version 1

Nutzerkonto erstellen

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

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

HTTP-Methode und URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users

JSON-Text anfordern:

{
  "name": "username",
  "type": "CLOUD_IAM_USER"
  }

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

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-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://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Dienstkonto erstellen

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • service-acctDie E-Mail-Adresse Ihres Dienstkontos.
  • 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://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users

JSON-Text anfordern:

{
    "name": "service-acct",
    "type": "CLOUD_IAM_SERVICE_ACCOUNT"
}

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

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
"kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/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://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

Nutzerkonto erstellen

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

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

HTTP-Methode und URL:

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

JSON-Text anfordern:

{
  "name": "username",
  "type": "CLOUD_IAM_USER"
  }

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

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Dienstkonto erstellen

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • service-acctDie E-Mail-Adresse Ihres Dienstkontos.
  • 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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users

JSON-Text anfordern:

{
    "name": "service-acct",
    "type": "CLOUD_IAM_SERVICE_ACCOUNT"
}

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

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
"kind": "sql#operation",
  "targetLink": "https://sqladmin.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://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

IAM-Richtlinienbindung zu einem Nutzer oder Dienstkonto hinzufügen

Dieses Verfahren fügt der IAM-Richtlinie eines bestimmten Projekts eine Richtlinienbindung hinzu, wenn eine Projekt-ID und die Bindung vorgegeben sind. Der Bindungsbefehl besteht aus einem Mitglied, einer Rolle und einer optionalen Bedingung.

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

Console

  1. Öffnen Sie in der Google Cloud Console die Seite IAM.

    IAM aufrufen

  2. Klicken Sie auf Add.
  3. Geben Sie unter Neue Mitglieder eine E-Mail-Adresse ein. Sie können einzelne Nutzer, Dienstkonten oder Gruppen als Mitglieder hinzufügen. Jedes Projekt muss jedoch mindestens ein Hauptkonto als Mitglied haben.
  4. Wechseln Sie unter Rolle zu Cloud SQL und wählen Sie Cloud SQL-Instanznutzer und Cloud SQL-Client aus.
  5. Wählen Sie für einzelne Nutzer und Dienstkonten Cloud SQL-Client aus.
  6. Klicken Sie auf Speichern.

gcloud

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

Richtlinienbindung zu einem Nutzerkonto hinzufügen

Ersetzen Sie Folgendes:

  • PROJECT_ID: durch die ID des Projekts, für das der Nutzer autorisiert sein soll.
  • USERNAME: die E-Mail-Adresse des Nutzers
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:USERNAME \
    --role=roles/cloudsql.instanceUser
  

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

Richtlinienbindung zu einem Dienstkonto hinzufügen

Dabei gilt:

  • PROJECT_ID: durch die ID des Projekts, für das der Nutzer autorisiert sein soll.
  • SERVICE_ACCT: die E-Mail-Adresse des Dienstkontos.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCT \
    --role=roles/cloudsql.instanceUser
  

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

Terraform

Verwenden Sie eine Terraform-Ressource, um den IAM-Nutzer- und -Dienstkonten die erforderliche Richtlinienbindung hinzuzufügen.

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "user:test-user@example.com",
    "serviceAccount:${google_service_account.default.email}"
  ]
}

resource "google_project_iam_binding" "cloud_sql_client" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.client"
  members = [
    "user:test-user@example.com",
    "serviceAccount:${google_service_account.default.email}"
  ]
}

Änderungen anwenden

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

Verzeichnis vorbereiten

Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

  1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

    Kopieren Sie den Beispielcode in das neu erstellte main.tf.

    Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade

Änderungen anwenden

  1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

  3. Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

Änderungen löschen

So löschen Sie das Projekt:

  1. Um den Löschschutz zu deaktivieren, setzen Sie in der Terraform-Konfigurationsdatei das Argument deletion_protection auf false.
    deletion_protection =  "false"
  2. Wenden Sie die aktualisierte Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply
  1. Entfernen Sie Ressourcen, die zuvor mit Ihrer Terraform-Konfiguration angewendet wurden, indem Sie den folgenden Befehl ausführen und yes an der Eingabeaufforderung eingeben:

    terraform destroy

REST

Weisen Sie beiden Kontotypen die Rollen cloudsql.instanceUser und cloudsql.client zu, indem Sie die vom Befehl get-iam-policy zurückgegebene JSON- oder YAML-Bindungsrichtlinie bearbeiten. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

    {
      "role": "roles/cloudsql.instanceUser",
      "members": [
                   "user:test-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"

      ]
    }
    {
      "role": "roles/cloudsql.client",
      "members": [
                   "user:test-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
      ]
    }

IAM-Nutzer Datenbankberechtigungen erteilen

Wenn ein IAM-Nutzer einer Datenbankinstanz hinzugefügt wird, erhält dieser neue Nutzer standardmäßig keine Berechtigungen für Datenbanken.

Wenn ein Nutzer- oder Dienstkonto eine Verbindung zu einer Datenbank herstellt, kann es Abfragen gegen alle Datenbankobjekte ausführen, für die ÖFFENTLICH-Zugriff gewährt wurde.

Wenn sie zusätzlichen Zugriff benötigen, können mit der GRANT-Anweisung weitere Berechtigungen gewährt werden. 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 über die Befehlszeile aus.

Dabei gilt:

  • USERNAME: durch die E-Mail-Adresse des Nutzers. Da die E-Mail-Adresse Sonderzeichen (@ und .) enthält, muss sie in Anführungszeichen gesetzt werden.
  • TABLE_NAME: der Name der Tabelle, auf die Sie dem Nutzer Zugriff gewähren möchten.
grant select on TABLE_NAME to "USERNAME";

IAM-Nutzer oder Dienstkonto aus der Datenbank entfernen

Wenn Sie ein Nutzer- oder Dienstkonto aus der Datenbank entfernen möchten, löschen Sie das Konto aus der Instanz:

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.

    Cloud SQL-Instanzen aufrufen

  2. Klicken Sie auf den Instanznamen, um die Seite Übersicht einer Instanz zu öffnen.
  3. Wählen Sie im SQL-Navigationsmenü die Option Nutzer aus.
  4. Klicken Sie auf für den Nutzer, den Sie entfernen möchten.
  5. Klicken Sie auf Entfernen. Dadurch wird nur der Zugriff auf diese Instanz widerrufen.

gcloud

Nutzer entfernen

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

Dabei gilt:

  • USERNAME: Die E-Mail-Adresse ohne das @Domainname.
  • INSTANCE_NAME: Der Name der Instanz, aus der Sie den Nutzer entfernen möchten.
gcloud sql users delete USERNAME \
--instance=INSTANCE_NAME

Löschen Sie das Dienstkonto

Dabei gilt:

  • SERVICE_ACCT: durch die E-Mail-Adresse des Dienstkontos.
  • INSTANCE_NAME: Der Name der Instanz, aus der Sie den Nutzer entfernen möchten.
gcloud sql users delete SERVICE_ACCT \
--instance=INSTANCE_NAME

REST Version 1

Die folgende Anfrage verwendet die Methode users:delete, um das angegebene Nutzerkonto zu löschen.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Projekt-ID
  • INSTANCE_ID: die gewünschte Instanz-ID
  • USERNAME: die E-Mail-Adresse des Nutzers oder Dienstkontos

HTTP-Methode und URL:

DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME

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

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "DELETE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

Die folgende Anfrage verwendet die Methode users:delete, um das angegebene Nutzerkonto zu löschen.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Projekt-ID
  • INSTANCE_ID: die gewünschte Instanz-ID
  • USERNAME: die E-Mail-Adresse des Nutzers oder Dienstkontos

HTTP-Methode und URL:

DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME

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

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "DELETE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

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.

Nach der Konfiguration können Sie mit dem Log-Explorer 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 Google Cloud 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.

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 oder -Dienstkonto die Berechtigung cloudsql.instances.login mithilfe der vordefinierten Rolle Cloud SQL Instance User oder einer benutzerdefinierten Rolle in der IAM-Richtlinie der Instanz des Projektes. 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. Prüfen Sie, ob die Verbindung sicher ist.

Nächste Schritte