Auf dieser Seite wird beschrieben, wie Sie die Mitarbeiteridentitätsföderation (auch als IAM-Authentifizierung von Drittanbietern bezeichnet) mit Cloud SQL konfigurieren und verwenden. Mit der Mitarbeiteridentitätsföderation können Sie Ihren vorhandenen Identitätsanbieter (IdP) wie Microsoft Active Directory oder Okta verwenden, um auf Cloud SQL-Instanzen zuzugreifen, ohne dass ein Google -Konto erforderlich ist.
Die wichtigsten Vorteile der Workforce Identity-Föderation sind:
- Geringerer Aufwand: Sie müssen keine Domains bestätigen oder Identitäten mit Cloud Identity synchronisieren.
- Erweiterte Sicherheitsfunktionen: Zentralisierte Verwaltung des Datenbankzugriffs über Ihren vorhandenen Unternehmens-IdP.
- Einfache Skalierung: Geeignet für große Organisationen mit komplexen Anforderungen an die Identitätsverwaltung.
Eine detaillierte Beschreibung der Workforce Identity-Föderation finden Sie unter Workforce Identity-Föderation – Übersicht.
Funktionsweise
Mit der Mitarbeiteridentitätsföderation können sich Nutzer mit einer externen Identität bei Google Cloud authentifizieren. Für Cloud SQL bedeutet das, dass Identitäten aus einem Workforce-Pool eine Verbindung zu Cloud SQL for MySQL-Instanzen herstellen können.
Cloud SQL unterstützt die Mitarbeiteridentitätsföderation über den Nutzertyp CLOUD_IAM_WORKFORCE_IDENTITY. Um Zugriff zu gewähren, werden bei der Anmeldung Ihre Anmeldedaten für Mitarbeiterkonten und die IAM-Berechtigung auf Projektebene von Cloud SQL validiert.
Hinweis
Bevor Sie die Datenbankauthentifizierung für die Workforce Identity-Föderation konfigurieren, müssen die folgenden Voraussetzungen erfüllt sein:
- Installieren Sie die neueste gcloud CLI.
- Konfigurieren Sie einen Workforce Identity-Föderationspool und einen Anbieter in Ihrer Google Cloud Organisation.
- Identitätsübernahme des Dienstkontos für Ihre Arbeitslast einrichten.
- Prüfen Sie, ob auf Ihrer Cloud SQL-Instanz MySQL 8.0 oder höher ausgeführt wird.
Rollen und Berechtigungen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für die Organisation zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren und Verwenden der Authentifizierung mit der Mitarbeiteridentitätsföderation benötigen:
-
Instanz verwalten:
Cloud SQL-Administrator (
roles/cloudsql.admin) -
Verbindung zur Instanz herstellen:
Cloud SQL-Instanznutzer (
roles/cloudsql.instanceUser) -
Verbindung zu einer Instanz über den Cloud SQL Auth-Proxy herstellen:
Cloud SQL-Client (
roles/cloudsql.client) -
IAM-Richtlinie verwalten:
Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Authentifizierung für die Workforce Identity-Föderation konfigurieren
In den folgenden Abschnitten wird beschrieben, wie Sie Ihre Instanz für die Verwendung der Mitarbeiteridentitätsföderation konfigurieren.
IAM-Authentifizierung für die Instanz aktivieren
Um die IAM-Authentifizierung zu aktivieren, setzen Sie das Flag cloudsql_iam_authentication auf on.
Console
-
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
- Klicken Sie auf den Instanznamen, um die Übersichtsseite einer Instanz zu öffnen.
- Klicken Sie auf Bearbeiten.
- Maximieren Sie den Bereich Instanz anpassen.
- Maximieren Sie den Abschnitt Verbindungen.
- Wählen Sie unter Sicherheit das Kästchen Cloud SQL-IAM-Authentifizierung aktivieren aus.
- Klicken Sie auf Speichern.
gcloud
Verwenden Sie den folgenden Befehl, um die IAM-Authentifizierung zu aktivieren:
gcloud sql instances patch INSTANCE_NAME \ --database-flags=cloudsql_iam_authentication=on
Ersetzen Sie INSTANCE_NAME durch den Namen der Instanz.
Terraform
Fügen Sie Ihrer google_sql_database_instance-Ressource den Block database_flags hinzu:
resource "google_sql_database_instance" "instance" { name = "INSTANCE_NAME" database_version = "MYSQL_8_0" region = "REGION" settings { tier = "db-f1-micro" database_flags { name = "cloudsql_iam_authentication" value = "on" } } }
Ersetzen Sie Folgendes:
INSTANCE_NAME: der Name der Instanz.REGION: Die Region, in der sich die Instanz befindet.
REST Version 1
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- PROJECT_ID: die Projekt-ID
- LOCATION_ID: die Standort-ID
- INSTANCE_ID: die gewünschte Instanz-ID
- REGION: die gewünschte Region
- DATABASE_VERSION: Enum-String der Datenbankversion
Beispiel:
MYSQL_8_0 - PASSWORD: das Passwort für den Root-Nutzer
- MACHINE_TYPE: Enum-String des Maschinentyps (Stufe), z. B.:
db-custom-[CPUS]-[MEMORY_MBS]
HTTP-Methode und URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances
JSON-Text anfordern:
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql_iam_authentication",
"value": "on"
}
]
}
}
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": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-01T19:13:21.834Z",
"operationType": "CREATE",
"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
- LOCATION_ID: die Standort-ID
- INSTANCE_ID: die gewünschte Instanz-ID
- REGION: die gewünschte Region
- DATABASE_VERSION: Enum-String der Datenbankversion
Beispiel:
MYSQL_8_0 - PASSWORD: das Passwort für den Root-Nutzer
- MACHINE_TYPE: Enum-String des Maschinentyps (Stufe), z. B.:
db-custom-[CPUS]-[MEMORY_MBS]
HTTP-Methode und URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances
JSON-Text anfordern:
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql_iam_authentication",
"value": "on"
}
]
}
}
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": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-01T19:13:21.834Z",
"operationType": "CREATE",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
Mitarbeiteridentitätsnutzer der Instanz hinzufügen
Fügen Sie das externe Hauptkonto Ihrer Instanz mit dem Typ CLOUD_IAM_WORKFORCE_IDENTITY hinzu.
Die von Ihnen verwendete Nutzer-ID muss mit dem Wert übereinstimmen, der von der Attributzuordnung Ihres Mitarbeiteridentitätsanbieters bereitgestellt wird. Normalerweise wird dies als E‑Mail-Adresse konfiguriert, z. B. cruz@example.com.
Console
-
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
- Klicken Sie auf den Instanznamen, um die Seite Übersicht einer Instanz zu öffnen.
- Wählen Sie im SQL-Navigationsmenü die Option Nutzer aus.
- Klicken Sie auf Nutzerkonto hinzufügen. Der Bereich Nutzerkonto zur Instanz INSTANCE_NAME hinzufügen wird geöffnet.
- Wählen Sie Workforce Identity-Föderation aus.
- Geben Sie im Feld Workforce-Nutzer die Nutzer-ID des Nutzers ein, den Sie hinzufügen möchten.
- Klicken Sie auf Hinzufügen.
gcloud
Führen Sie den folgenden Befehl aus, um den Nutzer zu erstellen:
gcloud sql users create USER_ID \ --instance=INSTANCE_NAME \ --type=CLOUD_IAM_WORKFORCE_IDENTITY
Ersetzen Sie Folgendes:
USER_ID: Die E-Mail-Adresse des Nutzers, den Sie hinzufügen möchten, z. B.cruz@example.com.INSTANCE_NAME: der Name der Instanz.
Terraform
Verwenden Sie die Ressource google_sql_user, um den Workforce Identity-Nutzer zu definieren:
resource "google_sql_user" "workforce_user" { name = "USER_ID" # e.g., "cruz@example.com" instance = "INSTANCE_NAME" type = "CLOUD_IAM_WORKFORCE_IDENTITY" }
Ersetzen Sie Folgendes:
USER_ID: die Nutzer-ID für den Nutzer, den Sie hinzufügen möchten, z. B.cruz@example.com.INSTANCE_NAME: der Name der Instanz.
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_WORKFORCE_IDENTITY"
}
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"
}
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_WORKFORCE_IDENTITY"
}
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"
}
Nutzerrolle für Instanz zuweisen
Weisen Sie dem Workforce Identity-Hauptkonto oder dem gesamten Pool die Rolle roles/cloudsql.instanceUser zu.
Console
-
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.
- Klicken Sie auf Zugriff gewähren.
Führen Sie im Feld Neue Hauptkonten einen der folgenden Schritte aus:
Wenn Sie einem einzelnen Principal Zugriff gewähren möchten, geben Sie die Mitarbeiteridentität als
principalein:principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_IDWenn Sie Zugriff auf den gesamten Pool gewähren möchten, geben Sie den Personalpool als
principalSetein:principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*
- Wählen Sie in der Liste Rolle die Option Cloud SQL > Cloud SQL-Instanznutzer aus.
- Optional: Wenn Sie eine Verbindung über den Cloud SQL Auth-Proxy oder Cloud SQL Language Connectors herstellen möchten, klicken Sie auf Weitere Rolle hinzufügen und wählen Sie dann Cloud SQL > Cloud SQL-Client aus.
- Klicken Sie auf Speichern.
gcloud
Verwenden Sie den Befehl gcloud projects
add-iam-policy-binding, um einem einzelnen Nutzer Zugriff zu gewähren:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" \ --role="roles/cloudsql.instanceUser"
Ersetzen Sie Folgendes:
USER_ID: die Nutzer-ID für den Nutzer, den Sie hinzufügen möchten, z. B.cruz@example.com.POOL_ID: die ID des Workforce-Pools.PROJECT_ID: die Kennung des Projekts, das die Instanz enthält.
Verwenden Sie den Befehl gcloud projects
add-iam-policy-binding mit dem Mitgliedsformat principalSet, um Zugriff auf den gesamten Workforce-Pool zu gewähren:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*" \ --role="roles/cloudsql.instanceUser"
Terraform
Verwenden Sie die google_project_iam_member-Ressource, um dem Arbeitskraft-Hauptkonto die Rolle zuzuweisen:
resource "google_project_iam_member" "workforce_user_iam" { project = "PROJECT_ID" role = "roles/cloudsql.instanceUser" member = "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" }
Ersetzen Sie Folgendes:
USER_ID: die Nutzer-ID für den Nutzer, den Sie hinzufügen möchten, z. B.cruz@example.com.POOL_ID: die ID des Workforce-Pools.PROJECT_ID: die Kennung des Projekts, das die Instanz enthält.
REST
Wenn Sie IAM-Richtlinien über die API gewähren möchten, rufen Sie die IAM-Richtlinie des Projekts mit der Methode getIamPolicy ab.
Hängen Sie dann die neue Bindung an die Richtlinie an und wenden Sie die aktualisierte Richtlinie schließlich mit der Methode setIamPolicy an.
Das Folgende ist ein Beispiel für eine Bindungsnutzlast, die Sie an Ihre IAM-Richtlinie anhängen können:
{ "bindings": [ { "role": "roles/cloudsql.instanceUser", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" ] } ] }
Ersetzen Sie Folgendes:
USER_ID: die Nutzer-ID für den Nutzer, den Sie hinzufügen möchten, z. B.cruz@example.com.POOL_ID: die ID des Workforce-Pools.
Datenbankberechtigungen gewähren
Sie können die Datenbankrollen angeben, die beim Erstellen des Mitarbeiternutzerkontos gewährt werden sollen, oder die Datenbankberechtigungen manuell in der Datenbank gewähren.
So gewähren Sie beispielsweise Berechtigungen manuell:
GRANT SELECT ON TABLE_NAME TO "USER_ID";
Ersetzen Sie Folgendes:
TABLE_NAME: der Name der Datenbanktabelle.USER_ID: die Nutzer-ID des Nutzers der Mitarbeiteridentitätsdatenbank, z. B.cruz@example.com.
Verbindung zur Instanz herstellen
Sie können jetzt entweder über die gcloud CLI oder den Cloud SQL Auth-Proxy eine Verbindung zu Ihrer Instanz herstellen.
gcloud CLI verwenden
Sie müssen sich zuerst mit Ihrer Mitarbeiteridentität authentifizieren, bevor Sie ein Anmeldetoken generieren können.
Verwenden Sie zur Authentifizierung mithilfe der Workforce Identity-Föderation den Befehl
gcloud auth loginmit dem Flag--cred-file:gcloud auth login --cred-file=CONFIGURATION_FILEErsetzen Sie
CONFIGURATION_FILEdurch den Pfad zur Konfigurationsdatei, die für Ihren Workforce-Identitätsanbieter generiert wurde.Führen Sie den folgenden Befehl aus, um eine Verbindung mit einem generierten Token herzustellen:
bash export MYSQL_PWD=$(gcloud sql generate-login-token) mysql --host=INSTANCE_IP --user=USER_ID \ --database=DB_NAME --ssl-mode=REQUIREDErsetzen Sie Folgendes:
INSTANCE_IP: die IP-Adresse Ihrer Cloud SQL-Instanz.USER_ID: die Nutzer-ID des Mitarbeiternutzers, z. B.cruz@example.com.DB_NAME: Der Name der Datenbank, zu der Sie eine Verbindung herstellen möchten.
Cloud SQL Auth-Proxy verwenden
Starten Sie den Proxy mit dem Flag --auto-iam-authn:
./cloud-sql-proxy INSTANCE_CONNECTION_NAME --auto-iam-authn
Weitere Informationen zum Proxy finden Sie unter Informationen zum Cloud SQL Auth-Proxy.
Limits und Einschränkungen
- Doppelte Nutzer-ID in Pools: Cloud SQL kann nicht zwischen Subjekten mit derselben Nutzer-ID in verschiedenen Mitarbeiterpools oder Identitätsanbietern unterscheiden. Wenn Sie mehrere Personalpools oder ‑anbieter verwenden, müssen Sie IAM-Richtlinien verwenden, um sicherzustellen, dass Sie die Anmeldeberechtigung
roles/cloudsql.instanceUsernicht für doppelte Betreffnamen aus verschiedenen Pools oder Anbietern erteilen. So wird unbefugter Zugriff über einen anderen Pool oder Anbieter mit derselben Nutzer-ID verhindert. - Anmeldungskontingent: Für jede Instanz gilt ein Kontingent von 12.000 Anmeldungen pro Minute, das sowohl erfolgreiche als auch fehlgeschlagene Anmeldeversuche umfasst. Wenn das Kontingent überschritten wird, sind Anmeldungen vorübergehend nicht möglich. Wir empfehlen, häufige Anmeldungen zu vermeiden und Anmeldungen mithilfe von autorisierten Netzwerken einzuschränken.
Nächste Schritte
- Weitere Informationen zur Workforce Identity-Föderation
- Instanzen für die IAM-Datenbankauthentifizierung konfigurieren
- Nutzer mit IAM-Datenbankauthentifizierung verwalten
- Mit IAM-Datenbankauthentifizierung anmelden