Nutzer mit IAM-Datenbankauthentifizierung verwalten

Auf dieser Seite wird beschrieben, wie Sie einer Cloud SQL-Instanz, die die IAM-Datenbankauthentifizierung verwendet, Nutzer, Dienstkonten und Gruppen hinzufügen und verwalten.

Weitere Informationen zur Einbindung von IAM finden Sie unter IAM-Authentifizierung.

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

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

    Zur IAM-Seite

  11. Aktivieren Sie die IAM-Datenbankauthentifizierung für Ihre Cloud SQL-Instanz.
  12. Weisen Sie IAM-Hauptkonten wie IAM-Nutzern, Dienstkonten oder Gruppen die erforderliche cloudsql.instanceUser IAM-Rolle zu, um sich in der Cloud SQL-Instanz anzumelden.
    • Wenn Sie der Cloud SQL-Instanz einen einzelnen Nutzer oder ein einzelnes Dienstkonto hinzufügen, müssen Sie die IAM-Rolle jedem Nutzer und Dienstkonto einzeln zuweisen.
    • Wenn Sie eine Gruppe hinzufügen, müssen Sie der Gruppe die IAM-Rolle zuweisen, da die Mitglieder der Gruppe automatisch die mit der IAM-Rolle verknüpften IAM-Berechtigungen übernehmen. Weitere Informationen zum Erstellen von Gruppen in Cloud Identity finden Sie unter Google-Gruppen in der Google Cloud Console erstellen und verwalten.
    • Sie können die Rolle für ein Projekt mit Cloud SQL-Instanzen über die IAM-Seite in der Google Cloud Console, die gcloud CLI, Terraform oder die Cloud SQL Admin API gewähren. Weitere Informationen finden Sie unter IAM-Richtlinienbindung zu einem Nutzer, Dienstkonto oder einer Gruppe hinzufügen.
  13. Wenn Sie ein Dienstkonto verwenden, müssen Sie für jeden Dienst, der Zugriff auf Datenbanken im Projekt benötigt, ein Dienstkonto hinzufügen.
  14. Weitere Informationen zum Erstellen von Dienstkonten finden Sie unter Dienstkonten erstellen.

IAM-Richtlinienbindung zu einem Nutzer, Dienstkonto oder einer Gruppe 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 example-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 Hinzufügen.
  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 enthalten.
  4. Wechseln Sie unter Rolle zu Cloud SQL und wählen Sie Cloud SQL-Instanznutzer aus.
  5. Optional: Wenn Sie eine Verbindung über den Cloud SQL Auth-Proxy oder Cloud SQL Language Connectors herstellen möchten, wählen Sie auch 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 ist die E-Mail-Adresse des Nutzers
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:USERNAME \
    --role=roles/cloudsql.instanceUser
  

Wenn Sie eine Verbindung über den Cloud SQL Auth-Proxy oder Cloud SQL Language Connectors herstellen möchten, führen Sie gcloud projects add-iam-policy-binding noch einmal mit dem Flag --role=roles/cloudsql.client aus.

Richtlinienbindung zu einem Dienstkonto hinzufügen

Ersetzen Sie Folgendes:

  • 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
  

Wenn Sie eine Verbindung über den Cloud SQL Auth-Proxy oder Cloud SQL Language Connectors herstellen möchten, führen Sie gcloud projects add-iam-policy-binding noch einmal mit dem Flag --role=roles/cloudsql.client aus.

Richtlinienbindung zu einer Cloud Identity-Gruppe hinzufügen

Ersetzen Sie Folgendes:

  • PROJECT_ID: die ID des Projekts, für das die Mitglieder der Gruppe autorisiert sein sollen.
  • GROUP_EMAIL_ADDRESS: Die E-Mail-Adresse der Gruppe. Beispiel: example-group@example.com.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=group:GROUP_EMAIL_ADDRESS \
    --role=roles/cloudsql.instanceUser
   

Allen Mitgliedern der angegebenen Gruppe wird die Rolle „Cloud SQL-Instanznutzer“ zugewiesen und sie können sich bei Instanzen in diesem Projekt anmelden.

Wenn Sie eine Verbindung über den Cloud SQL Auth-Proxy oder Cloud SQL Language Connectors herstellen möchten, führen Sie 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

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 = [
    "group:example-group@example.com"
  ]
}

