Gestire gli utenti con l'autenticazione IAM dei database

Questa pagina descrive come aggiungere e gestire utenti, service account e gruppi in un'istanza Cloud SQL che utilizza l'autenticazione IAM dei database.

Per ulteriori informazioni sull'integrazione di IAM, consulta Autenticazione IAM.

Prima di iniziare

  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. Assicurati di disporre del ruolo Amministratore Cloud SQL nel tuo account utente.

    Vai alla pagina IAM

  11. Abilita l'autenticazione IAM dei database nell'istanza Cloud SQL.
  12. Assegna il ruolo IAM cloudsql.instanceUser necessario alle entità IAM, ad esempio utenti IAM, account di servizio o gruppi per accedere all'istanza Cloud SQL.
  13. Se utilizzi un account di servizio, assicurati di averne aggiunto uno per ogni servizio che richiede l'accesso ai database del progetto.
  14. Per ulteriori informazioni sulla creazione di account di servizio, consulta Creare account di servizio.

Aggiungere un'associazione di criteri IAM a un utente, un account di servizio o un gruppo

Questa procedura aggiunge un'associazione di criteri al criterio IAM di un progetto specifico, a partire da un ID progetto e dall'associazione. Il comando di associazione è costituito da un membro, un ruolo e una condizione facoltativa.

Il nome utente del database deve essere l'indirizzo email dell'utente IAM, ad esempio example-user@example.com. Deve essere tutto minuscolo e utilizzare le virgolette perché contiene caratteri speciali (@ 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 come membri singoli utenti, account di servizio o gruppi, ma ogni progetto deve avere almeno un'entità come membro.
  4. In Ruolo, vai a Cloud SQL e seleziona Utente istanza Cloud SQL.
  5. (Facoltativo) Se vuoi connetterti utilizzando il proxy di autenticazione Cloud SQL o i connettori dei linguaggi Cloud SQL, seleziona anche Client Cloud SQL.
  6. Fai clic su Salva.

gcloud

Esegui 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 l'utente a eseguire l'accesso.
  • USERNAME: l'indirizzo email dell'utente.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:USERNAME \
    --role=roles/cloudsql.instanceUser
  

Se vuoi connetterti utilizzando il proxy di autenticazione Cloud SQL o i connettori dei linguaggi Cloud SQL, esegui nuovamente gcloud projects add-iam-policy-binding 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 l'utente a eseguire l'accesso.
  • SERVICE_ACCT: l'indirizzo email dell'account di servizio.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCT \
    --role=roles/cloudsql.instanceUser
  

Se vuoi connetterti utilizzando il proxy di autenticazione Cloud SQL o i connettori dei linguaggi Cloud SQL, esegui nuovamente gcloud projects add-iam-policy-binding con il flag --role=roles/cloudsql.client.

Aggiungere un'associazione di criteri a un gruppo Cloud Identity

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto di cui vuoi autorizzare l'utilizzo da parte dei membri del gruppo.
  • GROUP_EMAIL_ADDRESS: l'indirizzo email del gruppo. Ad esempio, example-group@example.com.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=group:GROUP_EMAIL_ADDRESS \
    --role=roles/cloudsql.instanceUser
   

A tutti i membri del gruppo specificato viene concesso il ruolo Utente istanza Cloud SQL e possono accedere alle istanze di questo progetto.

Se vuoi connetterti utilizzando il proxy di autenticazione Cloud SQL o i connettori dei linguaggi Cloud SQL, esegui nuovamente gcloud projects add-iam-policy-binding con il flag --role=roles/cloudsql.client.

Terraform

Per aggiungere l'associazione dei criteri richiesta agli account di servizio e utente IAM, utilizza 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 in un progetto Google Cloud, completa i passaggi nelle seguenti sezioni.

Prepara Cloud Shell

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

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

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

Prepara la directory

Ogni file di configurazione di Terraform deve avere una propria directory (chiamata anche modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione .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 file main.tf appena creato.

    Se vuoi, copia il codice da GitHub. Questa 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

    Se vuoi, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform sta per creare o aggiornare corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione di Terraform eseguendo il seguente comando e inserendo yes al prompt:
    terraform apply

    Attendi che Terraform mostri il messaggio "Applicazione completata".

  3. Apri il tuo progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

Elimina le modifiche

Per eliminare le modifiche, procedi nel seguente modo:

  1. Per disattivare la protezione dall'eliminazione, imposta l'argomento deletion_protection su false nel file di configurazione Terraform.
    deletion_protection =  "false"
  2. Applica la configurazione Terraform aggiornata eseguendo il seguente comando e inserendo yes al prompt:
    terraform apply
  1. Rimuovi le risorse applicate in precedenza con la configurazione Terraform eseguendo il seguente comando e inserendo yes al prompt:

    terraform destroy

Terraform

Per aggiungere l'associazione dei criteri richiesta agli account di servizio e utente IAM, utilizza 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 = [
    "group:example-group@example.com"
  ]
}

