Per alcune Google Cloud risorse, puoi specificare un account di servizio gestito dall'utente che la risorsa utilizza come identità predefinita. Questa procedura è nota come collegamento del service account alla risorsa o associazione del account di servizio alla risorsa. Quando il codice in esecuzione sulla risorsa accede ai servizi e alle risorse di Google Cloud , utilizza l'account di servizio collegato alla risorsa come identità. Ad esempio, se colleghi un account di servizio a un'istanza Compute Engine e le applicazioni sull'istanza utilizzano una libreria client per chiamare le API Google Cloud , queste applicazioni utilizzano automaticamente il account di servizio collegato per l'autenticazione e l'autorizzazione.
Questa pagina descrive come configurare i service account in modo da poterli collegare alle risorse.
Prima di iniziare
Enable the IAM and Resource Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.Assicurati di comprendere come funzionano i service account in IAM.
Ruoli obbligatori
Per ottenere l'autorizzazione
necessaria per collegare un account di servizio a una risorsa,
chiedi all'amministratore di concederti il ruolo IAM
Utente service account (roles/iam.serviceAccountUser)
sul account di servizio.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene l'autorizzazione
iam.serviceAccounts.actAs
necessaria per
collegare un account di servizio a una risorsa.
Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Configurare le policy dell'organizzazione
A seconda della posizione dell'account di servizio che vuoi collegare alla risorsa, potresti dover aggiornare i criteri dell'organizzazione del tuo progetto prima di collegare l'account di servizio:
Se l'account di servizio si trova nello stesso progetto della risorsa a cui vuoi collegarlo, non devi aggiornare i criteri dell'organizzazione del progetto.
Se il account di servizio si trova in un progetto diverso dalla risorsa a cui vuoi collegarlo, devi aggiornare i criteri dell'organizzazione per il progetto contenente il account di servizio. Per maggiori dettagli, vedi Consentire l'allegato di account di servizio a più progetti in questa pagina.
Questo potrebbe essere il caso se, ad esempio, crei tutti i tuoi account di servizio in un unico progetto.
Configura il account di servizio
Prima di collegare un account di servizio a una risorsa, devi configurarlo. Questa procedura varia a seconda che l'account di servizio e la risorsa si trovino nello stesso progetto o in progetti diversi. Dopo aver configurato il account di servizio, puoi creare la risorsa e collegare il account di servizio a questa risorsa.
Configura per una risorsa nello stesso progetto
Prima di collegare un account di servizio a un'altra risorsa nello stesso progetto, concedi ruoli alaccount di serviziot in modo che possa accedere alle risorse appropriate, proprio come faresti con qualsiasi altro principal.
Configurare per una risorsa in un altro progetto
In alcuni casi, potrebbe essere necessario collegare un account di servizio a una risorsa che si trova in un progetto diverso. Ad esempio, se crei tutti i service account in un unico progetto, potresti doverne collegare uno a una nuova risorsa in un altro progetto.
Prima di collegare un account di servizio a una risorsa in un altro progetto, esegui le seguenti operazioni:
- Nel progetto in cui si trova il account di servizio, segui i passaggi descritti in questa pagina per consentire l'allegamento dei service account tra progetti.
- Identifica il progetto in cui creerai la risorsa.
Identifica il tipo di risorsa a cui collegherai il account di servizio, nonché il servizio proprietario di quel tipo di risorsa.
Ad esempio, se stai creando un abbonamento Pub/Sub, Pub/Sub è il servizio proprietario della risorsa.
Trova l'indirizzo email dell'agente di servizio per il servizio.
Servizi diversi utilizzano agenti di servizio diversi. Per maggiori dettagli, vedi Agenti di servizio.
Concedi il ruolo Creatore token account di servizio (
roles/iam.serviceAccountTokenCreator) agli agenti di servizio:Console
Nella Google Cloud console, vai alla pagina Service account.
Seleziona il progetto proprietario del account di servizio che collegherai a una risorsa.
Fai clic sull'indirizzo email del account di servizio che collegherai a una risorsa.
Vai alla scheda Entità con accesso.
Fai clic su Concedi l'accesso e poi inserisci l'indirizzo email dell'agente di servizio.
Fai clic su Seleziona un ruolo, digita
Service Account Token Creatore fai clic sul ruolo.Fai clic su Salva per salvare le modifiche.
(Facoltativo) Se devi concedere il ruolo a un altro service agent, ripeti i passaggi precedenti.
gcloud
Utilizza il comando
gcloud iam service-accounts add-iam-policy-binding:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member=serviceAccount:SERVICE_AGENT_EMAIL \ --role=roles/iam.serviceAccountTokenCreator
Sostituisci i seguenti valori:
SERVICE_ACCOUNT_NAME: il nome del account di servizio gestito dall'utente che stai collegando a una risorsa.PROJECT_ID: l'ID progetto in cui si trova il account di servizio gestito dall'utente.SERVICE_AGENT_EMAIL: l'indirizzo email dell'agente del servizio.
Il comando stampa il criterio di autorizzazione aggiornato per l'account di servizio gestito dall'utente.
(Facoltativo) Se devi concedere il ruolo a un altro agente di servizio, esegui di nuovo il comando.
REST
Per concedere questo ruolo, utilizza il pattern di lettura, modifica e scrittura per aggiornare il criterio di autorizzazione per ilaccount di serviziot gestito dall'utente.
Innanzitutto, leggi il criterio di autorizzazione per il account di servizio gestito dall'utente:
Il metodo
projects.serviceAccounts.getIamPolicyrestituisce il criterio di autorizzazione per il account di servizio.Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID: il tuo ID progetto Google Cloud . Gli ID progetto sono stringhe alfanumeriche, comemy-project.-
USER_SA_NAME: il nome del account di servizio gestito dall'utente che stai associando a una risorsa.
Metodo HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy
Corpo JSON della richiesta:
{ "requestedPolicyVersion": 3 }Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com" ] } ] }Successivamente, modifica la policy di autorizzazione per concedere il ruolo Creatore token account di servizio all'agente di servizio.
{ "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" ] } ] }
Sostituisci quanto segue:
SERVICE_AGENT_EMAIL: l'indirizzo email del service agentSERVICE_ACCOUNT_NAME: il nome del account di servizio gestito dall'utente.PROJECT_ID: l'ID progetto in cui si trova il account di servizio gestito dall'utente.
Infine, scrivi la policy di autorizzazione aggiornata:
Il metodo
projects.serviceAccounts.setIamPolicyaggiorna la policy di autorizzazione per il tuo account di servizio.Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID: il tuo ID progetto Google Cloud . Gli ID progetto sono stringhe alfanumeriche, comemy-project.-
USER_SERVICE_ACCOUNT_NAME: il nome del account di servizio gestito dall'utente che stai associando a una risorsa. -
SERVICE_AGENT_EMAIL: l'indirizzo email del service agent che creerà token di accesso per il tuoaccount di serviziot gestito dall'utente.
Metodo HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy
Corpo JSON della richiesta:
{ "policy": { "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" ] } ] } }Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "version": 1, "etag": "BwWo331TkHE=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com" ] } ] }
Collega il account di servizio a una risorsa
Dopo aver configurato il account di servizio gestito dall'utente, puoi creare una nuova risorsa e collegare ilaccount di serviziot a questa risorsa. Assicurati di creare la nuova risorsa nel progetto appropriato.
Nella maggior parte dei casi, devi collegare un account di servizio a una risorsa quando la crei. Dopo la creazione della risorsa, non puoi modificare l'account di servizio associato alla risorsa. Le istanze Compute Engine fanno eccezione a questa regola: puoi modificare il account di servizio collegato a un'istanza in base alle esigenze.
Consulta le istruzioni per il tipo di risorsa che vuoi creare:
| Collegamento di un account di servizio durante la creazione di una risorsa | |
|---|---|
| AI Platform Prediction | Versioni del modello |
| AI Platform Training | Job |
| Ambiente standard di App Engine | Versioni dell'app |
| Ambiente flessibile di App Engine | Versioni dell'app |
| Cloud Composer | Ambienti |
| Funzioni Cloud Run | Funzione Cloud Run |
| Cloud Life Sciences | Pipeline |
| Cloud Run | Servizi |
| Cloud Scheduler | Job |
| Cloud Source Repositories |
|
| Compute Engine | |
| Dataproc | Cluster |
| Google Kubernetes Engine | |
| Notebook | Istanze notebook |
| Pub/Sub | Abbonamenti |
Dopo aver creato la risorsa e collegato il account di servizio a questa risorsa, puoi concedere ruoli al account di servizio in modo che possa accedere alle risorse appropriate. Questa procedura è uguale alla concessione di un ruolo a qualsiasi altro principal.
Per scoprire come concedere i ruoli, consulta Concessione, modifica e revoca dell'accesso alle risorse.
Consenti l'allegato di service account tra progetti
Se vuoi consentire agli utenti di collegare service account in un progetto a risorse in un altro progetto, devi aggiornare i criteri dell'organizzazione per il progetto che contiene i service account. Controlla i seguenti vincoli booleani nelle policy dell'organizzazione per il progetto:
Assicurati che il vincolo booleano
iam.disableCrossProjectServiceAccountUsagenon sia applicato per il progetto.Questo vincolo booleano controlla se puoi collegare un account di servizio a una risorsa in un altro progetto. Viene applicato per impostazione predefinita e può essere configurato solo a livello di progetto, non a livello di cartella o organizzazione.
Quando questo vincolo non viene applicato, IAM aggiunge un blocco del progetto che impedisce l'eliminazione del progetto. Questo privilegio ha l'origine
iam.googleapis.com/cross-project-service-accounts. Ti sconsigliamo vivamente di eliminare questa garanzia.Consigliato: assicurati che il vincolo booleano
iam.restrictCrossProjectServiceAccountLienRemovalsia applicato per il progetto.Questo vincolo booleano garantisce che le entità possano rimuovere il vincolo del progetto solo se dispongono dell'autorizzazione
resourcemanager.projects.updateLiensa livello di organizzazione. Se questo vincolo non viene applicato, le entità possono rimuovere il vincolo del progetto se dispongono di questa autorizzazione a livello di progetto.
Per scoprire come visualizzare o modificare un vincolo booleano in una policy dell'organizzazione, consulta Creazione e gestione delle policy dell'organizzazione.
Disabilitare l'allegato di service account tra i progetti
Se in precedenza hai abilitato l'associazione di service account a più progetti, ti sconsigliamo vivamente di disattivare questa funzionalità, soprattutto negli ambienti di produzione.
Nello specifico, nel progetto in cui si trovano i tuoi service account, non devi apportare nessuna di queste modifiche:
- Non aggiornare i criteri dell'organizzazione del progetto per applicare il vincolo booleano
iam.disableCrossProjectServiceAccountUsage. - Non aggiornare i criteri dell'organizzazione del progetto in modo da non applicare il vincolo booleano
iam.restrictCrossProjectServiceAccountLienRemoval. - Non rimuovere il vincolo sul progetto con l'origine
iam.googleapis.com/cross-project-service-accounts, che impedisce l'eliminazione del progetto. - Non eliminare il progetto.
Se vuoi accettare il rischio di disattivare questa funzionalità, puoi ridurlo disattivando gli account di servizio che utilizzi nei progetti, quindi monitorando l'ambiente Google Cloud per rilevare eventuali problemi. Se riscontri problemi, puoi riattivare i service account. Se non rilevi problemi, è possibile che tu non abbia risorse Google Cloud che dipendono da uaccount di serviziont in un altro progetto.
Audit log per il collegamento di service account
Quando un principal utilizza l'autorizzazione iam.serviceAccounts.actAs per collegare un account di servizio a una risorsa, IAM genera un audit log. Questo
log di controllo contiene le seguenti informazioni:
- L'indirizzo email dell'entità che ha collegato il account di servizio alla risorsa
- Dettagli sul account di servizio collegato alla risorsa
Per un elenco delle risorse a cui puoi collegare i service account, consulta la sezione Collega il account di servizio alla nuova risorsa in questa pagina.
Per un esempio di questo tipo di log di controllo, vedi Log per l'utilizzo dell'autorizzazione
iam.serviceAccounts.actAs. Per saperne di più
sui log di controllo in generale, consulta la panoramica di Cloud Audit Logs.
Passaggi successivi
- Scopri come collegare un account di servizio a un'istanza Compute Engine.
- Esamina e applica le best practice per la protezione degli account di servizio.
- Scopri di più sull'audit logging per IAM.