Ä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:example-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
                   "group:example-group@example.com"
      ]
    }
    {
      "role": "roles/cloudsql.client",
      "members": [
                   "user:example-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
      ]
    }

Einer Cloud SQL-Instanz einen einzelnen IAM-Nutzer oder ein einzelnes IAM-Dienstkonto hinzufügen

Sie müssen für jeden einzelnen IAM-Nutzer oder jedes Dienstkonto, das Sie der Cloud SQL-Instanz hinzufügen, ein neues Nutzerkonto erstellen, um auf Datenbanken zugreifen zu können. Wenn Sie eine IAM-Gruppe hinzufügen, müssen Sie nicht für jedes Mitglied dieser Gruppe ein Nutzerkonto erstellen.

Der Datenbank-Nutzername muss die E-Mail-Adresse des IAM-Nutzers sein und darf nur Kleinbuchstaben enthalten. Beispiel: example-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.

Wenn Sie einen einzelnen IAM-Nutzer oder ein einzelnes Dienstkonto hinzufügen möchten, fügen Sie ein neues Nutzerkonto hinzu und wählen Sie IAM als Authentifizierungsmethode aus:

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 Hinzufügen. Das Nutzer- oder Dienstkonto ist jetzt in der Nutzerkontoliste enthalten.
  8. Wenn dem Nutzer nach der Erstellung des Nutzerkontos nicht die IAM-Rolle cloudsql.instanceUser zugewiesen ist, wird 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. Wenn das Symbol nicht mehr angezeigt wird, ist dem Nutzerkonto die IAM-Rolle zugewiesen, die die Anmeldeberechtigung gewährt.

gcloud

Nutzerkonto erstellen

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

Ersetzen Sie Folgendes:

  • USERNAME ist 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

Ersetzen Sie Folgendes:

  • SERVICE_ACCT: 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             = "mysql-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    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"
}

# Create a new IAM service account

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

# Specify the email address of the IAM service account to add to the instance

resource "google_sql_user" "iam_service_account_user" {
  name     = google_service_account.default.email
  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: die 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

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 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-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_ACCT: die E-Mail-Adresse des Dienstkontos
  • PROJECT_ID: die Projekt-ID
  • INSTANCE_ID: die Instanz-ID für die Instanz, zu der Sie das Dienstkonto hinzufügen

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: die 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

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 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: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_ACCT: die E-Mail-Adresse des Dienstkontos
  • PROJECT_ID: die Projekt-ID
  • INSTANCE_ID: die Instanz-ID für die Instanz, zu der Sie das Dienstkonto hinzufügen

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 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-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"
}

Cloud SQL-Instanz eine IAM-Gruppe hinzufügen

Wenn Sie die IAM-Gruppenauthentifizierung verwenden und einer Cloud SQL-Instanz eine IAM-Gruppe hinzufügen möchten, verwenden Sie eines der Verfahren in diesem Abschnitt. Nachdem Sie die IAM-Gruppe hinzugefügt haben, müssen Sie der Instanz nicht die einzelnen Gruppenmitglieder hinzufügen. Weitere Informationen finden Sie unter Mitgliedern einer Gruppe automatisch eine Cloud SQL-Instanz zuweisen.

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 der Gruppe ein, die Sie hinzufügen möchten.
  7. Klicken Sie auf Hinzufügen. Die Gruppe ist jetzt in der Nutzerliste enthalten.
  8. Wenn der Gruppe nach der Erstellung des Nutzerkontos nicht die IAM-Rolle cloudsql.instanceUser zugewiesen wurde, wird neben der Gruppe das Symbol Dreieck angezeigt.

    Um den Gruppenmitgliedern Anmeldeberechtigungen zu erteilen, klicken Sie auf das Symbol und wählen Sie dann IAM-Rolle hinzufügen aus. Wenn das Symbol nicht mehr angezeigt wird, ist allen Mitgliedern der Gruppe die Rolle zugewiesen, die die Anmeldeberechtigung gewährt.

gcloud

Ersetzen Sie Folgendes:

  • GROUP_EMAIL_ADDRESS: die E-Mail-Adresse der Cloud Identity-Gruppe, die Sie der Instanz hinzufügen möchten. Beispiel: example-group@example.com.
  • INSTANCE_NAME: Der Name der Instanz, der Sie die Gruppe hinzufügen möchten.

