Auf dieser Seite wird beschrieben, wie Sie einen Nutzer oder ein Dienstkonto hinzufügen, das die IAM-Datenbankauthentifizierung für eine Datenbank verwendet und wie Sie diese Nutzer- und Dienstkonten verwalten. Weitere Informationen zur Einbindung von IAM finden Sie unter IAM-Authentifizierung.
Hinweise
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Enable the Cloud Key Management Service API.
- Sie müssen die Rolle "Cloud SQL-Administrator" in Ihrem Nutzerkonto haben.
- Aktivieren Sie die IAM-Datenbankauthentifizierung für Ihre Cloud SQL-Instanz.
- Achten Sie darauf, dass Sie den Nutzern, die es benötigen, IAM-Zugriff für jedes Projekt gewähren, das Datenbanken enthält, auf die die Nutzer zugreifen müssen. Weitere Informationen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.
- Achten Sie darauf, dass Sie für jeden Dienst, der Zugriff auf Datenbanken im Projekt benötigt, ein Dienstkonto hinzugefügt haben.
IAM-Nutzer oder Dienstkonto zu einer Datenbankinstanz hinzufügen
Sie müssen für jeden IAM-Nutzer, der Zugriff auf die Datenbankinstanz haben soll, einen neuen Datenbanknutzer erstellen. Der Datenbank-Nutzername muss die E-Mail-Adresse des IAM-Nutzers sein, zum Beispiel test-user@example.com
.
@
und .
) enthält.
Dienstkonten haben das Format service-account-name@project-id.iam.gserviceaccount.com
.
Fügen Sie einen neuen Datenbanknutzer hinzu und wählen Sie IAM als Authentifizierungsmethode aus, um einen IAM-Nutzer oder ein Dienstkonto hinzuzufügen:
Console
-
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 Tab Nutzerkonto zur Instanz instance_name hinzufügen wird geöffnet.
- Klicken Sie auf das Optionsfeld Cloud IAM.
- Geben Sie in das Feld Hauptkonto die E-Mail-Adresse des Nutzers oder Dienstkontos ein, das Sie hinzufügen möchten.
- Klicken Sie auf Add. Der Nutzer ist jetzt in der Nutzerliste enthalten.
Wenn dem Nutzer nicht die Rolle Cloud SQL-Instanznutzer zugewiesen ist, wird links neben dem Nutzernamen das Symbol angezeigt.
Um dem Nutzer Anmeldeberechtigungen zu erteilen, klicken Sie auf das Symbol und wählen Sie dann IAM-Rolle hinzufügen aus. Das Symbol wird nicht mehr angezeigt. Der Nutzer ist jetzt Mitglied der Rolle.
gcloud
Nutzerkonto erstellen
Verwenden Sie die E-Mail-Adresse, zum Beispiel test-user@example.com
, um den Nutzer zu identifizieren.
Ersetzen Sie Folgendes:
- USERNAME: durch die E-Mail-Adresse des Nutzers.
- INSTANCE_NAME: durch den Namen der Instanz, auf die der Nutzer Zugriff erhalten soll.
gcloud sql users create USERNAME \ --instance=INSTANCE_NAME \ --type=cloud_iam_user
Dienstkonto erstellen
Dabei gilt:
- SERVICE_ACCT: durch die E-Mail-Adresse des Dienstkontos.
- INSTANCE_NAME: durch den Namen der Instanz, auf die das Dienstkonto Zugriff erhalten soll.
gcloud sql users create SERVICE_ACCT \ --instance=INSTANCE_NAME \ --type=cloud_iam_service_account
Terraform
Verwenden Sie eine Terraform-Ressource, um IAM-Nutzer- und -Dienstkonten in einer Instanz mit aktivierter IAM-Datenbankauthentifizierung hinzuzufügen.
Ä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
- Rufen Sie Cloud Shell auf.
-
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).
-
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 alsmain.tf
bezeichnet.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen.
-
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
-
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.
-
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.
- Ö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:
- Um den Löschschutz zu deaktivieren, setzen Sie in der Terraform-Konfigurationsdatei das Argument
deletion_protection
auffalse
.deletion_protection = "false"
- 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
-
Entfernen Sie Ressourcen, die zuvor mit Ihrer Terraform-Konfiguration angewendet wurden, indem Sie den folgenden Befehl ausführen und
yes
an der Eingabeaufforderung eingeben:terraform destroy
REST Version 1
Nutzerkonto erstellen
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- project-id: Ihre Projekt-ID
- instance-id: die Instanz-ID für die Instanz, zu der Sie den Nutzer hinzufügen
- username: die E-Mail-Adresse des Nutzers
- operation-id: die ID des Vorgangs
HTTP-Methode und URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users
JSON-Text anfordern:
{ "name": "username", "type": "CLOUD_IAM_USER" }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten 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-acctDie E-Mail-Adresse Ihres Dienstkontos.
- project-id: Ihre Projekt-ID
- instance-id: die Instanz-ID für die Instanz, zu der Sie das Dienstkonto hinzufügen
- operation-id: die ID des Vorgangs
HTTP-Methode und URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users
JSON-Text anfordern:
{ "name": "service-acct", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id", "status": "DONE", "user": "user@example.com", "insertTime": "2020-11-20T04:08:00.211Z", "startTime": "2020-11-20T04:08:00.240Z", "endTime": "2020-11-20T04:08:02.003Z", "operationType": "CREATE_USER", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id", "targetProject": "project-id" }
REST v1beta4
Nutzerkonto erstellen
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- project-id: Ihre Projekt-ID
- instance-id: die Instanz-ID für die Instanz, zu der Sie den Nutzer hinzufügen
- username: die E-Mail-Adresse des Nutzers
- operation-id: die ID des Vorgangs
HTTP-Methode und URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
JSON-Text anfordern:
{ "name": "username", "type": "CLOUD_IAM_USER" }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten 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-acctDie E-Mail-Adresse Ihres Dienstkontos.
- project-id: Ihre Projekt-ID
- instance-id: die Instanz-ID für die Instanz, zu der Sie das Dienstkonto hinzufügen
- operation-id: die ID des Vorgangs
HTTP-Methode und URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
JSON-Text anfordern:
{ "name": "service-acct", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id", "status": "DONE", "user": "user@example.com", "insertTime": "2020-11-20T04:08:00.211Z", "startTime": "2020-11-20T04:08:00.240Z", "endTime": "2020-11-20T04:08:02.003Z", "operationType": "CREATE_USER", "name": "operation-id", "targetId": "instance-id", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id", "targetProject": "project-id" }
IAM-Richtlinienbindung zu einem Nutzer oder Dienstkonto hinzufügen
Dieses Verfahren fügt der IAM-Richtlinie eines bestimmten Projekts eine Richtlinienbindung hinzu, wenn eine Projekt-ID und die Bindung vorgegeben sind. Der Bindungsbefehl besteht aus einem Mitglied, einer Rolle und einer optionalen Bedingung.
Der Datenbank-Nutzername muss die E-Mail-Adresse des IAM-Nutzers sein, zum Beispiel test-user@example.com
. Da die E-Mail-Adresse Sonderzeichen (@
und .
) enthält, muss sie in Anführungszeichen gesetzt werden.
Console
-
Öffnen Sie in der Google Cloud Console die Seite IAM.
- Klicken Sie auf Add.
- Geben Sie unter Neue Mitglieder eine E-Mail-Adresse ein. Sie können einzelne Nutzer, Dienstkonten oder Gruppen als Mitglieder hinzufügen. Jedes Projekt muss jedoch mindestens ein Hauptkonto als Mitglied haben.
- Wechseln Sie unter Rolle zu Cloud SQL und wählen Sie Cloud SQL-Instanznutzer und Cloud SQL-Client aus.
- Wählen Sie für einzelne Nutzer und Dienstkonten Cloud SQL-Client aus.
- Klicken Sie auf Speichern.
gcloud
Führen Sie gcloud projects add-iam-policy-binding
mit dem Flag --role=roles/cloudsql.instanceUser
aus.
Richtlinienbindung zu einem Nutzerkonto hinzufügen
Ersetzen Sie Folgendes:
- PROJECT_ID: durch die ID des Projekts, für das der Nutzer autorisiert sein soll.
- USERNAME: die E-Mail-Adresse des Nutzers
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:USERNAME \ --role=roles/cloudsql.instanceUser
Führen Sie das gcloud projects add-iam-policy-binding
noch einmal mit dem Flag --role=roles/cloudsql.client
Richtlinienbindung zu einem Dienstkonto hinzufügen
Dabei gilt:
- PROJECT_ID: durch die ID des Projekts, für das der Nutzer autorisiert sein soll.
- SERVICE_ACCT: die E-Mail-Adresse des Dienstkontos.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCT \ --role=roles/cloudsql.instanceUser
Führen Sie das gcloud projects add-iam-policy-binding
noch einmal mit dem Flag --role=roles/cloudsql.client
Terraform
Verwenden Sie eine Terraform-Ressource, um den IAM-Nutzer- und -Dienstkonten die erforderliche Richtlinienbindung hinzuzufügen.
Ä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
- Rufen Sie Cloud Shell auf.
-
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).
-
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 alsmain.tf
bezeichnet.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen.
-
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
-
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.
-
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.
- Ö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:
- Um den Löschschutz zu deaktivieren, setzen Sie in der Terraform-Konfigurationsdatei das Argument
deletion_protection
auffalse
.deletion_protection = "false"
- 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
-
Entfernen Sie Ressourcen, die zuvor mit Ihrer Terraform-Konfiguration angewendet wurden, indem Sie den folgenden Befehl ausführen und
yes
an der Eingabeaufforderung eingeben:terraform destroy
REST
Weisen Sie beiden Kontotypen die Rollen cloudsql.instanceUser
und cloudsql.client
zu, indem Sie die vom Befehl get-iam-policy
zurückgegebene JSON- oder YAML-Bindungsrichtlinie bearbeiten. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.
{ "role": "roles/cloudsql.instanceUser", "members": [ "user:test-user@example.com" "serviceAccount:service1@sql.iam.gserviceaccount.com" ] } { "role": "roles/cloudsql.client", "members": [ "user:test-user@example.com" "serviceAccount:service1@sql.iam.gserviceaccount.com" ] }
IAM-Nutzer Datenbankberechtigungen erteilen
Wenn ein IAM-Nutzer einer Datenbankinstanz hinzugefügt wird, erhält dieser neue Nutzer standardmäßig keine Berechtigungen für Datenbanken.Wenn ein Nutzer- oder Dienstkonto eine Verbindung zu einer Datenbank herstellt, kann es Abfragen gegen alle Datenbankobjekte ausführen, für die ÖFFENTLICH-Zugriff gewährt wurde.
Wenn sie zusätzlichen Zugriff benötigen, können mit der GRANT-Anweisung weitere Berechtigungen gewährt werden. Auf der Referenzseite zu GRANT finden Sie eine vollständige Liste der Berechtigungen, die Sie Nutzern und Dienstkonten erteilen können. Führen Sie GRANT über die Befehlszeile aus.
Dabei gilt:
- USERNAME: durch die E-Mail-Adresse des Nutzers. Da die E-Mail-Adresse Sonderzeichen (
@
und.
) enthält, muss sie in Anführungszeichen gesetzt werden. - TABLE_NAME: der Name der Tabelle, auf die Sie dem Nutzer Zugriff gewähren möchten.
grant select on TABLE_NAME to "USERNAME";
IAM-Nutzer oder Dienstkonto aus der Datenbank entfernen
Wenn Sie ein Nutzer- oder Dienstkonto aus der Datenbank entfernen möchten, löschen Sie das Konto aus der Instanz:
Console
-
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 für den Nutzer, den Sie entfernen möchten.
- Klicken Sie auf Entfernen. Dadurch wird nur der Zugriff auf diese Instanz widerrufen.
gcloud
Nutzer entfernen
Verwenden Sie die E-Mail-Adresse, zum Beispiel test-user@example.com
, um den Nutzer zu identifizieren.
Ersetzen Sie Folgendes:
- USERNAME: Die E-Mail-Adresse.
- INSTANCE_NAME: Der Name der Instanz, aus der Sie den Nutzer entfernen möchten.
gcloud sql users delete USERNAME \ --instance=INSTANCE_NAME
Löschen Sie das Dienstkonto
Dabei gilt:
- SERVICE_ACCT: durch die E-Mail-Adresse des Dienstkontos.
- INSTANCE_NAME: Der Name der Instanz, aus der Sie den Nutzer entfernen möchten.
gcloud sql users delete SERVICE_ACCT \ --instance=INSTANCE_NAME
REST Version 1
Die folgende Anfrage verwendet die Methode users:delete, um das angegebene Nutzerkonto zu löschen.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- PROJECT_ID: Ihre Projekt-ID
- INSTANCE_ID: die gewünschte Instanz-ID
- USERNAME: die E-Mail-Adresse des Nutzers oder Dienstkontos
HTTP-Methode und URL:
DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten 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" }
Anmeldedaten in Audit-Logs ansehen
Sie können Audit-Logs aktivieren, um IAM-Anmeldungen bei der Datenbank zu erfassen. Bei Problemen mit der Anmeldung können Sie mithilfe der Audit-Logs das Problem diagnostizieren.
Nach der Konfiguration können Sie mit dem Log-Explorer Audit-Logs zum Datenzugriff von erfolgreichen Anmeldungen ansehen.
Ein Log kann beispielsweise Informationen wie die folgenden enthalten:
{
insertId: "..."
logName: "projects/.../logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload: {
@type: "type.googleapis.com/google.cloud.audit.AuditLog"
authenticationInfo: {
principalEmail: "..."
}
authorizationInfo: [
0: {
granted: true
permission: "cloudsql.instances.login"
resource: "instances/..."
resourceAttributes: {
}
}
]
methodName: "cloudsql.instances.login"
request: {
@type: "type.googleapis.com/google.cloud.sql.authorization.v1.InstancesLoginRequest"
clientIpAddress: "..."
database: "..."
databaseSessionId: ...
instance: "projects/.../locations/us-central1/instances/..."
user: "..."
}
requestMetadata: {
callerIp: "..."
destinationAttributes: {
}
requestAttributes: {
auth: {
}
time: "..."
}
}
resourceName: "instances/..."
serviceName: "cloudsql.googleapis.com"
status: {
}
}
receiveTimestamp: "..."
resource: {
labels: {
database_id: "...:..."
project_id: "..."
region: "us-central"
}
type: "cloudsql_database"
}
severity: "INFO"
timestamp: "..."
}
Fehler bei der Anmeldung beheben
Wenn bei einer Anmeldung ein Fehler auftritt, gibt PostgreSQL aus Sicherheitsgründen eine kurz gefasste Fehlermeldung zurück. Beispiel:
PGPASSWORD=not-a-password psql --host=... --username=... --dbname=...
psql: error: could not connect to server: FATAL: Cloud SQL IAM user authentication failed for user "..."
FATAL: pg_hba.conf rejects connection for host "...", user "...", database "...", SSL off
Weitere Einzelheiten zum Fehler können Sie den PostgreSQL-Fehlerlogs entnehmen. Weitere Informationen finden Sie unter Logs ansehen.
Der folgende Logeintrag beschreibt beispielsweise für den vorherigen Fehler, welche Maßnahme Sie zum Lösen des Problems ergreifen können.
F ... [152172]: [1-1] db=...,user=... FATAL: Cloud SQL IAM user authentication failed for user "..."
I ... [152172]: [2-1] db=...,user=... DETAIL: Request is missing required authentication credential. Expected OAuth 2 access token, log in cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
Prüfen Sie die angezeigte Fehlermeldung. Wenn in der Meldung nicht angegeben ist, dass Sie die Cloud SQL-IAM-Nutzerauthentifizierung oder Cloud SQL-IAM-Dienstkontoauthentifizierung verwendet haben, prüfen Sie, ob der für die Anmeldung verwendete Datenbank-Nutzertyp entweder CLOUD_IAM_USER
oder CLOUD_IAM_SERVICE_ACCOUNT
ist.
Sie können dafür die Google Cloud Console oder den Befehl gcloud sql
users list
verwenden.
Prüfen Sie bei einem IAM-Nutzer, ob der Datenbank-Nutzername die E-Mail-Adresse des IAM-Nutzers ist.
Wenn Sie die IAM-Datenbankauthentifizierung verwendet haben, prüfen Sie die Details der Fehlermeldung. Sie finden die Fehlermeldung im Fehlerlog der Datenbank. Wenn die Meldung angibt, dass das als Passwort gesendete Zugriffstoken (OAuth 2.0) ungültig war, können Sie mit dem gcloud
-Befehl gcloud auth application-default print-access-token
so nach Details suchen:
curl -H "Content-Type: application/x-www-form-urlencoded" \ -d "access_token=$(gcloud auth application-default print-access-token)" \ https://www.googleapis.com/oauth2/v1/tokeninfo
Prüfen Sie, ob das Token für das jeweilige IAM-Nutzerkonto bzw. -Dienstkonto bestimmt und nicht abgelaufen ist.
Wenn die Details zeigen, dass eine Berechtigung fehlt, prüfen Sie, ob dem IAM-Nutzerkonto oder -Dienstkonto die Berechtigung cloudsql.instances.login
mithilfe der vordefinierten Rolle Cloud SQL Instance User
oder einer benutzerdefinierten Rolle in der IAM-Richtlinie der Instanz des Projektes. Weitere Informationen finden Sie in Richtlinien-Fehlerbehebung für IAM.
Wenn eine Anmeldung fehlschlägt, weil die IAM-Datenbankauthentifizierung nicht verfügbar ist, kann sich der Nutzer mit dem Standardnutzer und -passwort von PostgreSQL anmelden. Mit dieser Methode erhält der Nutzer trotzdem Zugriff auf die gesamte Datenbank. Prüfen Sie, ob die Verbindung sicher ist.
Nächste Schritte
- IAM-Datenbankauthentifizierung
- Bei einer Cloud SQL-Datenbank anmelden
- Instanzen für die IAM-Datenbankauthentifizierung konfigurieren