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 gcloud CLI.

  5. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Install the gcloud CLI.

  10. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Assicurati di disporre del ruolo Amministratore Cloud SQL sul tuo account utente.

    Vai alla pagina IAM

  13. Abilita l'autenticazione IAM dei database sull'istanza Cloud SQL.
  14. Assegna il ruolo IAM cloudsql.instanceUser necessario alle entità IAM, come utenti IAM, service account o gruppi, per accedere all'istanza Cloud SQL.
  15. Se utilizzi un account di servizio, assicurati di aver aggiunto un service account per ogni servizio che richiede l'accesso ai database nel progetto.
  16. Per ulteriori informazioni sulla creazione dei service account, vedi Creare service account.

    Aggiungere un binding dei criteri IAM a un utente, account di servizio o un gruppo

    Questa procedura aggiunge un'associazione di policy alla policy IAM di un progetto specifico, dato un ID progetto e l'associazione. Il comando di associazione è composto 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 in minuscolo e utilizzare le virgolette perché contiene caratteri speciali (@ e .).

    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, service account 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.
    5. (Facoltativo) Se vuoi connetterti utilizzando il proxy di autenticazione Cloud SQL o i connettori dei linguaggi di Cloud SQL, seleziona anche Client Cloud SQL.
    6. Fai clic su Salva.

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

    Aggiungere un binding dei criteri a un account utente

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto che vuoi autorizzare l'utente a utilizzare.
    • 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 di Cloud SQL, esegui di nuovo gcloud projects add-iam-policy-binding con il flag --role=roles/cloudsql.client.

    Aggiungere un binding dei criteri a un service account

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto che vuoi autorizzare l'utente a utilizzare.
    • SERVICE_ACCT: l'indirizzo email del service account.
      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 di Cloud SQL, esegui di nuovo gcloud projects add-iam-policy-binding con il flag --role=roles/cloudsql.client.

    Aggiungere un binding dei criteri a un gruppo Cloud Identity

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto che vuoi autorizzare i membri del gruppo a utilizzare.
    • 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 in questo progetto.

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

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

    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 eseguirlo 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 la propria directory (chiamata anche modulo radice).

    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 viene 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.

      (Facoltativo) Copia il codice da GitHub. Questa operazione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

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

      (Facoltativo) Per utilizzare l'ultima versione del provider Google, includi l'opzione -upgrade:

      terraform init -upgrade

    Applica le modifiche

    1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
      terraform plan

      Apporta le correzioni necessarie alla configurazione.

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

      Attendi che Terraform visualizzi il messaggio "Apply complete!" (Applicazione completata).

    3. Apri il tuo Google Cloud progetto 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:

    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 comando seguente 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

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

    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 eseguirlo 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 la propria directory (chiamata anche modulo radice).

    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 viene 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.

      (Facoltativo) Copia il codice da GitHub. Questa operazione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

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

      (Facoltativo) Per utilizzare l'ultima versione del provider Google, includi l'opzione -upgrade:

      terraform init -upgrade

    Applica le modifiche

    1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
      terraform plan

      Apporta le correzioni necessarie alla configurazione.

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

      Attendi che Terraform visualizzi il messaggio "Apply complete!" (Applicazione completata).

    3. Apri il tuo Google Cloud progetto 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:

    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 comando seguente 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

    Concedi i ruoli cloudsql.instanceUser e cloudsql.client a entrambi i tipi di account modificando il criterio di binding JSON o YAML restituito dal comando get-iam-policy. Tieni presente che questa modifica alle norme non entrerà in vigore finché non imposterai 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 IAM o account di servizio a un'istanza Cloud SQL

    Devi creare un nuovo account utente per ogni singolo utente IAM o account di servizio che aggiungi all'istanza Cloud SQL per accedere ai database. 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 racchiuso tra virgolette perché contiene caratteri speciali (@ e .). I service account utilizzano il formato service-account-name@project-id.iam.gserviceaccount.com.

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

    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. Si apre 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 del account di servizio che vuoi aggiungere nel campo Entità.
    7. Fai clic su Aggiungi. L'utente o il account di servizio ora si trova 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 le autorizzazioni di accesso all'utente, 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 concede l'autorizzazione di accesso.

    Creare un account utente

    Utilizza l'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'accesso dell'utente.
    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 del 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

    Per aggiungere utenti IAM e service account a un'istanza con l'autenticazione IAM dei database 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"
        }
      }
    }
    
    # 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 di Terraform in un progetto Google Cloud , completa i passaggi nelle sezioni seguenti.

    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 eseguirlo 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 la propria directory (chiamata anche modulo radice).

    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 viene 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.

      (Facoltativo) Copia il codice da GitHub. Questa operazione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

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

      (Facoltativo) Per utilizzare l'ultima versione del provider Google, includi l'opzione -upgrade:

      terraform init -upgrade

    Applica le modifiche

    1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
      terraform plan

      Apporta le correzioni necessarie alla configurazione.

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

      Attendi che Terraform visualizzi il messaggio "Apply complete!" (Applicazione completata).

    3. Apri il tuo Google Cloud progetto 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:

    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 comando seguente 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

    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 dell'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:

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users"

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users" | Select-Object -Expand Content

    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'email dell'account di servizio
    • PROJECT_ID: l'ID progetto
    • INSTANCE_ID: l'ID istanza dell'istanza a cui stai aggiungendo il 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:

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users"

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users" | Select-Object -Expand Content

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

    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 dell'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:

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users"

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users" | Select-Object -Expand Content

    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'email dell'account di servizio
    • PROJECT_ID: l'ID progetto
    • INSTANCE_ID: l'ID istanza dell'istanza a cui stai aggiungendo il 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:

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users"

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users" | Select-Object -Expand Content

    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 del gruppo 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, vedi Aggiungere automaticamente i membri di un gruppo a un'istanza Cloud SQL.

    I nomi dei gruppi IAM hanno gli stessi limiti di lunghezza degli identificatori PostgreSQL e possono contenere solo 63 caratteri.

    Se hai un gruppo IAM con un nome che supera il limite di lunghezza del nome utente di un motore di database, puoi comunque utilizzarlo per l'autenticazione del gruppo IAM nidificandolo in un gruppo IAM principale con un nome che rispetta il limite di lunghezza. Il gruppo IAM principale deve essere aggiunto all'istanza prima che il gruppo nidificato possa essere utilizzato.

    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. Si apre 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 campo Entità di sicurezza.
    7. Fai clic su Aggiungi. Il gruppo ora è nell'elenco utenti.
    8. Se al gruppo non è 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 poi seleziona Aggiungi ruolo IAM. Se l'icona non viene più visualizzata, a tutti i membri del gruppo viene assegnato il ruolo che concede l'autorizzazione di accesso.

    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

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

    resource "google_sql_database_instance" "default" {
      name             = "postgres-iam-group-auth-instance-name"
      region           = "us-west4"
      database_version = "POSTGRES_16"
      settings {
        tier = "db-custom-2-7680"
        database_flags {
          name  = "cloudsql.iam_authentication"
          value = "on"
        }
      }
    }
    
    # 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 di Terraform in un progetto Google Cloud , completa i passaggi nelle sezioni seguenti.

    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 eseguirlo 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 la propria directory (chiamata anche modulo radice).

    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 viene 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.

      (Facoltativo) Copia il codice da GitHub. Questa operazione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

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

      (Facoltativo) Per utilizzare l'ultima versione del provider Google, includi l'opzione -upgrade:

      terraform init -upgrade

    Applica le modifiche

    1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
      terraform plan

      Apporta le correzioni necessarie alla configurazione.

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

      Attendi che Terraform visualizzi il messaggio "Apply complete!" (Applicazione completata).

    3. Apri il tuo Google Cloud progetto 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:

    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 comando seguente 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

    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 stai aggiungendo 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:

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users"

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users" | Select-Object -Expand Content

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

    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 stai aggiungendo 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:

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users"

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users" | Select-Object -Expand Content

    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 service account) di quel gruppo ereditano le autorizzazioni IAM per l'autenticazione all'istanza. Non è necessario aggiungere singolarmente il membro del gruppo all'istanza Cloud SQL. Dopo che un membro del gruppo accede ed esegue l'autenticazione correttamente all'istanza principale 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.

    In caso di failover, se l'istanza di failover dispone dei gruppi appropriati, gli utenti del gruppo IAM possono continuare ad accedere e a essere creati.

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

    Eseguire la migrazione degli utenti IAM esistenti per utilizzare l'autenticazione del gruppo IAM

    Gli utenti IAM esistenti di tipo CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT non utilizzano l'autenticazione del gruppo IAM.

    Puoi eseguire la migrazione di questi utenti per utilizzare l'autenticazione dei gruppi IAM.

    1. Aggiungi questi utenti a un gruppo.

    2. Aggiungi il gruppo all'istanza.

    3. Assegna al gruppo autorizzazioni IAM sufficienti per consentire ai membri del gruppo di connettersi alle tue istanze. L'applicazione di queste modifiche potrebbe richiedere del tempo. Per saperne di più sui tempi di propagazione, consulta Propagazione della modifica di accesso.

    4. Assegna i privilegi del database agli utenti IAM che stai migrando al gruppo.

    5. Dopo aver applicato le modifiche all'appartenenza al gruppo e le autorizzazioni IAM, elimina l'utente IAM esistente dall'istanza. La volta successiva che l'utente IAM esegue l'accesso correttamente, viene ricreato come utente del gruppo IAM che può utilizzare l'autenticazione del gruppo IAM.

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

    Quando aggiungi un gruppo IAM a un'istanza Cloud SQL, tutti i membri (utenti o service account) di quel 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 concedere a un nuovo utente l'accesso a un'istanza, aggiungilo come membro del gruppo in Cloud Identity. Non è necessario rimuovere o aggiungere separatamente i membri del gruppo a livello di istanza Cloud SQL perché le modifiche all'appartenenza al gruppo vengono propagate automaticamente all'istanza Cloud SQL. Le modifiche all'appartenenza al gruppo, come l'aggiunta o la rimozione di un membro, richiedono circa 15 minuti per la propagazione. Il ritardo di propagazione di 15 minuti da Cloud SQL si verifica in parallelo con il tempo necessario per la propagazione delle modifiche IAM.

    La concessione o la revoca dei privilegi del database per un gruppo IAM in PostgreSQL ha effetto immediato. Ad esempio, se revochi l'accesso a una tabella, i membri di quel gruppo IAM perdono immediatamente l'accesso alla 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 di tutti i 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 all'istanza per la prima volta, eredita automaticamente i privilegi del database concessi al gruppo.

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

    Quando un utente o un servizio IAM individuale viene aggiunto a un'istanza Cloud SQL, al nuovo account non vengono concessi privilegi su alcun database per impostazione predefinita. Possono eseguire query solo su qualsiasi oggetto di database il cui accesso è stato concesso a PUBLIC.

    Se hanno bisogno di un accesso aggiuntivo, è possibile concedere ulteriori privilegi utilizzando l'istruzione GRANT. Consulta la pagina di riferimento GRANT per un elenco completo dei privilegi che puoi concedere a utenti e service account. Esegui GRANT dalla riga di comando.

    Sostituisci quanto segue:

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

    Concedere privilegi di database a un gruppo IAM

    Quando utilizzi l'autenticazione dei gruppi IAM, concedi privilegi di database ai gruppi IAM anziché a singoli utenti o service account. 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 service account) eredita automaticamente i privilegi di database concessi al gruppo.

    Sostituisci quanto segue:

    • GROUP_NAME: l'indirizzo email del gruppo Cloud Identity, inclusi @ e il nome di dominio. Ad esempio, se l'indirizzo email del gruppo IAM è example-group@example.com, il nome del gruppo è example-group@example.com. Devi utilizzare le virgolette intorno al nome del gruppo perché la stringa contiene caratteri speciali (@ e .)
    • TABLE_NAME: il nome della tabella a cui vuoi concedere l'accesso all'utente.

    Esegui GRANT dalla riga di comando psql.

    grant select on TABLE_NAME to "GROUP_NAME";

    Per saperne di più sulla concessione dei privilegi, consulta la pagina di riferimento GRANT nella documentazione di PostgreSQL.

    I privilegi del database che concedi al gruppo IAM hanno effetto immediato.

    Visualizzare utenti, service account e gruppi IAM aggiunti a un'istanza Cloud SQL

    Per visualizzare gli utenti, i service account e i gruppi IAM che sono stati aggiunti all'istanza Cloud SQL, esegui i seguenti comandi.

    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, service account e gruppi Cloud Identity che sono stati aggiunti alla tua istanza.
    4. (Facoltativo) Per visualizzare un elenco di utenti IAM o service account che hanno già eseguito l'accesso all'istanza, fai clic su Membri del gruppo IAM autenticati.

    Sostituisci INSTANCE_NAME con il nome dell'istanza che contiene 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 sull'istanza Cloud SQL.

    • Gli account utente membri di un gruppo hanno il tipo CLOUD_IAM_GROUP_USER.
    • I service account membri di un gruppo hanno il tipo CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
    • Gli account utente che sono account utente di autenticazione IAM dei database individuali hanno il tipo CLOUD_IAM_USER.
    • I service account che sono singoli service account di autenticazione del database IAM hanno il tipo di CLOUD_IAM_SERVICE_ACCOUNT.

    La seguente richiesta utilizza il metodo users.list per elencare gli utenti che hanno account sull'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:

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users/list"

    Esegui questo comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users/list" | Select-Object -Expand Content

    Dovresti ricevere una risposta JSON simile alla seguente:

    {
      "kind": "sql#usersList",
      "items": [
        {
         "kind": "sql#user",
         "etag": "--redacted--",
         "name": "example-service-acct@PROJECT_ID.iam",
         "host": "",
         "instance": "INSTANCE_ID",
         "project": "PROJECT_ID",
         "type": "CLOUD_IAM_SERVICE_ACCOUNT"
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "another-example-service-acct@PROJECT_ID.iam",
          "host": "",
          "instance": "INSTANCE_ID",
          "project": "PROJECT_ID",
          "type": "CLOUD_IAM_GROUP_SERVICE_ACCOUNT"
         },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "postgres",
          "host": "",
          "instance": "INSTANCE_ID",
          "project": "PROJECT_ID",
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "example-user@example.com",
          "host": "",
          "instance": "INSTANCE_ID",
          "project": "PROJECT_ID",
          "type": "CLOUD_IAM_USER"
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "another-example-user@example.com",
          "host": "",
          "instance": "INSTANCE_ID",
          "project": "PROJECT_ID",
          "type": "CLOUD_IAM_GROUP_USER"
        },
        {
          "kind": "sql#user",
          "etag": "--redacted--",
          "name": "example-group@example.com",
          "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 sull'istanza Cloud SQL.

    • Gli account utente membri di un gruppo hanno il tipo CLOUD_IAM_GROUP_USER.
    • I service account membri di un gruppo hanno il tipo CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
    • Gli account utente che sono account utente di autenticazione IAM dei database individuali hanno il tipo CLOUD_IAM_USER.
    • I service account che sono singoli service account di autenticazione del database IAM hanno il tipo di CLOUD_IAM_SERVICE_ACCOUNT.

    La seguente richiesta utilizza il metodo users.list per elencare gli utenti che hanno account sull'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:

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users"

    Esegui questo comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users" | Select-Object -Expand Content

    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 sull'istanza Cloud SQL.

    • Gli account utente membri di un gruppo hanno il tipo CLOUD_IAM_GROUP_USER.
    • I service account membri di un gruppo hanno il tipo CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
    • Gli account utente che sono account utente di autenticazione IAM dei database individuali hanno il tipo CLOUD_IAM_USER.
    • I service account che sono singoli service account di autenticazione del database IAM hanno il tipo di CLOUD_IAM_SERVICE_ACCOUNT.

    Rimuovere un singolo utente IAM o account di servizio 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 questo comando:

    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 l'utente che vuoi rimuovere.
    5. Seleziona Rimuovi. In questo modo viene revocato l'accesso solo a questa istanza.

    Revocare un utente

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

    Sostituisci quanto segue:

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

    Eliminare il singolo service account

    Sostituisci quanto segue:

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

    La seguente richiesta 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'utente o del account 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 di queste opzioni:

    Esegui questo comando:

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME"

    Esegui questo comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method DELETE `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME" | Select-Object -Expand Content

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

    La seguente richiesta 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'utente o del account 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 di queste opzioni:

    Esegui questo comando:

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME"

    Esegui questo comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method DELETE `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME" | Select-Object -Expand Content

    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 del gruppo IAM, devi rimuovere la sua appartenenza dai gruppi IAM applicabili in Cloud Identity. Dopo che gli utenti del gruppo IAM hanno perso l'iscrizione a tutti i gruppi applicabili in Cloud Identity, Cloud SQL rimuove automaticamente questi utenti del gruppo dall'istanza. L'unica eccezione a questa rimozione sono gli utenti del gruppo che possiedono oggetti di database. Questi utenti del gruppo devono essere rimossi manualmente.

    Le modifiche all'appartenenza al gruppo, come l'aggiunta o la rimozione di un membro, richiedono circa 15 minuti per essere propagate. Il ritardo di propagazione di 15 minuti da Cloud SQL si verifica in parallelo con il tempo necessario per la propagazione delle modifiche IAM.

    Rimozione manuale

    Nei casi in cui un utente del gruppo IAM non può essere rimosso automaticamente, puoi rimuoverlo manualmente. Non puoi rimuovere manualmente un utente del gruppo IAM da un'istanza Cloud SQL utilizzando gcloud CLI, la consoleGoogle 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 PostgreSQL.

    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.

    Elimina 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 i service account che appartengono al gruppo IAM perdono tutti i privilegi di database concessi al gruppo IAM. Inoltre, si applicano le seguenti condizioni:

    • Gli utenti e i service account 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 comporta che l'utente del gruppo IAM o i service account non appartengano ad altri gruppi nell'istanza, Cloud SQL rimuove l'utente del gruppo IAM o i service account dall'istanza.
    • Tuttavia, se un utente del gruppo IAM è proprietario di un oggetto di database nell'istanza, devi riassegnare la proprietà dell'oggetto prima di poter eliminare l'utente manualmente.

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

    • Tutti gli utenti e i service account del gruppo IAM non possono accedere all'istanza.
    • Cloud SQL rimuove automaticamente anche tutti gli utenti del gruppo IAM e i service account dall'istanza.
    • Tuttavia, se un utente del gruppo IAM è proprietario di un oggetto di database nell'istanza, devi riassegnare la proprietà dell'oggetto prima di poter eliminare l'utente manualmente.
    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.

    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, utilizzando l'indirizzo email example-group@example.com, il nome del gruppo Cloud Identity è example-group.
    • INSTANCE_NAME: il nome dell'istanza Cloud SQL con il gruppo Cloud Identity che vuoi eliminare.
    gcloud sql users delete GROUP_NAME \
       --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 nel progetto. Gli utenti o i service account possono accedere alle istanze solo se sono membri di un altro gruppo IAM che dispone ancora delle autorizzazioni di accesso.

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

    Rimuovere utenti da un gruppo IAM

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

    Una volta che la rimozione è stata propagata tramite 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 privilegi di accesso. Inoltre, gli utenti rimossi da un gruppo perdono i privilegi di database del gruppo.

    Se un utente del gruppo IAM non appartiene a nessun gruppo nell'istanza, Cloud SQL lo rimuove automaticamente dall'istanza. Tuttavia, se Cloud SQL rileva che un utente del gruppo IAM è proprietario di un oggetto nell'istanza, Cloud SQL non rimuove l'utente. Un amministratore deve riassegnare la proprietà dell'oggetto e rimuovere manualmente l'utente.

    Visualizzare le informazioni di accesso nei log di controllo

    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 dei gruppi IAM, i log di controllo mostrano l'attività e gli accessi per i singoli account utente e di servizio.

    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 relativi a un accesso non riuscito

    Quando un tentativo di accesso non va a buon fine, PostgreSQL restituisce un messaggio di errore minimo 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
    

    Per maggiori dettagli sull'errore, puoi esaminare i log degli errori di PostgreSQL. Per maggiori informazioni, consulta la sezione 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 l'"autenticazione utente Cloud SQL IAM" o l'"autenticazione dell'account di servizio Cloud SQL IAM", verifica che il tipo di utente del database utilizzato per accedere sia 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 l'email dell'utente IAM.

    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 per l'utente IAM o il service account previsto e che non sia scaduto.

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

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

    Risoluzione dei problemi relativi agli account utente che utilizzano l'autenticazione dei gruppi IAM

    Questa sezione elenca gli scenari di risoluzione dei problemi per l'autenticazione del gruppo IAM.

    Impossibile aggiungere un gruppo a un database

    Quando provi ad aggiungere un gruppo a un'istanza, viene visualizzato 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 saperne di più 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 dei gruppi IAM, l'istanza Cloud SQL richiede il seguente aggiornamento di manutenzione:

    R20240514.00_04 o versioni successive

    Puoi applicare l'aggiornamento della manutenzione alla tua istanza utilizzando la manutenzione self-service. Per ulteriori informazioni, consulta la pagina Manutenzione self-service.

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

    Se un utente IAM o un account di servizio esistente non eredita i privilegi di database corretti del proprio 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 i service account sull'istanza.

      gcloud sql users list --instance=INSTANCE_NAME

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

    3. Se l'utente o l'account di servizio è elencato come CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT, rimuovi l'account dall'istanza. L'account che stai rimuovendo è un account IAM individuale che non eredita i privilegi di database del gruppo.

    4. Accedi di nuovo all'istanza con l'utente o il account 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