Führen Sie dazu diesen Befehl aus:

gcloud sql users create GROUP_EMAIL_ADDRESS \
  --instance=INSTANCE_NAME \
  --type=cloud_iam_group

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             = "mysql-iam-group-auth-instance-name"
  region           = "us-west4"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    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 Cloud Identity group to add to the instance
# This resource does not create a Cloud Identity group; the group must
# already exist

resource "google_sql_user" "iam_group" {
  name     = "example-group@example.com"
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_GROUP"
}

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "group:example-group@example.com"
  ]
}

Ä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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: die Projekt-ID
  • INSTANCE_ID: die Instanz-ID der Instanz, der Sie die Cloud Identity-Gruppe hinzufügen
  • GROUP_EMAIL: die E-Mail-Adresse der Cloud Identity-Gruppe

HTTP-Methode und URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users

JSON-Text anfordern:

{
  "name": "GROUP_EMAIL",
  "type": "CLOUD_IAM_GROUP"
}

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": "example-group@example.com",
  "insertTime": "2023-12-07T22:44:16.656Z",
  "startTime": "2023-12-07T22:44:16.686Z",
  "endTime": "2023-12-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"
}

REST v1beta4

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: die Projekt-ID
  • INSTANCE_ID: die Instanz-ID der Instanz, der Sie die Cloud Identity-Gruppe hinzufügen
  • GROUP_EMAIL: die E-Mail-Adresse der Cloud Identity-Gruppe

HTTP-Methode und URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users

JSON-Text anfordern:

{
  "name": "GROUP_EMAIL",
  "type": "CLOUD_IAM_GROUP"
}

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": "example-group@example.com",
  "insertTime": "2023-12-07T22:44:16.656Z",
  "startTime": "2023-12-07T22:44:16.686Z",
  "endTime": "2023-12-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"
}

Mitgliedern einer Gruppe automatisch eine Cloud SQL-Instanz hinzufügen

Wenn Sie einer Cloud SQL-Instanz eine IAM-Gruppe hinzufügen, übernehmen alle Mitglieder (Nutzer und Dienstkonten) dieser Gruppe die IAM-Berechtigungen für die Authentifizierung bei der Instanz. Sie müssen das Gruppenmitglied nicht einzeln der Cloud SQL-Instanz hinzufügen. Nachdem sich ein Gruppenmitglied zum ersten Mal in der Instanz angemeldet und authentifiziert hat, wird in Cloud SQL ein Gruppennutzerkonto oder ein Gruppendienstkonto für dieses Gruppenmitglied erstellt. Sie können sich das Gruppenmitglied ansehen, das in der Instanz nach der ersten erfolgreichen Anmeldung aufgeführt ist.

Weitere Informationen zum Anmelden finden Sie unter Mit IAM-Datenbankauthentifizierung anmelden.

Gruppenmitglieder in einer Cloud SQL-Instanz verwalten

Wenn Sie einer Cloud SQL-Instanz eine IAM-Gruppe hinzufügen, erhalten alle Mitglieder (Nutzer- oder Dienstkonten) dieser Gruppe die IAM-Berechtigung zur Authentifizierung bei der Instanz. Sie können den Zugriff auf eine Instanz steuern, indem Sie die Gruppe in Cloud Identity verwalten. Wenn Sie beispielsweise einem neuen Nutzer Zugriff auf eine Instanz gewähren möchten, fügen Sie ihn in Cloud Identity als Gruppenmitglied hinzu. Sie müssen Gruppenmitglieder nicht separat auf Cloud SQL-Instanzebene entfernen oder hinzufügen, da Änderungen an der Gruppenmitgliedschaft automatisch an die Cloud SQL-Instanz weitergegeben werden. Änderungen an der Gruppenmitgliedschaft, z. B. das Hinzufügen oder Entfernen eines Mitglieds, dauern etwa 15 Minuten. Dieser Zeitraum kommt zu der Zeit hinzu, die für IAM-Änderungen erforderlich ist.

Die Erteilung oder das Widerrufen von Datenbankberechtigungen für eine IAM-Gruppe in MySQL tritt sofort in Kraft. Wenn Sie beispielsweise den Zugriff auf eine Tabelle widerrufen, verlieren die Mitglieder dieser IAM-Gruppe sofort den Zugriff auf diese Tabelle.

