Gestisci gli utenti con l'autenticazione IAM dei database

In questa pagina viene descritto come aggiungere un account utente o di servizio che utilizza Autenticazione IAM di database in un database e come gestire questi account utente e di servizio. Per saperne di più sull'integrazione IAM, consulta Autenticazione IAM.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Installa Google Cloud CLI.
  5. Per initialize gcloud CLI, esegui questo comando:

    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. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  8. Installa Google Cloud CLI.
  9. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  10. Assicurati di disporre del ruolo Amministratore Cloud SQL per il tuo account utente.

    Vai alla pagina IAM

  11. Abilita autenticazione database IAM sull'istanza Cloud SQL.
  12. Assicurati di concedere l'accesso IAM agli utenti che ne hanno bisogno ogni progetto che contiene database a cui gli utenti devono accedere. Consulta Concessione, modifica e revoca dell'accesso alle risorse.
  13. Assicurati di aver aggiunto un parametro account di servizio per ogni servizio che richiede l'accesso ai database nel progetto.

Aggiungere un account utente o di servizio IAM a un'istanza di database

Devi creare un nuovo utente del database per ogni utente IAM che vuoi hanno accesso all'istanza del database. Il nome utente del database deve essere Indirizzo email dell'utente IAM, ad esempio test-user@example.com.

Quando si utilizzano comandi REST, il nome utente deve essere inserito tra virgolette perché contiene caratteri speciali (@ e .).

Gli account di servizio utilizzano il formato service-account-name@project-id.iam.gserviceaccount.com.

Per aggiungere un account utente o di servizio IAM, aggiungi un nuovo utente del database e seleziona IAM come metodo di autenticazione:

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
  3. Seleziona Users (Utenti) dal menu di navigazione SQL.
  4. Fai clic su Aggiungi account utente. L'opzione Aggiungi un account utente a si apre la scheda dell'istanza instance_name.
  5. Fai clic sul pulsante di opzione Cloud IAM.
  6. Aggiungi l'indirizzo email dell'account utente o di servizio che vuoi aggiungere nel Entità.
  7. Fai clic su Aggiungi. Ora l'utente si trova nell'elenco degli utenti.
  8. Se l'utente non è assegnato all'utente istanza Cloud SQL un ruolo, un ruolo Icona triangolo a sinistra del nome utente.

    Per concedere i privilegi di accesso all'utente, fai clic su e seleziona Aggiungi ruolo IAM. L'icona non viene più visualizzata. La l'utente ora è un membro del ruolo.

gcloud

Creare un account utente

Utilizza l'indirizzo email, ad esempio test-user@example.com, per identificare l'utente.

Sostituisci quanto segue:

  • USERNAME: l'indirizzo email dell'utente.
  • INSTANCE_NAME: il nome dell'istanza che vuoi autorizzare a cui l'utente può accedere.
gcloud sql users create USERNAME \
--instance=INSTANCE_NAME \
--type=cloud_iam_user

Creare un account di servizio

Sostituisci quanto segue:

  • SERVICE_ACCT: l'indirizzo email dell'account di servizio.
  • INSTANCE_NAME: il nome dell'istanza che vuoi autorizzare l'account di servizio a cui accedere.
gcloud sql users create SERVICE_ACCT \
--instance=INSTANCE_NAME \
--type=cloud_iam_service_account

Terraform

Per aggiungere account utente e di servizio IAM su un'istanza con Autenticazione del database IAM abilitata, utilizza una risorsa Terraform.

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

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

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

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

# Create a new IAM service account

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

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

Applica le modifiche

Per applicare la configurazione Terraform a un progetto Google Cloud, completa i passaggi nella le sezioni seguenti.

Prepara Cloud Shell

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud predefinito dove vuoi applicare le configurazioni Terraform.

    Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti in Terraform di configurazione del deployment.

Prepara la directory

