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 Workforce Identity-Föderation können Sie Ihren vorhandenen Identitätsanbieter (IdP) wie Microsoft Active Directory oder Okta verwenden, um auf Cloud SQL-Instanzen zuzugreifen, ohne ein Google Konto zu benötigen.
Zu den wichtigsten Vorteilen der Workforce Identity-Föderation gehören:
- Geringerer Aufwand: Domains müssen nicht bestätigt und Identitäten nicht mit Cloud Identity synchronisiert werden.
- Höhere Sicherheit: 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 Mitarbeiteridentitätsföderation finden Sie in der Übersicht über die Mitarbeiteridentitätsföderation.
Funktionsweise
Mit der Workforce Identity-Föderation können sich Nutzer mit einer externen Identität bei Google Cloud authentifizieren. Für Cloud SQL bedeutet dies, dass sich Hauptkonten aus einem Workforce-Pool mit Cloud SQL for PostgreSQL-Instanzen verbinden können.
Cloud SQL unterstützt die Mitarbeiteridentitätsföderation über den Nutzertyp CLOUD_IAM_WORKFORCE_IDENTITY. Um Zugriff zu gewähren, validiert Cloud SQL Ihre Workforce-Anmeldedaten und die IAM-Berechtigung auf Projektebene während der Anmeldung.
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 PostgreSQL Version 13 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 über die 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 Authentifizierung mit Workforce Identity-Föderation konfigurieren.
IAM-Authentifizierung für die Instanz aktivieren
Setzen Sie das Flag cloudsql.iam_authentication auf on, um die IAM-Authentifizierung zu aktivieren.
Console
-
Rufen Sie in der Google Cloud Console die Seite Cloud SQL-Instanzen auf.
- 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 den Block database_flags zur Ressource google_sql_database_instance hinzu:
resource "google_sql_database_instance" "instance" { name = "INSTANCE_NAME" database_version = "POSTGRES_15" 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:
POSTGRES_12 - 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:
POSTGRES_12 - 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"
}
Nutzer der Mitarbeiteridentität zur Instanz hinzufügen
Fügen Sie das externe Hauptkonto mit dem Typ CLOUD_IAM_WORKFORCE_IDENTITY zu Ihrer Instanz hinzu.
Achten Sie darauf, dass die von Ihnen verwendete Nutzer-ID mit dem Wert übereinstimmt, der von der Attributzuordnung Ihres Workforce Identity-Anbieters bereitgestellt wird. In der Regel wird dies als E-Mail-Adresse konfiguriert, z. B. cruz@example.com.
Console
-
Rufen Sie in der Google Cloud Console die Seite Cloud SQL-Instanzen auf.
- 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 Mitarbeiteridentitätsfö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 Nutzer-ID 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 des Nutzers, 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"
}
Rolle „Instance User“ gewähren
Weisen Sie dem Hauptkonto der Workforce Identity 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 Hauptkonto Zugriff gewähren möchten, geben Sie die Workforce Identity 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 die 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 des Nutzers, 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.
Wenn Sie Zugriff auf den gesamten Workforce-Pool gewähren möchten, verwenden Sie den Befehl gcloud projects
add-iam-policy-binding mit dem Mitgliedsformat principalSet:
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 Ressource google_project_iam_member, um dem Hauptkonto der Belegschaft 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 des Nutzers, 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.
Im Folgenden finden Sie 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 des Nutzers, 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 Workforce Identity-Nutzers gewährt werden sollen, oder die Datenbankberechtigungen manuell in der Datenbank gewähren.
So gewähren Sie 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 Datenbanknutzers der Workforce Identity, 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 Workforce Identity authentifizieren, bevor Sie ein Anmeldetoken generieren können.
Verwenden Sie zum Authentifizieren 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 Identity-Anbieter generiert wurde.Führen Sie den folgenden Befehl aus, um eine Verbindung mit einem generierten Token herzustellen:
bash export PGPASSWORD=$(gcloud sql generate-login-token) psql "host=INSTANCE_IP user=USER_ID \ dbname=DB_NAME sslmode=require"Ersetzen Sie Folgendes:
INSTANCE_IP: die IP-Adresse Ihrer Cloud SQL-Instanz.USER_ID: die Nutzer-ID des Workforce-Nutzers, 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 mehreren Pools: Cloud SQL kann nicht zwischen Subjekten mit derselben Nutzer-ID in verschiedenen Personalpools 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 doppelten Subjektnamen aus verschiedenen Pools oder Anbietern gewähren. Dadurch wird unbefugter Zugriff von einem anderen Pool oder Anbieter mit derselben Nutzer-ID verhindert. - Anmeldekontingent: 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 Mitarbeiteridentitätsföderation
- Instanzen für die IAM-Datenbankauthentifizierung konfigurieren
- Nutzer mit IAM-Datenbankauthentifizierung verwalten
- Mit IAM-Datenbankauthentifizierung anmelden