Ein Nutzer- oder Dienstkonto kann Mitglied mehrerer IAM-Gruppen sein. Wenn ein Nutzer oder ein Dienstkonto zu mehreren IAM-Gruppen in einer Instanz gehört, hat er alle IAM-Berechtigungen und Datenbankberechtigungen, die jeder dieser IAM-Gruppen zugewiesen sind.

Wenn Sie der IAM-Gruppe in Cloud Identity ein neues Mitglied (Nutzer oder Dienstkonto) hinzufügen und sich dieses Mitglied zum ersten Mal erfolgreich in der Instanz anmeldet, werden ihm automatisch die der Gruppe gewährten Datenbankberechtigungen zugewiesen. Wenn Sie die neu erworbenen Datenbankberechtigungen in derselben Anmeldesitzung verwenden möchten, verwenden Sie die folgende Anweisung.

SET ROLE ALL;

Weitere Informationen finden Sie in der MySQL-Dokumentation unter SET ROLE.

Einzelnen IAM-Nutzern oder Dienstkonten Datenbankberechtigungen erteilen

Wenn einer Cloud SQL-Instanz ein einzelner IAM-Nutzer oder Dienst hinzugefügt wird, erhält dieses neue Konto standardmäßig keine Berechtigungen für Datenbanken.

Verwenden Sie die GRANT-Anweisung, um den Konten Datenbankberechtigungen zu gewähren. 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 mysql-Befehlszeile aus.