Ogni file di configurazione Terraform deve avere una directory (inoltre chiamato modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo all'interno di quella directory. Il nome del file deve contenere .tf, ad esempio main.tf. In questo tutorial, il file è denominato main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.

    Copia il codice campione nel nuovo oggetto main.tf.

    Facoltativamente, copia il codice da GitHub. Opzione consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

  3. Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
  4. Salva le modifiche.
  5. Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
    terraform init

    Facoltativamente, per utilizzare la versione più recente del provider Google, includi -upgrade :

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o che l'aggiornamento soddisfi le tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione Terraform eseguendo questo comando e inserendo yes alla richiesta:
    terraform apply

    Attendi finché Terraform non visualizzi il messaggio "Applicazione completata!". .

  3. Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nella UI per assicurarti create o aggiornate da Terraform.

Elimina le modifiche

Per eliminare le modifiche:

  1. Per disabilitare la protezione dall'eliminazione, nel file di configurazione Terraform imposta la classe Argomento deletion_protection per false.
    deletion_protection =  "false"
  2. Applica la configurazione Terraform aggiornata eseguendo il comando seguente inserendo yes alla richiesta:
    terraform apply
  1. Rimuovi le risorse applicate in precedenza con la tua configurazione Terraform eseguendo questo comando e inserendo yes al prompt:

    terraform destroy

REST v1

Creare un account utente

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • project-id: il tuo ID progetto
  • instance-id: l'ID dell'istanza a cui stai aggiungendo l'utente.
  • username: l'indirizzo email dell'utente
  • operation-id: l'ID dell'operazione

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

Creare un account di servizio

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • service-acct: l'indirizzo email del tuo account di servizio
  • project-id: il tuo ID progetto
  • instance-id: l'ID istanza per l'istanza a cui stai aggiungendo l'account di servizio
  • operation-id: l'ID dell'operazione

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

Creare un account utente

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • project-id: il tuo ID progetto
  • instance-id: l'ID dell'istanza a cui stai aggiungendo l'utente.
  • username: l'indirizzo email dell'utente
  • operation-id: l'ID dell'operazione

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

Creare un account di servizio

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • service-acct: l'indirizzo email del tuo account di servizio
  • project-id: il tuo ID progetto
  • instance-id: l'ID istanza per l'istanza a cui stai aggiungendo l'account di servizio
  • operation-id: l'ID dell'operazione

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

Aggiungi un'associazione di criteri IAM a un account utente o di servizio

Questa procedura aggiunge un'associazione di criteri al criterio IAM di un un progetto specifico, una volta assegnato un ID progetto e l'associazione. Il comando binding è composto da un membro, un ruolo e una condizione facoltativa.

Il nome utente del database deve essere l'indirizzo email dell'utente IAM, per esempio test-user@example.com. Devono essere inserite tra virgolette perché contengono (@ e .).

Console

  1. Nella console Google Cloud, vai alla pagina IAM.

    Vai a IAM

  2. Fai clic su Aggiungi.
  3. In Nuovi membri, inserisci un indirizzo email. Puoi aggiungere singoli utenti, account di servizio o gruppi come membri, ma ogni progetto deve avere almeno un'entità come membro.
  4. In Ruolo, vai a Cloud SQL e Seleziona Utente istanza Cloud SQL e Client Cloud SQL.
  5. Per singoli utenti e account di servizio, seleziona Client Cloud SQL.
  6. Fai clic su Salva.

gcloud

Corsa gcloud projects add-iam-policy-binding con il flag --role=roles/cloudsql.instanceUser.

Aggiungere un'associazione di criteri a un account utente

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto per cui vuoi autorizzare da utilizzare.
  • USERNAME: l'indirizzo email dell'utente.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:USERNAME \
    --role=roles/cloudsql.instanceUser
  

Esegui l' gcloud projects add-iam-policy-binding di nuovo con il flag --role=roles/cloudsql.client.

Aggiungere un'associazione di criteri a un account di servizio

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto per cui vuoi autorizzare da utilizzare.
  • SERVICE_ACCT: l'indirizzo email del servizio .
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCT \
    --role=roles/cloudsql.instanceUser
  

Esegui l' gcloud projects add-iam-policy-binding di nuovo con il flag --role=roles/cloudsql.client.

Terraform

Aggiungere l'associazione di criteri richiesta all'utente IAM utilizzare una risorsa Terraform.

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

Applica le modifiche

Per applicare la configurazione Terraform a un progetto Google Cloud, completa i passaggi nella le sezioni seguenti.

Prepara Cloud Shell

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud predefinito dove vuoi applicare le configurazioni Terraform.

    Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti in Terraform di configurazione del deployment.

Prepara la directory

Ogni file di configurazione Terraform deve avere una directory (inoltre chiamato modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo all'interno di quella directory. Il nome del file deve contenere .tf, ad esempio main.tf. In questo tutorial, il file è denominato main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.

    Copia il codice campione nel nuovo oggetto main.tf.

    Facoltativamente, copia il codice da GitHub. Opzione consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

  3. Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
  4. Salva le modifiche.
  5. Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
    terraform init

    Facoltativamente, per utilizzare la versione più recente del provider Google, includi -upgrade :

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o che l'aggiornamento soddisfi le tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione Terraform eseguendo questo comando e inserendo yes alla richiesta:
    terraform apply

    Attendi finché Terraform non visualizzi il messaggio "Applicazione completata!". .

  3. Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nella UI per assicurarti create o aggiornate da Terraform.

Elimina le modifiche

Per eliminare le modifiche:

  1. Per disabilitare la protezione dall'eliminazione, nel file di configurazione Terraform imposta la classe Argomento deletion_protection per false.
    deletion_protection =  "false"
  2. Applica la configurazione Terraform aggiornata eseguendo il comando seguente inserendo yes alla richiesta:
    terraform apply
  1. Rimuovi le risorse applicate in precedenza con la tua configurazione Terraform eseguendo questo comando e inserendo yes al prompt:

    terraform destroy

REST

Concedi i cloudsql.instanceUser e le cloudsql.client a entrambi i tipi di account modificando il criterio di associazione JSON o YAML restituito dal comando get-iam-policy. Tieni presente che queste norme modifica non avrà effetto finché non imposti il criterio aggiornato.

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

Concedi i privilegi di database all'utente IAM

Quando un utente IAM viene aggiunto a un'istanza di database, il nuovo utente non vengono concessi privilegi su nessun database, per impostazione predefinita.

Quando un account utente o di servizio si connette a un database, può eseguire query rispetto a qualsiasi oggetto di database il cui accesso è stato concesso PUBBLICO.

Se hanno bisogno di un accesso aggiuntivo, è possibile concedere i privilegi utilizzando l'istruzione GRANT. Consulta le pagina di riferimento GRANT per un elenco completo i privilegi che puoi concedere a utenti e account di servizio. Esegui GRANT dal dall'interfaccia a riga di comando.

Sostituisci quanto segue:

  • USERNAME: l'indirizzo email dell'utente. Devi usare le virgolette intorno all'email perché contiene caratteri speciali (@ e .)
  • TABLE_NAME: il nome della tabella che vuoi assegnare all'utente a cui accedono.
grant select on TABLE_NAME to "USERNAME";

Rimuovi un account utente o di servizio IAM dal database

Per rimuovere un account utente o di servizio dal database, devi eliminare l'account dall'istanza:

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
  3. Seleziona Users (Utenti) dal menu di navigazione SQL.
  4. Fai clic su in corrispondenza dell'utente che ti interessa. da rimuovere.
  5. Seleziona Rimuovi. Revoca l'accesso solo a questa istanza.

gcloud

Revocare un utente

Utilizza l'indirizzo email, ad esempio test-user@example.com, per identificare l'utente.

Sostituisci quanto segue:

  • USERNAME: l'indirizzo email.
  • INSTANCE_NAME: il nome dell'istanza di cui vuoi rimuovere l'elemento da cui proviene l'utente.
gcloud sql users delete USERNAME \
--instance=INSTANCE_NAME

Eliminare l'account di servizio

Sostituisci quanto segue:

  • SERVICE_ACCT: l'indirizzo email dell'account di servizio.
  • INSTANCE_NAME: il nome dell'istanza di cui vuoi rimuovere l'elemento da cui proviene l'utente.
gcloud sql users delete SERVICE_ACCT \
--instance=INSTANCE_NAME

REST v1

La seguente richiesta utilizza users.delete per eliminare l'account utente specificato.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto
  • INSTANCE_ID: l'ID istanza desiderato
  • USERNAME: l'indirizzo email dell'account utente o di servizio

Metodo HTTP e URL:

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

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

La seguente richiesta utilizza users.delete per eliminare l'account utente specificato.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto
  • INSTANCE_ID: l'ID istanza desiderato
  • USERNAME: l'indirizzo email dell'account utente o di servizio

Metodo HTTP e URL:

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

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

Visualizza le informazioni di accesso negli audit log

Puoi abilitare gli audit log per acquisire gli accessi IAM al database. In caso di problemi di accesso, puoi utilizzare i log di controllo per diagnosticare il problema.

Dopo la configurazione, visualizza gli audit log di accesso ai dati di accessi riusciti utilizzando Esplora log.

Ad esempio, un log potrebbe contenere informazioni simili alle seguenti:

{
 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: "..."
}

Risolvere un errore di accesso

Quando un tentativo di accesso non va a buon fine, PostgreSQL restituisce un messaggio di errore minimo per per motivi di sicurezza. Ad esempio:

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

Puoi esaminare i log degli errori PostgreSQL per ulteriori dettagli sull'errore. Per ulteriori informazioni, vedi Visualizzazione dei log.

Ad esempio, per l'errore precedente, la seguente voce di log spiega l'azione che puoi svolgere per risolvere il problema.

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.

Controlla il messaggio di errore visualizzato. Se il messaggio non indica ha utilizzato l'autenticazione utente IAM di Cloud SQL o "L'autenticazione dell'account di servizio IAM di Cloud SQL" verifica che il tipo di utente del database utilizzato per accedere è CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT. Per verificarlo, puoi utilizzare la console Google Cloud o il comando gcloud sql users list. Per un utente IAM, verifica che il nome utente del database sia Email dell'utente IAM.

Se hai utilizzato l'autenticazione del database IAM, controlla i dettagli del messaggio di errore. Puoi trovare nel log degli errori del database. Se indica il token di accesso (OAuth 2.0) che hai inviato perché la password non era valida, puoi usare gcloud auth application-default print-access-token gcloud per trovare i dettagli del token, come segue:

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

Verifica che il token sia destinato all'utente o al servizio IAM previsto dell'account e non sia scaduto.

Se i dettagli indicano una mancanza di autorizzazione, verifica la proprietà IAM all'account utente o di servizio viene concessa l'autorizzazione cloudsql.instances.login utilizzando il ruolo Cloud SQL Instance User predefinito o il ruolo personalizzato Criterio IAM del progetto dell'istanza. Utilizza IAM Strumento per la risoluzione dei problemi relativi ai criteri per ulteriore assistenza.

Se un accesso non va a buon fine perché l'autenticazione del database IAM non è disponibile, l'utente può accedere utilizzando il metodo utente e password PostgreSQL predefiniti. Questo metodo di accesso offre comunque l'accesso utente all'intero database. Verifica che la connessione sia protetta connessione.

Passaggi successivi