Questa pagina descrive come aggiungere a un database un account utente o di servizio che utilizza l'autenticazione del database IAM e come gestire questi account utente e di servizio. Per ulteriori informazioni sull'integrazione IAM, consulta Autenticazione IAM.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Attiva Cloud Key Management Service API.
- Assicurati di disporre del ruolo Amministratore Cloud SQL per il tuo account utente.
- Abilita l'autenticazione IAM del database sulla tua istanza Cloud SQL.
- Assicurati di concedere l'accesso IAM agli utenti che ne hanno bisogno per ogni progetto contenente database a cui devono accedere gli utenti. Vedi Concessione, modifica e revoca dell'accesso alle risorse.
- Assicurati di aver aggiunto un account di servizio per ogni servizio che richiede l'accesso ai database del progetto.
- Se utilizzi l'autenticazione del gruppo IAM, assicurati di aver creato il gruppo Cloud Identity che richiede l'accesso ai database del tuo progetto.
Aggiungi un account utente o di servizio IAM a un'istanza di database
Devi creare un nuovo utente del database per ogni utente IAM che vuoi avere accesso all'istanza di database. Il nome utente del database deve essere l'indirizzo email
dell'utente IAM, ad esempio test-user@example.com
.
Quando utilizzi i comandi REST, il nome utente deve contenere le virgolette perché contiene caratteri speciali (@
e .
).
Gli account di servizio utilizzano il formato service-account-name@project-id.iam.gserviceaccount.com
.
Per aggiungere un account utente o di servizio IAM, aggiungi un nuovo utente del database e seleziona IAM come metodo di autenticazione:
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
- Seleziona Utenti dal menu di navigazione SQL.
- Fai clic su Aggiungi account utente. Viene visualizzata la scheda Aggiungi un account utente all'istanza instance_name.
- Fai clic sul pulsante di opzione Cloud IAM.
- Aggiungi l'indirizzo email dell'account utente o di servizio che vuoi aggiungere nel campo Entità.
- Fai clic su Aggiungi. L'utente è ora presente nell'elenco utenti.
Se l'utente non è assegnato al ruolo Utente istanza Cloud SQL, a sinistra del nome utente viene visualizzata un'icona .
Per concedere i privilegi di accesso all'utente, fai clic sull'icona e seleziona Aggiungi ruolo IAM. L'icona non viene più visualizzata. Ora l'utente è un membro del ruolo.
gcloud
Creare un account utente
Utilizza l'email, ad esempio test-user@example.com
, per identificare l'utente.
Sostituisci quanto segue:
- USERNAME: l'indirizzo email dell'utente.
- INSTANCE_NAME: il nome dell'istanza 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 all'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 su un'istanza in cui è abilitata l'autenticazione del database IAM, utilizza una risorsa Terraform.
Applica le modifiche
Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle sezioni seguenti.
prepara Cloud Shell
- Avvia Cloud Shell.
-
Imposta il progetto Google Cloud predefinito a 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
Se imposti valori espliciti nel file di configurazione Terraform, le variabili di ambiente vengono sostituite.
Prepara la directory
Ogni file di configurazione Terraform deve avere una propria directory (detta anche modulo principale).
-
In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome del file deve avere l'estensione
.tf
, ad esempiomain.tf
. In questo tutorial, il file è indicato comemain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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 se lo snippet Terraform fa parte di una soluzione end-to-end.
- Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
- Salva le modifiche.
-
Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
terraform init
Facoltativamente, per utilizzare la versione più recente del provider Google, includi l'opzione
-upgrade
:terraform init -upgrade
Applica le modifiche
-
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.
-
Applica la configurazione Terraform eseguendo il comando seguente e inserendo
yes
al prompt:terraform apply
Attendi finché Terraform non visualizza il messaggio "Applicazione completata".
- Apri il 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:
- Per disabilitare la protezione dall'eliminazione, nel file di configurazione Terraform imposta
l'argomento
deletion_protection
sufalse
.deletion_protection = "false"
- Applica la configurazione Terraform aggiornata eseguendo il comando seguente e inserendo
yes
al prompt:terraform apply
-
Rimuovi le risorse applicate in precedenza con la tua configurazione Terraform eseguendo il comando seguente e inserendo
yes
al prompt:terraform destroy
REST v1
Creare un account utente
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: il tuo ID progetto
- instance-id: l'ID dell'istanza a cui stai aggiungendo l'utente
- username: l'indirizzo email dell'utente.
- operation-id: l'ID dell'operazione
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users
Corpo JSON della richiesta:
{ "name": "username", "type": "CLOUD_IAM_USER" }
Per inviare la richiesta, espandi una 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, effettua le seguenti sostituzioni:
- service-acct: l'indirizzo email del tuo account di servizio
- project-id: il tuo ID progetto
- instance-id: l'ID istanza dell'istanza a cui stai aggiungendo l'account di servizio
- operation-id: l'ID dell'operazione
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users
Corpo JSON della richiesta:
{ "name": "service-acct", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }
Per inviare la richiesta, espandi una 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, effettua le seguenti sostituzioni:
- project-id: il tuo ID progetto
- instance-id: l'ID dell'istanza a cui stai aggiungendo l'utente
- username: l'indirizzo email dell'utente.
- operation-id: l'ID dell'operazione
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
Corpo JSON della richiesta:
{ "name": "username", "type": "CLOUD_IAM_USER" }
Per inviare la richiesta, espandi una 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, effettua le seguenti sostituzioni:
- service-acct: l'indirizzo email del tuo account di servizio
- project-id: il tuo ID progetto
- instance-id: l'ID istanza dell'istanza a cui stai aggiungendo l'account di servizio
- operation-id: l'ID dell'operazione
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
Corpo JSON della richiesta:
{ "name": "service-acct", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }
Per inviare la richiesta, espandi una 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" }
aggiungi un gruppo all'istanza di database
Per configurare l'autenticazione del gruppo IAM per l'istanza, segui questi passaggi:
Se non hai ancora creato un gruppo Cloud Identity, creane uno nel progetto in cui gestisci le istanze Cloud SQL. Per ulteriori informazioni, consulta la Panoramica di Cloud Identity.
Esegui questo comando per aggiungere il gruppo all'istanza Cloud SQL.
Console
L'aggiunta di gruppi a un'istanza non è disponibile tramite la console Google Cloud durante l'anteprima.
gcloud
Sostituisci quanto segue:
- GROUP_EMAIL_ADDRESS: l'indirizzo email del gruppo Cloud Identity da 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
REST v1
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- PROJECT_ID: il tuo ID progetto
- INSTANCE_ID: l'ID istanza dell'istanza a cui stai aggiungendo il gruppo Cloud Identity
- GROUP_EMAIL: l'indirizzo email del gruppo/li>
- OPERATION_ID: l'ID dell'operazione
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users
Corpo JSON della richiesta:
{ "name": "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, effettua le seguenti sostituzioni:
- PROJECT_ID: il tuo 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
- OPERATION_ID: l'ID dell'operazione
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users
Corpo JSON della richiesta:
{ "name": "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 utenti o account di servizio in un gruppo a un'istanza di database
L'aggiunta di un gruppo Cloud Identity a un'istanza non comporta l'aggiunta automatica dei membri del gruppo come utenti all'istanza. Quando un membro accede all'istanza per la prima volta, nell'istanza viene creato un account utente o di servizio.
Per ulteriori informazioni, consulta Accedere utilizzando l'autenticazione del database IAM.
Gestisci utenti o account di servizio in un gruppo su un'istanza
Puoi controllare l'accesso a un'istanza gestendo l'appartenenza al gruppo Cloud Identity. Per maggiori informazioni, consulta la panoramica di Cloud Identity.
Un utente può essere membro di più gruppi Cloud Identity. Se un utente appartiene a più gruppi Cloud Identity su un'istanza, avrà tutte le autorizzazioni IAM e i privilegi di database combinati di ciascuno di questi gruppi.
La propagazione delle modifiche alle iscrizioni ai gruppi, come l'aggiunta di un account, richiede circa 15 minuti. Si aggiunge al tempo necessario per le modifiche IAM.
Dopo la propagazione delle modifiche, l'account utente o di servizio deve disconnettersi ed eseguire di nuovo l'accesso affinché le modifiche abbiano effetto. Tuttavia, la concessione o la revoca dei privilegi di database per un gruppo in MySQL ha effetto immediato. Ad esempio, se revochi l'accesso a una tabella, i membri del gruppo Cloud Identity perderanno l'accesso a quella tabella immediatamente senza dover uscire e accedere di nuovo.
Quando viene aggiunto un'ulteriore Cloud Identity a un'istanza, gli utenti devono uscire e accedere di nuovo per ricevere le autorizzazioni dal nuovo gruppo.
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, in base a un ID progetto e all'associazione. Il comando di associazione prevede un membro, un ruolo e una condizione facoltativa.
Il nome utente del database deve essere l'indirizzo email dell'utente IAM, ad esempio test-user@example.com
. Deve contenere le virgolette perché contiene caratteri
speciali (@
e .
).
Console
-
Nella console Google Cloud, vai alla pagina IAM.
- Fai clic su Aggiungi.
- In Nuovi membri, inserisci un indirizzo email. Puoi aggiungere singoli utenti, account di servizio o gruppi come membri, ma ogni progetto deve avere almeno un'entità come membro.
- In Ruolo, vai a Cloud SQL e seleziona Utente istanza Cloud SQL e Client Cloud SQL.
- Per singoli utenti e account di servizio, seleziona Client Cloud SQL.
- 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 che vuoi autorizzare all'utilizzo da parte dell'utente.
- USERNAME: l'indirizzo email dell'utente.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:USERNAME \ --role=roles/cloudsql.instanceUser
Esegui di nuovo 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 che vuoi autorizzare all'utilizzo da parte dell'utente.
- 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
Esegui di nuovo 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 che i membri del gruppo possono 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.
L'autenticazione del gruppo IAM è in Anteprima.
Terraform
Per aggiungere l'associazione di criteri richiesta agli account utente e di servizio IAM, utilizza una risorsa Terraform.
Applica le modifiche
Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle sezioni seguenti.
prepara Cloud Shell
- Avvia Cloud Shell.
-
Imposta il progetto Google Cloud predefinito a 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
Se imposti valori espliciti nel file di configurazione Terraform, le variabili di ambiente vengono sostituite.
Prepara la directory
Ogni file di configurazione Terraform deve avere una propria directory (detta anche modulo principale).
-
In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome del file deve avere l'estensione
.tf
, ad esempiomain.tf
. In questo tutorial, il file è indicato comemain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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 se lo snippet Terraform fa parte di una soluzione end-to-end.
- Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
- Salva le modifiche.
-
Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
terraform init
Facoltativamente, per utilizzare la versione più recente del provider Google, includi l'opzione
-upgrade
:terraform init -upgrade
Applica le modifiche
-
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.
-
Applica la configurazione Terraform eseguendo il comando seguente e inserendo
yes
al prompt:terraform apply
Attendi finché Terraform non visualizza il messaggio "Applicazione completata".
- Apri il 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:
- Per disabilitare la protezione dall'eliminazione, nel file di configurazione Terraform imposta
l'argomento
deletion_protection
sufalse
.deletion_protection = "false"
- Applica la configurazione Terraform aggiornata eseguendo il comando seguente e inserendo
yes
al prompt:terraform apply
-
Rimuovi le risorse applicate in precedenza con la tua configurazione Terraform eseguendo il comando seguente 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 al criterio non avrà effetto finché non imposti il criterio aggiornato.
{ "role": "roles/cloudsql.instanceUser", "members": [ "user:test-user@example.com" "serviceAccount:service1@sql.iam.gserviceaccount.com" "group:example-group@example.com" ] } { "role": "roles/cloudsql.client", "members": [ "user:test-user@example.com" "serviceAccount:service1@sql.iam.gserviceaccount.com" ] }
Concedi i privilegi di database all'utente IAM
Quando un utente IAM viene aggiunto a un'istanza di database, per impostazione predefinita non vengono concessi privilegi su alcun database.Per concedere all'utente l'accesso o altri privilegi, 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 comando mysql
.
Sostituisci quanto segue:
@
e di dominio troncata.
Ad esempio, se l'indirizzo email dell'utente IAM è
test-user@example.com
, il nome utente sarà
test-user
. Per un account di servizio, si tratta dell'indirizzo email dell'account di servizio senza il dominio @project-id.iam.gserviceaccount.com
.
grant select on DATABASE_NAME.TABLE_NAME to "USERNAME";
Concedere privilegi di database a un gruppo
Quando utilizzi l'autenticazione dei gruppi IAM, concedi i privilegi di database ai gruppi Cloud Identity anziché concedere i privilegi a singoli utenti. Per impostazione predefinita, quando aggiungi un gruppo Cloud Identity a un'istanza Cloud SQL, il gruppo Cloud Identity non ha privilegi.
Per concedere i privilegi di database agli utenti all'interno del gruppo Cloud Identity, utilizza l'istruzione GRANT.
Sostituisci quanto segue:
- GROUP_NAME: la prima parte dell'indirizzo email del gruppo Cloud Identity. Ad esempio, se si utilizza 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
. - DATABASE_NAME: il nome del database che ospita la tabella.
- TABLE_NAME: il nome della tabella a cui vuoi concedere l'accesso ai membri del gruppo Cloud Identity.
Esegui GRANT dalla riga di comando mysql
.
grant select on DATABASE_NAME.TABLE_NAME to "GROUP_NAME"@"HOSTNAME";
I privilegi di database che concedi al gruppo Cloud Identity vengono applicati immediatamente.
Per ulteriori informazioni sulla concessione dei privilegi, consulta la pagina di riferimento GRANT nella documentazione di MySQL.
Visualizza gruppi, utenti IAM e account di servizio
Per visualizzare i gruppi di Cloud Identity aggiunti all'istanza, esegui questo comando:
Console
La visualizzazione dei gruppi su un'istanza non è disponibile tramite la console Google Cloud durante l'anteprima.
gcloud
Sostituisci INSTANCE_NAME con il nome dell'istanza che contiene i gruppi da visualizzare.
gcloud sql users list --instance=INSTANCE_NAME
Il tipo di utente dei gruppi è CLOUD_IAM_GROUP
.
L'output elenca anche gli account utente e di servizio nell'istanza Cloud SQL.
- Gli account utente che sono membri di un gruppo hanno il tipo
CLOUD_IAM_GROUP_USER
. - Gli account di servizio che sono membri di un gruppo sono di tipo
CLOUD_IAM_GROUP_SERVICE_ACCOUNT
. - Gli account utente che sono singoli account utente di autenticazione del database IAM hanno il tipo di
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
.
Rimuovi un account utente o di servizio IAM dal database
Per rimuovere un account utente o di servizio dal database, elimina l'account dall'istanza:
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
- Seleziona Utenti dal menu di navigazione SQL.
- Fai clic su in corrispondenza dell'utente da rimuovere.
- Seleziona Rimuovi. Verrà revocato l'accesso solo a questa istanza.
gcloud
Revocare un utente
Utilizza l'email, ad esempio test-user@example.com
, per identificare l'utente.
Sostituisci quanto segue:
- USERNAME: l'indirizzo email senza il nome del dominio @.
- INSTANCE_NAME: il nome dell'istanza da cui vuoi rimuovere l'utente.
gcloud sql users delete USERNAME \ --instance=INSTANCE_NAME
Eliminare l'account di servizio
Sostituisci quanto segue:
- SERVICE_ACCT: l'indirizzo email dell'account di servizio.
- INSTANCE_NAME: il nome dell'istanza da cui vuoi rimuovere l'utente.
gcloud sql users delete SERVICE_ACCT \ --instance=INSTANCE_NAME
REST v1
La seguente richiesta utilizza il metodo users.delete per eliminare l'account utente specificato.
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- PROJECT_ID: il tuo ID progetto
- INSTANCE_ID: l'ID istanza desiderato
- USERNAME: l'indirizzo email dell'account utente o di servizio
Metodo HTTP e URL:
DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
Per inviare la richiesta, espandi una 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 seguente richiesta utilizza il metodo users.delete per eliminare l'account utente specificato.
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- PROJECT_ID: il tuo ID progetto
- INSTANCE_ID: l'ID istanza desiderato
- USERNAME: l'indirizzo email dell'account utente o di servizio
Metodo HTTP e URL:
DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
Per inviare la richiesta, espandi una 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" }
Elimina utenti o account di servizio per l'autenticazione del gruppo IAM
Non puoi utilizzare gcloud CLI per eliminare gli account utente o di servizio creati con l'autenticazione dei gruppi IAM. Cloud SQL crea questi account automaticamente dopo che l'account utente o di servizio ha eseguito il primo accesso.
L'unico modo per eliminare questi account è utilizzare il client MySQL con un utente con privilegi di super user.
Per generare una query per l'eliminazione di account utente o di servizio, consulta la documentazione di MySQL.
Elimina un gruppo da un'istanza
Se elimini un gruppo Cloud Identity da un'istanza, tutti gli utenti e gli account di servizio appartenenti al gruppo Cloud Identity perdono gli eventuali privilegi del database concessi al gruppo Cloud Identity. Gli utenti e gli account di servizio appartenenti al gruppo Cloud Identity sono ancora in grado di accedere fino a quando le autorizzazioni di accesso IAM non vengono rimosse dal gruppo.
Console
L'eliminazione di gruppi da un'istanza non è disponibile tramite la console Google Cloud durante l'anteprima.
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 si utilizza 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
Se revochi il ruolo cloudsql.instanceUser
da un gruppo Cloud Identity, tutti i membri del gruppo perderanno la possibilità di accedere a qualsiasi istanza Cloud SQL nel progetto. Gli utenti o gli account di servizio possono accedere alle istanze solo se sono membri di un altro gruppo Cloud Identity 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
È possibile rimuovere utenti da un gruppo Cloud Identity.
Dopo la propagazione della rimozione tramite IAM, l'utente potrebbe essere ancora in grado di accedere a un database se dispone delle autorizzazioni IAM appropriate. Tuttavia, al momento dell'accesso, gli utenti non disporranno più dei privilegi di database appartenenti al gruppo Cloud Identity da cui sono stati rimossi.
Visualizza le informazioni di accesso negli audit log
Puoi abilitare gli audit log per acquisire gli accessi IAM al database. In caso di problemi di accesso, puoi utilizzare gli audit log per diagnosticare il problema.
Dopo la configurazione, puoi visualizzare gli audit log di accesso ai dati degli accessi riusciti utilizzando Esplora log.
Per l'autenticazione di gruppi IAM, gli audit log mostrano le attività e gli accessi di singoli account utente e di servizio. L'autenticazione del gruppo IAM è in Anteprima.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 gli errori 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)
Per ulteriori dettagli sull'errore, puoi esaminare i log degli errori MySQL. Per ulteriori informazioni, consulta 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 visualizzato. 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 @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 indicato di seguito:
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 o l'account di servizio IAM previsto e che non sia scaduto.
Se i dettagli indicano la mancanza di autorizzazioni, verifica che all'utente o all'account di servizio IAM sia concessa l'autorizzazione cloudsql.instances.login
utilizzando il ruolo Cloud SQL Instance User
predefinito 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 IAM.
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 concede comunque all'utente l'accesso all'intero database. Verifica che la connessione sia una connessione protetta.
Risolvere i problemi relativi agli account utente che utilizzano l'autenticazione dei gruppi IAM
Questa sezione elenca gli scenari di risoluzione dei problemi per l'autenticazione dei gruppi IAM.
Impossibile aggiungere un gruppo a un database
Quando provi ad aggiungere un gruppo a un'istanza, potresti ricevere 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 la Panoramica di Cloud Identity.
Un utente o un account di servizio IAM esistente non eredita i privilegi di database concessi al gruppo
Se un account di servizio o utente IAM esistente non eredita i privilegi del database corretti del proprio gruppo, completa i seguenti passaggi:
Nella console Google Cloud, vai alla pagina IAM.
Verifica che l'account appartenga al gruppo aggiunto all'istanza Cloud SQL.
Elenca gli utenti e gli account di servizio dell'istanza.
gcloud sql users list --instance=INSTANCE_NAME
Nell'output, controlla se l'account utente o di servizio è elencato come
CLOUD_IAM_USER
oCLOUD_IAM_SERVICE_ACCOUNT
.Se l'account utente o di servizio è indicato come
CLOUD_IAM_USER
oCLOUD_IAM_SERVICE_ACCOUNT
, rimuovi l'account dall'istanza. L'account che stai rimuovendo è un singolo account IAM che non eredita i privilegi di database del gruppo.Accedi di nuovo all'istanza con l'account utente o di servizio.
Quando accedi di nuovo all'istanza, l'account viene ricreato con il tipo di account
CLOUD_IAM_GROUP_USER
oCLOUD_IAM_GROUP_SERVICE_ACCOUNT
corretto.
Passaggi successivi
- Scopri di più sull'autenticazione del database IAM.
- Scopri come accedere a un database Cloud SQL.
- Scopri come configurare le istanze per l'autenticazione IAM dei database.