Ersetzen Sie Folgendes:

  • USERNAME: Bei einem Nutzerkonto ist das die E-Mail-Adresse des IAM-Nutzers mit gekürztem @ und Domainstring. Wenn die E-Mail-Adresse des IAM-Nutzers beispielsweise example-user@example.com lautet, ist der Nutzername example-user. Bei einem Dienstkonto ist dies die E-Mail-Adresse des Dienstkontos ohne die Domain @project-id.iam.gserviceaccount.com.
  • DATABASE_NAME: der Name der Datenbank, in der die Tabelle gehostet wird.
  • TABLE_NAME: der Name der Tabelle, auf die Sie dem Nutzer Zugriff gewähren möchten.
  • grant select on DATABASE_NAME.TABLE_NAME to "USERNAME";

    IAM-Gruppe Datenbankberechtigungen erteilen

    Wenn Sie die IAM-Gruppenauthentifizierung verwenden, gewähren Sie IAM-Gruppen Datenbankberechtigungen, anstatt einzelnen Nutzern oder Dienstkonten Berechtigungen zu erteilen. Wenn Sie einer Cloud SQL-Instanz eine IAM-Gruppe hinzufügen, hat diese Gruppe standardmäßig keine Datenbankberechtigungen.

    Verwenden Sie die GRANT-Anweisung, um der IAM-Gruppe Datenbankberechtigungen zu gewähren. Nach der ersten Anmeldung in der Cloud SQL-Instanz erben alle Gruppenmitglieder (einschließlich Nutzer und Dienstkonten) automatisch die der Gruppe gewährten Datenbankberechtigungen.

    Ersetzen Sie Folgendes:

  • GROUP_NAME: der erste Teil der E-Mail-Adresse der Cloud Identity-Gruppe, wobei @ und der Domainname abgeschnitten sind. Wenn die E-Mail-Adresse der IAM-Gruppe beispielsweise example-group@example.com lautet, lautet der Gruppenname example-group.
  • DATABASE_NAME: der Name der Datenbank, in der die Tabelle gehostet wird.
  • TABLE_NAME: der Name der Tabelle, auf die Sie dem Nutzer Zugriff gewähren möchten.
  • Führen Sie GRANT über die mysql-Befehlszeile aus.

    grant select on DATABASE_NAME.TABLE_NAME to "GROUP_NAME"@"HOSTNAME";

    Ersetzen Sie HOSTNAME durch den Domainnamen der E-Mail-Adresse der IAM-Gruppe.

    Weitere Informationen zum Gewähren von Berechtigungen finden Sie in der MySQL-Dokumentation auf der Referenzseite GRANT.

    Die Datenbankberechtigungen, die Sie der IAM-Gruppe gewähren, werden sofort wirksam.

    IAM-Nutzer, Dienstkonten und Gruppen ansehen, die einer Cloud SQL-Instanz hinzugefügt wurden

    Führen Sie die folgenden Befehle aus, um die IAM-Nutzer, Dienstkonten und Gruppen aufzurufen, die Ihrer Cloud SQL-Instanz hinzugefügt wurden.

    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. Auf der Seite wird eine Liste der IAM-Nutzer, Dienstkonten und Cloud Identity-Gruppen angezeigt, die Ihrer Instanz hinzugefügt wurden.
    4. Optional: Wenn Sie eine Liste der IAM-Nutzer oder Dienstkonten aufrufen möchten, die sich bereits in der Instanz angemeldet haben, klicken Sie auf Authentifizierte IAM-Gruppenmitglieder.

    gcloud

    Ersetzen Sie INSTANCE_NAME durch den Namen der Instanz, die die Gruppen enthält, die Sie aufrufen möchten.

      gcloud sql users list --instance=INSTANCE_NAME
      

    Gruppen haben den Nutzertyp CLOUD_IAM_GROUP.

    In der Ausgabe werden auch Nutzer- und Dienstkonten in Ihrer Cloud SQL-Instanz aufgeführt.

    • Nutzerkonten, die Mitglieder einer Gruppe sind, haben den Typ CLOUD_IAM_GROUP_USER.
    • Dienstkonten, die Mitglieder einer Gruppe sind, haben den Typ CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
    • Nutzerkonten, die einzelne Nutzerkonten für die IAM-Datenbankauthentifizierung sind, haben den Typ CLOUD_IAM_USER.
    • Dienstkonten, die individuelle IAM-Datenbankauthentifizierungs-Dienstkonten sind, haben den Typ CLOUD_IAM_SERVICE_ACCOUNT.

    REST Version 1

    In der folgenden Anfrage werden mit der Methode users.list die Nutzer aufgelistet, die Konten in der Cloud SQL-Instanz haben.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: die Projekt-ID
    • INSTANCE_ID: die Instanz-ID

    HTTP-Methode und URL:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users/list

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

    Sie sollten in etwa folgende JSON-Antwort erhalten:

    
    {
      "kind": "sql#usersList",
      "items": [
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "example-service-acct",
          "host": "%",
          "instance": "INSTANCE_ID",
          "project": "PROJECT_ID",
          "type": "CLOUD_IAM_SERVICE_ACCOUNT"
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "another-example-service-acct",
          "host": "%",
          "instance": "INSTANCE_ID",
          "project": "PROJECT_ID",
          "type": "CLOUD_IAM_GROUP_SERVICE_ACCOUNT"
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "root",
          "host": "%",
          "instance": "INSTANCE_ID",
          "project": "PROJECT_ID",
          "passwordPolicy": {
            "status": {}
          }
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "example-user",
          "host": "%",
          "instance": "INSTANCE_ID",
          "project": "PROJECT_ID",
          "type": "CLOUD_IAM_USER"
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "another-example-user",
          "host": "%",
          "instance": "INSTANCE_ID",
          "project": "PROJECT_ID",
          "type": "CLOUD_IAM_GROUP_USER"
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "example-group",
          "host": "%",
          "instance": "INSTANCE_ID",
          "project": "PROJECT_ID",
          "type": "CLOUD_IAM_GROUP"
        }
      ]
    }
    
    

    Gruppen haben den Nutzertyp CLOUD_IAM_GROUP.

    In der Ausgabe werden auch Nutzer- und Dienstkonten in Ihrer Cloud SQL-Instanz aufgeführt.

    • Nutzerkonten, die Mitglieder einer Gruppe sind, haben den Typ CLOUD_IAM_GROUP_USER.
    • Dienstkonten, die Mitglieder einer Gruppe sind, haben den Typ CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
    • Nutzerkonten, die einzelne Nutzerkonten für die IAM-Datenbankauthentifizierung sind, haben den Typ CLOUD_IAM_USER.
    • Dienstkonten, die individuelle IAM-Datenbankauthentifizierungs-Dienstkonten sind, haben den Typ CLOUD_IAM_SERVICE_ACCOUNT.

    REST v1beta4

    In der folgenden Anfrage werden mit der Methode users.list die Nutzer aufgelistet, die Konten in der Cloud SQL-Instanz haben.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • project-id: Ihre Projekt-ID
    • instance-id: die gewünschte Instanz-ID

    HTTP-Methode und URL:

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

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

    Sie sollten in etwa folgende JSON-Antwort erhalten:

    {
      "kind": "sql#usersList",
      "items": [
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "sqlserver",
          "host": "",
          "instance": "instance-id",
          "project": "project-id",
          "sqlserverUserDetails": {
            "serverRoles": [
              "CustomerDbRootRole"
            ]
          }
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "user-id-1",
          "host": "",
          "instance": "instance-id",
          "project": "project-id",
          "sqlserverUserDetails": {
            "serverRoles": [
              "CustomerDbRootRole"
            ]
          }
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "user-id-2",
          "host": "",
          "instance": "instance-id",
          "project": "project-id",
          "sqlserverUserDetails": {
            "serverRoles": [
              "CustomerDbRootRole"
            ]
          }
        },
        {
          ...
        },
        {
          ...
        }
      ]
    }
    

    Gruppen haben den Nutzertyp CLOUD_IAM_GROUP.

    In der Ausgabe werden auch Nutzer- und Dienstkonten in Ihrer Cloud SQL-Instanz aufgeführt.

    • Nutzerkonten, die Mitglieder einer Gruppe sind, haben den Typ CLOUD_IAM_GROUP_USER.
    • Dienstkonten, die Mitglieder einer Gruppe sind, haben den Typ CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
    • Nutzerkonten, die einzelne Nutzerkonten für die IAM-Datenbankauthentifizierung sind, haben den Typ CLOUD_IAM_USER.
    • Dienstkonten, die individuelle IAM-Datenbankauthentifizierungs-Dienstkonten sind, haben den Typ CLOUD_IAM_SERVICE_ACCOUNT.

    Einzelnen IAM-Nutzer oder Dienstkonto aus einer Cloud SQL-Instanz entfernen

    Wenn Sie einen einzelnen Nutzer oder ein Dienstkonto, das kein Mitglied einer Gruppe ist, aus der Cloud SQL-Instanz entfernen möchten, löschen Sie das Konto mit dem folgenden Befehl:

    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 example-user@example.com, um den Nutzer zu identifizieren.

    Ersetzen Sie Folgendes:

    • 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

    Einzelnes Dienstkonto löschen

    Ersetzen Sie Folgendes:

    • SERVICE_ACCT: 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 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-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"
    }
    

    IAM-Gruppenmitglieder aus einer Cloud SQL-Instanz entfernen

    Es gibt zwei Möglichkeiten, IAM-Gruppenmitglieder aus einer Cloud SQL-Instanz zu entfernen:

    • Automatische Entfernung
    • Manuelle Entfernung

    Automatische Entfernung

    Wenn Sie ein IAM-Gruppenmitglied entfernen möchten, müssen Sie die Mitgliedschaft aus den entsprechenden IAM-Gruppen in Cloud Identity entfernen. Nachdem die Nutzer der IAM-Gruppe die Mitgliedschaft in allen relevanten Gruppen in Cloud Identity verloren haben, werden sie von Cloud SQL automatisch aus der Instanz entfernt.

    Änderungen an der Gruppenmitgliedschaft, z. B. das Hinzufügen oder Entfernen eines Mitglieds, dauern etwa 15 Minuten. Dieser Zeitraum kommt zu der Zeit hinzu, die für IAM-Änderungen erforderlich ist.

    Manuelle Entfernung

    Wenn ein Nutzer einer IAM-Gruppe nicht automatisch entfernt werden kann, können Sie ihn manuell entfernen. Sie können einen IAM-Gruppennutzer nicht manuell mit der gcloud CLI, der Google Cloud Console, Terraform oder der Cloud SQL Admin API aus einer Cloud SQL-Instanz entfernen. Stattdessen können Datenbanknutzer mit Superuser-Berechtigungen IAM-Gruppennutzer manuell aus der Cloud SQL-Instanz löschen, indem sie über einen MySQL-Client die Anweisung DROP USER verwenden.

    Nachdem Sie einen Nutzer einer IAM-Gruppe manuell aus der Cloud SQL-Instanz entfernt haben, müssen Sie ihn auch aus der IAM-Gruppe in Cloud Identity entfernen, um weitere Anmeldungen in der Cloud SQL-Instanz zu verhindern.

    IAM-Gruppe aus einer Cloud SQL-Instanz löschen

    Sie können die hinzugefügten IAM-Gruppen aus der Cloud SQL-Instanz löschen. Wenn Sie eine IAM-Gruppe aus der Instanz löschen, verlieren alle Nutzer und Dienstkonten, die zur IAM-Gruppe gehören, alle Datenbankberechtigungen, die der IAM-Gruppe gewährt wurden. Darüber hinaus gelten die folgenden Bedingungen:

    • Die Nutzer und Dienstkonten, die zur IAM-Gruppe gehören, können sich weiterhin anmelden, bis die IAM-Berechtigung cloudsql.instances.login aus der Gruppe entfernt wurde.
    • Wenn durch das Löschen einer Gruppe die Nutzer oder Dienstkonten der IAM-Gruppe zu keiner anderen Gruppe in der Instanz gehören, werden sie von Cloud SQL aus der Instanz entfernt.

    Wenn Sie alle IAM-Gruppen aus einer Cloud SQL-Instanz löschen, verlieren alle Nutzer und Dienstkonten der IAM-Gruppe alle Datenbankberechtigungen. Darüber hinaus gelten die folgenden Bedingungen:

    • Alle IAM-Gruppennutzer und Dienstkonten können sich nicht in der Instanz anmelden.
    • Außerdem werden alle IAM-Gruppennutzer und Dienstkonten von Cloud SQL automatisch aus der Instanz entfernt.

    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 die Gruppe, die Sie entfernen möchten.
    5. Klicken Sie auf Entfernen. Dadurch wird nur der Zugriff auf diese Instanz widerrufen.

    gcloud

    Verwenden Sie den Befehl gcloud sql users delete, um eine Cloud Identity-Gruppe aus einer Instanz zu löschen.

    Ersetzen Sie Folgendes:

    • GROUP_NAME: der erste Teil der E-Mail-Adresse der Cloud Identity-Gruppe. Wenn Sie beispielsweise die E-Mail-Adresse example-group@example.com verwenden, lautet der Cloud Identity-Gruppenname example-group.
    • HOSTNAME: Der zweite Teil der E-Mail-Adresse ist der Hostname der Cloud Identity-Gruppe. Wenn Sie beispielsweise die E-Mail-Adresse example-group@example.com verwenden, lautet der Hostname example.com.
    • INSTANCE_NAME: Der Name der Cloud SQL-Instanz mit der Cloud Identity-Gruppe, die Sie löschen möchten.
    gcloud sql users delete GROUP_NAME \
       --host=HOSTNAME \
       --instance=INSTANCE_NAME

    IAM-Anmeldeberechtigungen aus einer IAM-Gruppe entfernen

    Wenn Sie die Rolle cloudsql.instanceUser für eine IAM-Gruppe widerrufen, können sich alle Mitglieder der Gruppe nicht mehr in einer Cloud SQL-Instanz im Projekt anmelden. Die Nutzer oder Dienstkonten können sich nur dann in Instanzen anmelden, wenn sie Mitglieder einer anderen IAM-Gruppe sind, die noch Anmeldeberechtigungen hat.

    Informationen zum Widerrufen einer Rolle für eine Cloud Identity-Gruppe finden Sie unter Einzelne Rolle widerrufen.

    Nutzer aus einer IAM-Gruppe entfernen

    IAM-Gruppenmitglieder wie Nutzer oder Dienstkonten können in Cloud Identity aus der IAM-Gruppe entfernt werden.

    Nachdem die Entfernung in IAM übernommen wurde, kann sich der Nutzer nicht mehr in der Datenbank anmelden, es sei denn, er hat Anmeldeberechtigungen von einer anderen Gruppe erhalten oder ihm werden direkt Anmeldeberechtigungen gewährt. Außerdem verlieren Nutzer, die aus einer Gruppe entfernt werden, die Datenbankberechtigungen der Gruppe.

    Wenn ein IAM-Gruppennutzer keiner Gruppe in der Instanz angehört, wird er von Cloud SQL automatisch aus der Instanz entfernt.

    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.

    Bei der IAM-Gruppenauthentifizierung enthalten Audit-Logs die Aktivitäten und Anmeldungen für einzelne Nutzer- und Dienstkonten.

    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 MySQL aus Sicherheitsgründen eine kurz gefasste Fehlermeldung zurück. Beispiel:

    $MYSQL_PWD=`gcloud-access-token mysql` --enable-cleartext-plugin --ssl-ca=server-ca.pem
    --ssl-cert=client-cert.pem --ssl-key=client-key.pem   --host=ip_address --user=testuser
    Access denied for user 'testuser'@'...' (using password: NO)
    

    Weitere Einzelheiten zum Fehler können Sie den MySQL-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. Prüfen Sie bei einem IAM-Nutzer, ob der Nutzername der Datenbank die E-Mail-Adresse des IAM-Nutzers ohne @ und Domain ist. Prüfen Sie bei einem Dienstkonto, ob es die E-Mail-Adresse des Dienstkontos ohne das @project-id.iam.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 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 MySQL anmelden. Mit dieser Methode erhält der Nutzer trotzdem Zugriff auf die gesamte Datenbank. Prüfen Sie, ob die Verbindung sicher ist.

    Probleme mit Nutzerkonten beheben, die die IAM-Gruppenauthentifizierung verwenden

    In diesem Abschnitt werden Szenarien zur Fehlerbehebung bei der IAM-Gruppenauthentifizierung aufgeführt.

    Eine Gruppe kann einer Datenbank nicht hinzugefügt werden

    Wenn Sie versuchen, einer Instanz eine Gruppe hinzuzufügen, erhalten Sie die folgende Fehlermeldung:

    (gcloud.sql.users.create) HTTPError 400: Invalid request: Provided CLOUD_IAM_GROUP: EMAIL, does not exist.
    

    Die von Ihnen angegebene E-Mail-Adresse muss zu einer gültigen Gruppe gehören.

    Wenn die Gruppe noch nicht vorhanden ist, erstellen Sie sie. Weitere Informationen zum Erstellen von Gruppen finden Sie unter Google Groups in der Google Cloud Console erstellen und verwalten.

    Wenn Sie die folgende Fehlermeldung erhalten:

    (gcloud.sql.users.create) HTTPError 400: Invalid request: IAM Group Authentication is disabled.
    

    Bevor Sie die IAM-Gruppenauthentifizierung verwenden können, muss für Ihre Cloud SQL-Instanz das folgende Wartungsupdate durchgeführt werden:

    Ab R20240514.00_04

    Sie können das Wartungsupdate mithilfe der Self-Service-Wartung auf Ihre Instanz anwenden. Weitere Informationen finden Sie unter Wartung per Selfservice.

    Ein vorhandener IAM-Nutzer oder ein vorhandenes Dienstkonto übernimmt nicht die Datenbankberechtigungen, die seiner IAM-Gruppe gewährt werden

    Wenn ein vorhandener IAM-Nutzer oder ein vorhandenes Dienstkonto nicht die richtigen Datenbankberechtigungen seiner Gruppe übernimmt, führen Sie die folgenden Schritte aus:

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

      IAM aufrufen

      Prüfen Sie, ob das Konto Mitglied der Gruppe ist, die der Cloud SQL-Instanz hinzugefügt wurde.

    2. Listen Sie die Nutzer und Dienstkonten in der Instanz auf.

      gcloud sql users list --instance=INSTANCE_NAME

      Prüfen Sie in der Ausgabe, ob das Nutzer- oder Dienstkonto als CLOUD_IAM_USER oder CLOUD_IAM_SERVICE_ACCOUNT aufgeführt ist.

    3. Wenn das Nutzer- oder Dienstkonto als CLOUD_IAM_USER oder CLOUD_IAM_SERVICE_ACCOUNT aufgeführt ist, entfernen Sie das Konto aus der Instanz. Das Konto, das Sie entfernen, ist ein individuelles IAM-Konto, das keine Datenbankberechtigungen der Gruppe erbt.

    4. Melden Sie sich mit dem Nutzer- oder Dienstkonto wieder in der Instanz an.

      Wenn Sie sich wieder in der Instanz anmelden, wird das Konto mit dem richtigen Kontotyp CLOUD_IAM_GROUP_USER oder CLOUD_IAM_GROUP_SERVICE_ACCOUNT neu erstellt.

    Nächste Schritte