Questa pagina descrive come configurare e utilizzare la federazione delle identità per la forza lavoro (nota anche come autenticazione IAM di terze parti) con Cloud SQL. La federazione delle identità della forza lavoro ti consente di utilizzare il tuo provider di identità (IdP) esistente, ad esempio Microsoft Active Directory o Okta, per accedere alle istanze Cloud SQL senza richiedere un Google account.
I vantaggi principali dell'utilizzo della federazione delle identità per la forza lavoro includono:
- Riduzione del sovraccarico: non è necessario verificare i domini o sincronizzare le identità con Cloud Identity.
- Maggiore sicurezza: gestione centralizzata dell'accesso al database tramite il tuo IdP aziendale esistente.
- Facilità di scalabilità: adatto a grandi organizzazioni con esigenze complesse di gestione delle identità.
Per una descrizione dettagliata della federazione delle identità per la forza lavoro, consulta la panoramica della federazione delle identità per la forza lavoro.
Come funziona
La federazione delle identità per la forza lavoro consente agli utenti di autenticarsi in Google Cloud utilizzando un'identità esterna. Per Cloud SQL, questo significa che i principal di un pool di forza lavoro possono connettersi alle istanze Cloud SQL per PostgreSQL.
Cloud SQL supporta la federazione delle identità per la forza lavoro tramite il tipo di utente CLOUD_IAM_WORKFORCE_IDENTITY. Per concedere l'accesso, Cloud SQL
convalida le credenziali della forza lavoro e l'autorizzazione IAM a livello di progetto
durante l'accesso.
Prima di iniziare
Prima di configurare l'autenticazione del database della federazione delle identità della forza lavoro, assicurati di soddisfare i seguenti prerequisiti:
- Installa l'ultima versione di gcloud CLI.
- Configura un pool e un provider di federazione delle identità per la forza lavoro nella tua organizzazione Google Cloud .
- Configura la simulazione dell'identità del account di servizio per il tuo carico di lavoro.
- Assicurati che l'istanza Cloud SQL esegua PostgreSQL versione 13 o successive.
Ruoli e autorizzazioni
Per ottenere le autorizzazioni necessarie per configurare e utilizzare l'autenticazione della federazione delle identità per la forza lavoro, chiedi all'amministratore di concederti i seguenti ruoli IAM nell'organizzazione:
-
Gestisci un'istanza:
Amministratore Cloud SQL (
roles/cloudsql.admin) -
Connettiti all'istanza:
Utente istanza Cloud SQL (
roles/cloudsql.instanceUser) -
Connettiti a un'istanza utilizzando il proxy di autenticazione Cloud SQL:
Client Cloud SQL (
roles/cloudsql.client) -
Gestisci policy IAM:
Project IAM Admin (
roles/resourcemanager.projectIamAdmin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Configura l'autenticazione della federazione delle identità della forza lavoro
Le sezioni seguenti spiegano come configurare l'istanza in modo che utilizzi l'autenticazione della federazione delle identità per la forza lavoro.
Abilita l'autenticazione IAM sull'istanza
Per abilitare l'autenticazione IAM, imposta il flag
cloudsql.iam_authentication
su on.
Console
-
Nella Google Cloud console, vai alla pagina Istanze Cloud SQL.
- Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
- Fai clic su Modifica.
- Espandi la sezione Personalizza la tua istanza.
- Espandi la sezione Connessioni.
- Nella sezione Sicurezza, seleziona la casella di controllo Abilita autenticazione IAM di Cloud SQL.
- Fai clic su Salva.
gcloud
Utilizza il seguente comando per attivare l'autenticazione IAM:
gcloud sql instances patch INSTANCE_NAME \ --database-flags=cloudsql.iam_authentication=on
Sostituisci INSTANCE_NAME con il nome dell'istanza.
Terraform
Aggiungi il blocco database_flags alla risorsa
google_sql_database_instance:
resource "google_sql_database_instance" "instance" { name = "INSTANCE_NAME" database_version = "POSTGRES_15" region = "REGION" settings { tier = "db-f1-micro" database_flags { name = "cloudsql.iam_authentication" value = "on" } } }
Sostituisci quanto segue:
INSTANCE_NAME: il nome dell'istanzaREGION: la regione in cui risiede l'istanza.
REST v1
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: l'ID progetto
- LOCATION_ID: l'ID località
- INSTANCE_ID: l'ID istanza desiderato
- REGION: la regione desiderata
- DATABASE_VERSION: stringa enum della versione del database.
Ad esempio:
POSTGRES_12 - PASSWORD: la password per l'utente root
- MACHINE_TYPE: stringa enum del tipo di macchina (livello), come:
db-custom-[CPUS]-[MEMORY_MBS]
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances
Corpo JSON della richiesta:
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql.iam_authentication",
"value": "on"
}
]
}
}
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": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-01T19:13:21.834Z",
"operationType": "CREATE",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
REST v1beta4
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: l'ID progetto
- LOCATION_ID: l'ID località
- INSTANCE_ID: l'ID istanza desiderato
- REGION: la regione desiderata
- DATABASE_VERSION: stringa enum della versione del database.
Ad esempio:
POSTGRES_12 - PASSWORD: la password per l'utente root
- MACHINE_TYPE: stringa enum del tipo di macchina (livello), come:
db-custom-[CPUS]-[MEMORY_MBS]
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances
Corpo JSON della richiesta:
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql.iam_authentication",
"value": "on"
}
]
}
}
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": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-01T19:13:21.834Z",
"operationType": "CREATE",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
Aggiungi l'utente dell'identità della forza lavoro all'istanza
Aggiungi l'entità esterna alla tua istanza utilizzando il tipo
CLOUD_IAM_WORKFORCE_IDENTITY.
Assicurati che l'ID utente che utilizzi corrisponda al valore fornito dal
mapping degli attributi
del tuo provider di identità per la forza lavoro. In genere, viene configurato come indirizzo email, ad esempio cruz@example.com.
Console
-
Nella Google Cloud console, 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. Si apre il riquadro Aggiungi un account utente all'istanza INSTANCE_NAME.
- Seleziona Federazione delle identità per la forza lavoro.
- Nel campo Utente della forza lavoro, inserisci l'ID utente dell'utente che vuoi aggiungere.
- Fai clic su Aggiungi.
gcloud
Esegui questo comando per creare l'utente:
gcloud sql users create USER_ID \ --instance=INSTANCE_NAME \ --type=CLOUD_IAM_WORKFORCE_IDENTITY
Sostituisci quanto segue:
USER_ID: l'ID utente dell'utente che vuoi aggiungere, ad esempiocruz@example.com.INSTANCE_NAME: il nome dell'istanza
Terraform
Utilizza la risorsa google_sql_user per definire l'utente
dell'identità della forza lavoro:
resource "google_sql_user" "workforce_user" { name = "USER_ID" # e.g., "cruz@example.com" instance = "INSTANCE_NAME" type = "CLOUD_IAM_WORKFORCE_IDENTITY" }
Sostituisci quanto segue:
USER_ID: l'ID utente dell'utente che vuoi aggiungere, ad esempiocruz@example.com.INSTANCE_NAME: il nome dell'istanza
REST v1
Creare un account utente
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- 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_WORKFORCE_IDENTITY"
}
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"
}
REST v1beta4
Creare un account utente
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- 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_WORKFORCE_IDENTITY"
}
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"
}
Concedi il ruolo utente dell'istanza
Concedi il ruolo
roles/cloudsql.instanceUser
all'entità di identità della forza lavoro o all'intero pool.
Console
-
Nella Google Cloud console, vai alla pagina Service account.
- Fai clic su Concedi l'accesso.
Nel campo Nuove entità, esegui una delle seguenti operazioni:
Per concedere l'accesso a un'entità individuale, inserisci l'identità della forza lavoro come
principal:principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_IDPer concedere l'accesso all'intero pool, inserisci il pool di forza lavoro come
principalSet:principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*
- Nell'elenco Ruolo, seleziona Cloud SQL > Utente istanza Cloud SQL.
- (Facoltativo) Se vuoi connetterti utilizzando il proxy di autenticazione Cloud SQL o i connettori di linguaggio Cloud SQL, fai clic su Aggiungi un altro ruolo e poi seleziona Cloud SQL > Client Cloud SQL.
- Fai clic su Salva.
gcloud
Per concedere l'accesso a un singolo utente, utilizza il comando gcloud projects
add-iam-policy-binding:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" \ --role="roles/cloudsql.instanceUser"
Sostituisci quanto segue:
USER_ID: l'ID utente dell'utente che vuoi aggiungere, ad esempiocruz@example.com.POOL_ID: l'ID del pool di forza lavoro.PROJECT_ID: l'identificatore del progetto che contiene l'istanza.
Per concedere l'accesso all'intero pool di forza lavoro, utilizza il comando gcloud projects
add-iam-policy-binding con il formato
membro principalSet:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*" \ --role="roles/cloudsql.instanceUser"
Terraform
Utilizza la risorsa google_project_iam_member per concedere il ruolo
all'entità della forza lavoro:
resource "google_project_iam_member" "workforce_user_iam" { project = "PROJECT_ID" role = "roles/cloudsql.instanceUser" member = "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" }
Sostituisci quanto segue:
USER_ID: l'ID utente dell'utente che vuoi aggiungere, ad esempiocruz@example.com.POOL_ID: l'ID del pool di forza lavoro.PROJECT_ID: l'identificatore del progetto che contiene l'istanza.
REST
Per concedere policy IAM utilizzando l'API, recupera la policy IAM del progetto utilizzando il metodo getIamPolicy.
Quindi, aggiungi la nuova associazione alla policy e infine applica la policy aggiornata
utilizzando il metodo setIamPolicy.
Di seguito è riportato un esempio di payload di associazione da aggiungere alla tua policy IAM:
{ "bindings": [ { "role": "roles/cloudsql.instanceUser", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" ] } ] }
Sostituisci quanto segue:
USER_ID: l'ID utente dell'utente che vuoi aggiungere, ad esempiocruz@example.com.POOL_ID: l'ID del pool di forza lavoro.
Concedi privilegi per il database
Puoi specificare i ruoli di database da concedere durante la creazione dell'utente di identità della forza lavoro oppure concedere manualmente i privilegi di database all'interno del database.
Ad esempio, per concedere i privilegi manualmente:
GRANT SELECT ON TABLE_NAME TO "USER_ID";
Sostituisci quanto segue:
TABLE_NAME: il nome della tabella del database.USER_IDl'ID utente del database delle identità della forza lavoro user, ad esempiocruz@example.com.
Connettersi all'istanza
Ora puoi connetterti all'istanza utilizzando gcloud CLI o il proxy di autenticazione Cloud SQL.
Utilizza gcloud CLI.
Devi prima autenticarti con la tua identità della forza lavoro prima di poter generare un token di accesso.
Per l'autenticazione tramite la federazione delle identità per la forza lavoro, utilizza il comando
gcloud auth logincon il flag--cred-file:gcloud auth login --cred-file=CONFIGURATION_FILESostituisci
CONFIGURATION_FILEcon il percorso del file di configurazione generato per il tuo provider di identità della forza lavoro.Per connetterti utilizzando un token generato, esegui questo comando:
bash export PGPASSWORD=$(gcloud sql generate-login-token) psql "host=INSTANCE_IP user=USER_ID \ dbname=DB_NAME sslmode=require"Sostituisci quanto segue:
INSTANCE_IP: l'indirizzo IP dell'istanza Cloud SQL.USER_ID: l'ID utente dell'utente della forza lavoro, ad esempiocruz@example.com.DB_NAME: il nome del database a cui vuoi connetterti.
Utilizzo del proxy di autenticazione Cloud SQL
Avvia il proxy con il flag
--auto-iam-authn:
./cloud-sql-proxy INSTANCE_CONNECTION_NAME --auto-iam-authn
Per saperne di più sul proxy, consulta Informazioni sul proxy di autenticazione Cloud SQL.
Limitazioni e restrizioni
- ID utente duplicato nei pool: Cloud SQL non è in grado di distinguere
i soggetti con lo stesso ID utente in diversi pool di forza lavoro o
provider di identità. Se utilizzi più pool o fornitori di forza lavoro, devi utilizzare le policy IAM per assicurarti di non concedere l'autorizzazione di accesso
roles/cloudsql.instanceUsera nomi soggetto duplicati di pool o fornitori diversi. In questo modo si impedisce l'accesso non autorizzato da un altro pool o provider con lo stesso ID utente. - Quota di accesso: esiste una quota di 12.000 accessi al minuto per ogni istanza, che include i tentativi di accesso riusciti e non riusciti. Quando la quota viene superata, gli accessi non sono temporaneamente disponibili. Ti consigliamo di evitare accessi frequenti e di limitare gli accessi utilizzando reti autorizzate.
Passaggi successivi
- Scopri di più sulla federazione delle identità per la forza lavoro.
- Scopri come configurare le istanze per l'autenticazione IAM dei database.
- Scopri come gestire gli utenti con l'autenticazione IAM dei database.
- Scopri come accedere a un database con l'autenticazione IAM dei database.