Applica le modifiche

Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle seguenti sezioni.

Prepara Cloud Shell

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

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

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

Prepara la directory

Ogni file di configurazione di Terraform deve avere una propria directory (chiamata anche modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione .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 file main.tf appena creato.

    Se vuoi, copia il codice da GitHub. Questa 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

    Se vuoi, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform sta per creare o aggiornare corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione di Terraform eseguendo il seguente comando e inserendo yes al prompt:
    terraform apply

    Attendi che Terraform mostri il messaggio "Applicazione completata".

  3. Apri il tuo progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

Elimina le modifiche

Per eliminare le modifiche, procedi nel seguente modo:

  1. Per disattivare la protezione dall'eliminazione, imposta l'argomento deletion_protection su false nel file di configurazione Terraform.
    deletion_protection =  "false"
  2. Applica la configurazione Terraform aggiornata eseguendo il seguente comando e inserendo yes al prompt:
    terraform apply
  1. Rimuovi le risorse applicate in precedenza con la configurazione Terraform eseguendo il seguente comando e inserendo yes al prompt:

    terraform destroy

REST

Concedi i ruoli cloudsql.instanceUser e 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 questa modifica delle norme non viene applicata finché non imposti le norme aggiornate.

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

Aggiungere un singolo utente o account di servizio IAM a un'istanza Cloud SQL

Per accedere ai database, devi creare un nuovo account utente per ogni singolo account di servizio o utente IAM che aggiungi all'istanza Cloud SQL. Se aggiungi un gruppo IAM, non devi creare un account utente per ogni membro del gruppo.

Il nome utente del database deve essere l'indirizzo email dell'utente IAM e deve essere tutto in minuscolo. Ad esempio, example-user@example.com.

Quando utilizzi i comandi REST, il nome utente deve essere tra virgolette perché contiene caratteri speciali (@ e .). Gli account di servizio utilizzano il formatoservice-account-name@project-id.iam.gserviceaccount.com.

Per aggiungere un singolo utente o account di servizio IAM, aggiungi un nuovo account utente 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 Utenti dal menu di navigazione SQL.
  4. Fai clic su Aggiungi account utente. Viene visualizzata la scheda Aggiungi un account utente all'istanza instance_name.
  5. Fai clic sul pulsante di opzione Cloud IAM.
  6. Aggiungi l'indirizzo email dell'utente o dell'account di servizio che vuoi aggiungere nel campo entità.
  7. Fai clic su Aggiungi. L'account utente o di servizio è ora nell'elenco degli account utente.
  8. Se all'utente non è stato assegnato il ruolo IAM cloudsql.instanceUser dopo la creazione dell'account utente, accanto al nome utente viene visualizzata un'icona triangolo.

    Per concedere all'utente le autorizzazioni di accesso, fai clic sull'icona e poi seleziona Aggiungi ruolo IAM. Se l'icona non viene più visualizzata, all'account utente viene assegnato il ruolo IAM che conferisce l'autorizzazione di accesso.

gcloud

Creare un account utente

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

Sostituisci quanto segue:

  • USERNAME: l'indirizzo email dell'utente.
  • INSTANCE_NAME: il nome dell'istanza a cui vuoi autorizzare l'utente ad 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 a cui vuoi autorizzare l'accesso dell'account di servizio.
gcloud sql users create SERVICE_ACCT \
--instance=INSTANCE_NAME \
--type=cloud_iam_service_account

Terraform

Per aggiungere account utente e di servizio IAM a un'istanza con l'autenticazione IAM dei database abilitata, utilizza una risorsa Terraform.

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

Applica le modifiche

Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle seguenti sezioni.

Prepara Cloud Shell

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

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

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

Prepara la directory

Ogni file di configurazione di Terraform deve avere una propria directory (chiamata anche modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione .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 file main.tf appena creato.

    Se vuoi, copia il codice da GitHub. Questa 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

    Se vuoi, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform sta per creare o aggiornare corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione di Terraform eseguendo il seguente comando e inserendo yes al prompt:
    terraform apply

    Attendi che Terraform mostri il messaggio "Applicazione completata".

  3. Apri il tuo progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

Elimina le modifiche

Per eliminare le modifiche, procedi nel seguente modo:

  1. Per disattivare la protezione dall'eliminazione, imposta l'argomento deletion_protection su false nel file di configurazione Terraform.
    deletion_protection =  "false"
  2. Applica la configurazione Terraform aggiornata eseguendo il seguente comando e inserendo yes al prompt:
    terraform apply
  1. Rimuovi le risorse applicate in precedenza con la configurazione Terraform eseguendo il seguente comando e inserendo yes al prompt:

    terraform destroy

REST v1

Creare un account utente

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

  • PROJECT_ID: l'ID progetto
  • INSTANCE_ID: l'ID istanza a cui stai aggiungendo l'utente
  • USERNAME: l'indirizzo email dell'utente

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 di queste 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, apporta le seguenti sostituzioni:

  • SERVICE_ACCT: l'indirizzo email dell'account di servizio
  • PROJECT_ID: l'ID progetto
  • INSTANCE_ID: l'ID istanza dell'istanza a cui stai aggiungendo l'account di servizio

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 di queste 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, apporta le seguenti sostituzioni:

  • PROJECT_ID: l'ID progetto
  • INSTANCE_ID: l'ID istanza a cui stai aggiungendo l'utente
  • USERNAME: l'indirizzo email dell'utente

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 di queste 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, apporta le seguenti sostituzioni:

  • SERVICE_ACCT: l'indirizzo email dell'account di servizio
  • PROJECT_ID: l'ID progetto
  • INSTANCE_ID: l'ID istanza dell'istanza a cui stai aggiungendo l'account di servizio

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

Aggiungere un gruppo IAM a un'istanza Cloud SQL

Per utilizzare l'autenticazione dei gruppi IAM e aggiungere un gruppo IAM a un'istanza Cloud SQL, utilizza una delle procedure descritte in questa sezione. Dopo aver aggiunto il gruppo IAM, non è necessario aggiungere i singoli membri del gruppo all'istanza. Per maggiori informazioni, consulta Aggiungere automaticamente i membri di un gruppo a un'istanza Cloud SQL.

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 Utenti dal menu di navigazione SQL.
  4. Fai clic su Aggiungi account utente. Viene visualizzata la scheda Aggiungi un account utente all'istanza instance_name.
  5. Fai clic sul pulsante di opzione Cloud IAM.
  6. Aggiungi l'indirizzo email del gruppo da aggiungere nel Principale.
  7. Fai clic su Aggiungi. Il gruppo è ora nell'elenco utenti.
  8. Se al gruppo non è stato assegnato il ruolo IAM cloudsql.instanceUser dopo la creazione dell'account utente, accanto al gruppo viene visualizzata un'icona triangolo.

    Per concedere ai membri del gruppo le autorizzazioni di accesso, fai clic sull'icona e seleziona Aggiungi ruolo IAM. Se l'icona non viene più visualizzata, significa che a tutti i membri del gruppo è stato assegnato il ruolo che concede l'autorizzazione di accesso.

gcloud

Sostituisci quanto segue:

  • GROUP_EMAIL_ADDRESS: l'indirizzo email del gruppo Cloud Identity che vuoi aggiungere all'istanza. Ad esempio, example-group@example.com.
  • INSTANCE_NAME: il nome dell'istanza a cui vuoi aggiungere il gruppo.

Esegui questo comando:

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

Terraform

Per aggiungere account utente e di servizio IAM a un'istanza con l'autenticazione IAM dei database abilitata, utilizza una risorsa Terraform.

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

Applica le modifiche

Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle seguenti sezioni.

Prepara Cloud Shell

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

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

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

Prepara la directory

Ogni file di configurazione di Terraform deve avere una propria directory (chiamata anche modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione .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 file main.tf appena creato.

    Se vuoi, copia il codice da GitHub. Questa 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

    Se vuoi, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform sta per creare o aggiornare corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione di Terraform eseguendo il seguente comando e inserendo yes al prompt:
    terraform apply

    Attendi che Terraform mostri il messaggio "Applicazione completata".

  3. Apri il tuo progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

Elimina le modifiche

Per eliminare le modifiche, procedi nel seguente modo:

  1. Per disattivare la protezione dall'eliminazione, imposta l'argomento deletion_protection su false nel file di configurazione Terraform.
    deletion_protection =  "false"
  2. Applica la configurazione Terraform aggiornata eseguendo il seguente comando e inserendo yes al prompt:
    terraform apply
  1. Rimuovi le risorse applicate in precedenza con la configurazione Terraform eseguendo il seguente comando e inserendo yes al prompt:

    terraform destroy

REST v1

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

  • PROJECT_ID: l'ID progetto
  • INSTANCE_ID: l'ID istanza dell'istanza a cui aggiungi il gruppo Cloud Identity
  • GROUP_EMAIL: l'indirizzo email del gruppo Cloud Identity

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste 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": "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

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

  • PROJECT_ID: l'ID progetto
  • INSTANCE_ID: l'ID istanza dell'istanza a cui aggiungi il gruppo Cloud Identity
  • GROUP_EMAIL: l'indirizzo email del gruppo Cloud Identity

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste 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": "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"
}

Aggiungere automaticamente i membri di un gruppo a un'istanza Cloud SQL

Quando aggiungi un gruppo IAM a un'istanza Cloud SQL, tutti i membri (utenti e account di servizio) del gruppo ereditano le autorizzazioni IAM per l'autenticazione nell'istanza. Non è necessario aggiungere il membro del gruppo singolarmente all'istanza Cloud SQL. Dopo che un membro del gruppo ha eseguito l'accesso e si è autenticato correttamente nell'istanza per la prima volta, Cloud SQL crea un account utente di gruppo o un account di servizio di gruppo per quel membro del gruppo. Puoi visualizzare il membro del gruppo elencato nell'istanza dopo il primo accesso riuscito.

Per ulteriori informazioni sull'accesso, consulta Accedere a un database con l'autenticazione IAM dei database.

Gestire i membri di un gruppo in un'istanza Cloud SQL

Quando aggiungi un gruppo IAM a un'istanza Cloud SQL, tutti i membri (account utente o di servizio) del gruppo ereditano l'autorizzazione IAM per l'autenticazione all'istanza. Puoi controllare l'accesso a un'istanza gestendo il gruppo in Cloud Identity. Ad esempio, se vuoi assegnare a un nuovo utente l'accesso a un'istanza, aggiungilo come membro di un gruppo in Cloud Identity. Non è necessario rimuovere o aggiungere i membri del gruppo separatamente a livello di istanza Cloud SQL perché le modifiche all'appartenenza al gruppo vengono propagate automaticamente all'istanza Cloud SQL. Le modifiche ai componenti del gruppo, ad esempio l'aggiunta o la rimozione di un membro, richiedono circa 15 minuti per essere propagate. Questo è in aggiunta al tempo necessario per le modifiche IAM.

La concessione o la revoca dei privilegi di database per un gruppo IAM in MySQL ha effetto immediato. Ad esempio, se revochi l'accesso a una tabella, i membri del gruppo IAM perdono immediatamente l'accesso a quella tabella.

È possibile che un utente o un account di servizio sia membro di più gruppi IAM. Se un utente o un account di servizio appartiene a più gruppi IAM in un'istanza, dispone di tutte le autorizzazioni IAM e dei privilegi di database combinati di ciascuno di questi gruppi IAM.

Quando aggiungi un nuovo membro (utente o account di servizio) al gruppo IAM in Cloud Identity e questo accede correttamente all'istanza per la prima volta, eredita automaticamente i privilegi di database concessi al gruppo. Per utilizzare i privilegi di database appena acquisiti nella stessa sessione di accesso, utilizza la seguente dichiarazione.

SET ROLE ALL;

Per ulteriori informazioni, consulta SET ROLE nella documentazione di MySQL.

Concedi i privilegi di database a un singolo utente IAM o account di servizio

Quando un singolo utente o servizio IAM viene aggiunto a un'istanza Cloud SQL, per impostazione predefinita al nuovo account non vengono concessi privilegi su nessun database.

Per concedere i privilegi di database agli account, utilizza l'istruzione GRANT. Consulta la pagina di riferimento GRANT per un elenco completo dei privilegi che puoi concedere a utenti e account di servizio. Esegui GRANT dalla riga di comandomysql.

Sostituisci quanto segue:

  • USERNAME: per un account utente, si tratta dell'indirizzo email dell'utente IAM con @ e la stringa del dominio troncati. Ad esempio, se l'indirizzo email dell'utente IAM è example-user@example.com, il nome utente sarà example-user. Per un account di servizio, è l'indirizzo email dell'account di servizio senza il dominio @project-id.iam.gserviceaccount.com.
  • DATABASE_NAME: il nome del database che ospita la tabella.
  • TABLE_NAME: il nome della tabella a cui vuoi concedere all'utente accesso.
  • grant select on DATABASE_NAME.TABLE_NAME to "USERNAME";

    Concedere i privilegi di database a un gruppo IAM

    Quando utilizzi l'autenticazione di gruppo IAM, concedi i privilegi di database ai gruppi IAM anziché ai singoli utenti o account di servizio. Per impostazione predefinita, quando aggiungi un gruppo IAM a un'istanza Cloud SQL, il gruppo non dispone di privilegi di database.

    Per concedere i privilegi di database al gruppo IAM, utilizza l'istruzione GRANT. Dopo aver eseguito l'accesso all'istanza Cloud SQL per la prima volta, ogni membro del gruppo (inclusi utenti e account di servizio) eredita automaticamente i privilegi di database concessi al gruppo.

    Sostituisci quanto segue:

  • GROUP_NAME: la prima parte dell'indirizzo email del gruppo Cloud Identity con @ e il nome di dominio troncati. Ad esempio, se l'indirizzo email del gruppo IAM è example-group@example.com, il nome del gruppo è example-group.
  • DATABASE_NAME: il nome del database che ospita la tabella.
  • TABLE_NAME: il nome della tabella a cui vuoi concedere all'utente accesso.
  • Esegui GRANT dalla riga di comando mysql.

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

    Sostituisci HOSTNAME con il nome di dominio dell'indirizzo email del gruppo IAM.

    Per ulteriori informazioni sull'assegnazione dei privilegi, consulta la pagina di riferimento GRANT nella documentazione di MySQL.

    I privilegi di database concessi al gruppo IAM entrano in vigore immediatamente.

    Visualizzare gli utenti, gli account di servizio e i gruppi IAM aggiunti a un'istanza Cloud SQL

    Per visualizzare gli utenti, gli account di servizio e i gruppi IAM aggiunti all'istanza Cloud SQL, esegui i comandi riportati di seguito.

    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 Utenti dal menu di navigazione SQL. La pagina mostra un elenco di utenti IAM, account di servizio e gruppi Cloud Identity aggiunti all'istanza.
    4. (Facoltativo) Per visualizzare un elenco di utenti o account di servizio IAM che hanno già eseguito l'accesso all'istanza, fai clic su Membri del gruppo IAM autenticati.

    gcloud

    Sostituisci INSTANCE_NAME con il nome dell'istanza contenente i gruppi che vuoi visualizzare.

      gcloud sql users list --instance=INSTANCE_NAME
      

    I gruppi hanno un tipo di utente CLOUD_IAM_GROUP.

    L'output elenca anche gli account utente e di servizio sulla tua istanza Cloud SQL.

    • Gli account utente che fanno parte di un gruppo sono di tipo CLOUD_IAM_GROUP_USER.
    • Gli account di servizio che sono membri di un gruppo hanno il tipo CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
    • Gli account utente che sono singoli account utente di autenticazione del database IAM hanno il tipo CLOUD_IAM_USER.
    • Gli account di servizio che sono singoli account di servizio di autenticazione del database IAM hanno il tipo CLOUD_IAM_SERVICE_ACCOUNT.

    REST v1

    La richiesta seguente utilizza il metodo users.list per elencare gli utenti che hanno account nell'istanza Cloud SQL.

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

    • PROJECT_ID: l'ID progetto
    • INSTANCE_ID: l'ID istanza

    Metodo HTTP e URL:

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

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

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

    I gruppi hanno un tipo di utente CLOUD_IAM_GROUP.

    L'output elenca anche gli account utente e di servizio sulla tua istanza Cloud SQL.

    • Gli account utente che fanno parte di un gruppo sono di tipo CLOUD_IAM_GROUP_USER.
    • Gli account di servizio che sono membri di un gruppo hanno il tipo CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
    • Gli account utente che sono singoli account utente di autenticazione del database IAM hanno il tipo CLOUD_IAM_USER.
    • Gli account di servizio che sono singoli account di servizio di autenticazione del database IAM hanno il tipo CLOUD_IAM_SERVICE_ACCOUNT.

    REST v1beta4

    La richiesta seguente utilizza il metodo users.list per elencare gli utenti che hanno account nell'istanza Cloud SQL.

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

    • project-id: il tuo ID progetto
    • instance-id: l'ID istanza desiderato

    Metodo HTTP e URL:

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

    Per inviare la richiesta, espandi una di queste opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

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

    I gruppi hanno un tipo di utente CLOUD_IAM_GROUP.

    L'output elenca anche gli account utente e di servizio sulla tua istanza Cloud SQL.

    • Gli account utente che fanno parte di un gruppo sono di tipo CLOUD_IAM_GROUP_USER.
    • Gli account di servizio che sono membri di un gruppo hanno il tipo CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
    • Gli account utente che sono singoli account utente di autenticazione del database IAM hanno il tipo CLOUD_IAM_USER.
    • Gli account di servizio che sono singoli account di servizio di autenticazione del database IAM hanno il tipo CLOUD_IAM_SERVICE_ACCOUNT.

    Rimuovere un singolo utente o account di servizio IAM da un'istanza Cloud SQL

    Per rimuovere un singolo utente o account di servizio che non è membro di un gruppo dall'istanza Cloud SQL, elimina l'account utilizzando il seguente comando:

    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 Utenti dal menu di navigazione SQL.
    4. Fai clic su accanto all'utente che vuoi rimuovere.
    5. Seleziona Rimuovi. In questo modo viene revocato l'accesso solo a questa istanza.

    gcloud

    Ritirare l'accesso a un utente

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

    Sostituisci quanto segue:

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

    Eliminare il singolo account di servizio

    Sostituisci quanto segue:

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

    REST v1

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

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

    • PROJECT_ID: il tuo ID progetto
    • INSTANCE_ID: l'ID istanza desiderato
    • USERNAME: l'indirizzo email dell'account utente o 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 di queste 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 richiesta seguente utilizza il metodo users.delete per eliminare l'account utente specificato.

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

    • PROJECT_ID: il tuo ID progetto
    • INSTANCE_ID: l'ID istanza desiderato
    • USERNAME: l'indirizzo email dell'account utente o 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 di queste 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"
    }
    

    Rimuovere i membri del gruppo IAM da un'istanza Cloud SQL

    Esistono due modi per rimuovere i membri del gruppo IAM da un'istanza Cloud SQL:

    • Rimozione automatica
    • Rimozione manuale

    Rimozione automatica

    Per rimuovere un membro di un gruppo IAM, devi rimuovere la sua appartenenza dai gruppi IAM applicabili in Cloud Identity. Dopo che gli utenti del gruppo IAM hanno perso l'appartenenza a tutti i gruppi applicabili in Cloud Identity, Cloud SQL rimuove automaticamente questi utenti di gruppo dall'istanza.

    Le modifiche all'appartenenza al gruppo, ad esempio l'aggiunta o la rimozione di un membro, richiedono circa 15 minuti per essere propagate. Questo tempo si aggiunge al tempo necessario per le modifiche IAM.

    Rimozione manuale

    Se non è possibile rimuovere automaticamente un utente di un gruppo IAM, puoi rimuoverlo manualmente. Non puoi rimuovere manualmente un utente di gruppo IAM da un'istanza Cloud SQL utilizzando gcloud CLI, la console Google Cloud, Terraform o l'API Cloud SQL Admin. Gli utenti del database con privilegi di superutente possono invece eliminare manualmente gli utenti del gruppo IAM dall'istanza Cloud SQL utilizzando un'istruzione DROP USER da un client MySQL.

    Dopo aver rimosso manualmente un utente del gruppo IAM dall'istanza Cloud SQL, assicurati di rimuoverlo anche dal gruppo IAM in Cloud Identity per impedire ulteriori accessi all'istanza Cloud SQL.

    Eliminare un gruppo IAM da un'istanza Cloud SQL

    Puoi eliminare i gruppi IAM aggiunti dall'istanza Cloud SQL. Dopo aver eliminato un gruppo IAM dall'istanza, tutti gli utenti e gli account di servizio appartenenti al gruppo IAM perdono i privilegi di database concessi al gruppo IAM. Inoltre, si applicano le seguenti condizioni:

    • Gli utenti e gli account di servizio che appartengono al gruppo IAM possono comunque accedere finché l'autorizzazione IAM cloudsql.instances.login non viene rimossa dal gruppo.
    • Se l'eliminazione di un gruppo fa sì che gli account utente o di servizio del gruppo IAM non appartengano ad altri gruppi nell'istanza, Cloud SQL rimuove gli account utente o di servizio del gruppo IAM dall'istanza.

    Se elimini tutti i gruppi IAM da un'istanza Cloud SQL, tutti gli utenti e gli account di servizio del gruppo IAM perdono tutti i loro privilegi di database. Inoltre, si applicano le seguenti condizioni:

    • Tutti gli utenti del gruppo IAM e gli account di servizio non riescono ad accedere all'istanza.
    • Cloud SQL rimuove automaticamente dall'istanza anche tutti gli utenti e gli account di servizio del gruppo IAM.

    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 Utenti dal menu di navigazione SQL.
    4. Fai clic su per il gruppo che vuoi rimuovere.
    5. Seleziona Rimuovi. In questo modo viene revocato l'accesso solo a questa istanza.

    gcloud

    Per eliminare un gruppo Cloud Identity da un'istanza, utilizza il comando gcloud sql users delete.

    Sostituisci quanto segue:

    • GROUP_NAME: la prima parte dell'indirizzo email del gruppo Cloud Identity. Ad esempio, se utilizzi l'indirizzo email example-group@example.com, il nome del gruppo Cloud Identity è example-group.
    • HOSTNAME: la seconda parte dell'indirizzo email rappresenta il nome host del gruppo Cloud Identity. Ad esempio, se utilizzi l'indirizzo email example-group@example.com, il nome host è example.com.
    • INSTANCE_NAME: il nome dell'istanza Cloud SQL con il gruppo Cloud Identity che vuoi eliminare.
    gcloud sql users delete GROUP_NAME \
       --host=HOSTNAME \
       --instance=INSTANCE_NAME

    Rimuovere le autorizzazioni di accesso IAM da un gruppo IAM

    Se revochi il ruolo cloudsql.instanceUser da un gruppo IAM, tutti i membri del gruppo perdono la possibilità di accedere a qualsiasi istanza Cloud SQL del progetto. Gli utenti o gli account di servizio possono accedere alle istanze solo se sono membri di un altro gruppo IAM che ha ancora autorizzazioni di accesso.

    Per revocare un ruolo da un gruppo Cloud Identity, consulta Revocare un singolo ruolo.

    Rimuovere utenti da un gruppo IAM

    I membri del gruppo IAM, come utenti o account di servizio, possono essere rimossi dal gruppo IAM in Cloud Identity.

    Una volta propagata la rimozione in IAM, l'utente non può più accedere al database, a meno che non abbia ricevuto autorizzazioni di accesso da un altro gruppo o che non gli siano stati concessi direttamente i privilegi di accesso. Inoltre, gli utenti rimossi da un gruppo perdono i privilegi di database del gruppo.

    Se un utente di gruppo IAM non appartiene a nessun gruppo nell'istanza, Cloud SQL rimuove automaticamente l'utente dall'istanza.

    Visualizzare i dati di accesso negli audit log

    Puoi attivare 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.

    Una volta configurati, puoi visualizzare gli audit log di accesso ai dati degli accessi riusciti utilizzando Esplora log.

    Per l'autenticazione di gruppo IAM, i log di controllo mostrano le attività e gli accessi dei singoli account di servizio e utente.

    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 i problemi di accesso

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

    $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)
    

    Puoi esaminare i log degli errori MySQL per ulteriori dettagli sull'errore. Per ulteriori informazioni, consulta la pagina relativa alla visualizzazione dei log.

    Ad esempio, per l'errore precedente, la seguente voce di log spiega l'azione che puoi intraprendere 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 che ricevi. Se il messaggio non indica che hai utilizzato "Autenticazione utente IAM Cloud SQL" o "Autenticazione account di servizio IAM Cloud SQL", verifica che il tipo di utente del database utilizzato per accedere sia CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT. Per un utente IAM, verifica che il nome utente del database sia l'indirizzo email dell'utente IAM senza @ e il dominio. Per un account di servizio, verifica che si tratti dell'indirizzo email dell'account di servizio senza il carattere @project-id.iam.gserviceaccount.com.

    Se hai utilizzato l'autenticazione del database IAM, controlla i dettagli del messaggio di errore. Puoi trovare il messaggio di errore nel log degli errori del database. Se indica che il token di accesso (OAuth 2.0) che hai inviato come password non è valido, puoi utilizzare il comando 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'account di servizio o all'utente IAM previsto e che non sia scaduto.

    Se i dettagli indicano una mancanza di autorizzazione, verifica che all'account di servizio o all'utente IAM sia stata concessa l'autorizzazione cloudsql.instances.login utilizzando il ruolo Cloud SQL Instance User predefinito o un ruolo personalizzato nel criterio IAM del progetto dell'istanza. Utilizza lo strumento per la risoluzione dei problemi relativi ai criteri IAM per ulteriore assistenza.

    Se un accesso non va a buon fine a causa della mancata disponibilità dell'autenticazione del database IAM, l'utente può accedere utilizzando l'utente e la password MySQL predefiniti. Questo metodo di accesso consente comunque all'utente di accedere all'intero database. Verifica che la connessione sia protetta.

    Risolvere i problemi relativi agli account utente che utilizzano l'autenticazione di gruppo IAM

    Questa sezione elenca gli scenari di risoluzione dei problemi relativi all'autenticazione dei gruppi IAM.

    Impossibile aggiungere un gruppo a un database

    Quando provi ad aggiungere un gruppo a un'istanza, ricevi il seguente errore:

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

    Assicurati che l'indirizzo email che hai fornito sia un gruppo valido.

    Se il gruppo non esiste ancora, crealo. Per ulteriori informazioni sulla creazione di gruppi, consulta Creare e gestire i gruppi Google nella console Google Cloud.

    Se ricevi il seguente errore:

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

    Prima di poter utilizzare l'autenticazione di gruppo IAM, la tua istanza Cloud SQL richiede il seguente aggiornamento di manutenzione:

    R20240514.00_04 o versioni successive

    Puoi applicare l'aggiornamento di manutenzione all'istanza utilizzando la manutenzione self-service. Per ulteriori informazioni, consulta la sezione Manutenzione self-service.

    Un utente o un account di servizio IAM esistente non eredita i privilegi di database concessi al gruppo IAM

    Se un account di servizio o un utente IAM esistente non eredita i privilegi di database corretti del gruppo, completa i seguenti passaggi:

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

      Vai a IAM

      Verifica che l'account sia un membro del gruppo aggiunto all'istanza Cloud SQL.

    2. Elenca gli utenti e gli account di servizio nell'istanza.

      gcloud sql users list --instance=INSTANCE_NAME

      Nell'output, controlla se l'account utente o di servizio è indicato come CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT.

    3. Se l'account utente o di servizio è indicato come CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT,rimuovilo dall'istanza. L'account che stai rimuovendo è un singolo account IAM che non eredita i privilegi di accesso al database del gruppo.

    4. Accedi di nuovo all'istanza con l'account utente o di servizio.

      Se accedi di nuovo all'istanza, l'account viene ricreato con il tipo di account corretto CLOUD_IAM_GROUP_USER o CLOUD_IAM_GROUP_SERVICE_ACCOUNT.

    Passaggi successivi