Per alcune risorse Google Cloud, puoi specificare un account di servizio gestito dall'utente che la risorsa utilizza come identità predefinita. Questo processo è noto come collegamento dell'account di servizio alla risorsa o associazione dell'account di servizio alla risorsa.
Quando la risorsa deve accedere ad altri servizi e risorse Google Cloud, utilizza l'account di servizio collegato come identità. Ad esempio, se associ un account di servizio a un'istanza di Compute Engine e le applicazioni nell'istanza utilizzano una libreria client per chiamare le API Google Cloud, queste applicazioni si autenticano automaticamente come account di servizio collegato.
Questa pagina descrive come configurare gli account di servizio in modo da poterli collegare alle risorse.
Prima di iniziare
Abilita le API IAM and Resource Manager.
Assicurati di aver compreso come funzionano gli account di servizio in IAM.
Collega un account di servizio a una risorsa
Nella maggior parte dei casi, devi collegare un account di servizio a una risorsa quando la crei. Dopo aver creato la risorsa, non puoi modificare l'account di servizio collegato alla risorsa. Le istanze di Compute Engine sono un'eccezione a questa regola; puoi modificare l'account di servizio collegato a un'istanza, se necessario.
Prima di collegare un account di servizio a una risorsa, devi configurare l'account di servizio. Questo processo varia a seconda che l'account di servizio e la risorsa si trovino nello stesso progetto o in progetti diversi. Dopo aver configurato l'account di servizio, puoi creare la risorsa e collegarne l'account di servizio.
Configura per una risorsa nello stesso progetto
Prima di collegare un account di servizio a un'altra risorsa nello stesso progetto, concedi i ruoli all'account di servizio in modo che possa accedere alle risorse appropriate, proprio come faresti per qualsiasi altra entità.
Configura 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 altro progetto. Ad esempio, se crei tutti i tuoi account di servizio in un singolo progetto, potrebbe essere necessario collegarne uno a una nuova risorsa in un altro progetto.
Prima di collegare un account di servizio a una risorsa in un altro progetto:
- Nel progetto in cui si trova l'account di servizio, segui i passaggi in questa pagina per abilitare il collegamento degli account di servizio tra progetti.
- Identifica il progetto in cui creerai la risorsa.
Identifica il tipo di risorsa a cui collegherai l'account di servizio e il servizio proprietario di quel tipo di risorsa.
Ad esempio, se stai creando una sottoscrizione Pub/Sub, Pub/Sub è il servizio proprietario della risorsa.
Trova l'indirizzo email dell'agente di servizio del servizio.
Servizi diversi utilizzano agenti di servizio diversi. Per maggiori dettagli, consulta Agenti di servizio.
Concedi il ruolo Creatore token account di servizio (
roles/iam.serviceAccountTokenCreator
) agli agenti di servizio:Console
Nella console Google Cloud, vai alla pagina Account di servizio.
Seleziona il progetto proprietario dell'account di servizio che collegherai a una risorsa.
Fai clic sull'indirizzo email dell'account di servizio da collegare a una risorsa.
Vai alla scheda Autorizzazioni e trova la sezione Entità con accesso a questo account di servizio.
Fai clic su
Concedi l'accesso, poi inserisci l'indirizzo email dell'agente di servizio.Fai clic su Seleziona un ruolo, digita
Service Account Token Creator
e fai clic sul ruolo.Fai clic su Salva per salvare le modifiche.
(Facoltativo) Se devi concedere il ruolo a un altro agente di servizio, 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 dell'account di servizio gestito dall'utente che stai collegando a una risorsa.PROJECT_ID
: l'ID progetto in cui si trova l'account di servizio gestito dall'utente.SERVICE_AGENT_EMAIL
: l'indirizzo email dell'agente di 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 il tuo account di servizio gestito dall'utente.
Prima di tutto, leggi il criterio di autorizzazione per l'account di servizio gestito dall'utente:
Il metodo
projects.serviceAccounts.getIamPolicy
restituisce il criterio di autorizzazione per l'account di servizio.Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
PROJECT_ID
: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche comemy-project
.-
USER_SA_NAME
: il nome dell'account di servizio gestito dall'utente che associ 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 il criterio 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 dell'agente di servizioSERVICE_ACCOUNT_NAME
: il nome dell'account di servizio gestito dall'utente.PROJECT_ID
: l'ID progetto in cui si trova l'account di servizio gestito dall'utente.
Infine, scrivi il criterio di autorizzazione aggiornato:
Il metodo
projects.serviceAccounts.setIamPolicy
aggiorna il criterio di autorizzazione per l'account di servizio.Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
PROJECT_ID
: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche comemy-project
.-
USER_SERVICE_ACCOUNT_NAME
: il nome dell'account di servizio gestito dall'utente che associ a una risorsa. -
SERVICE_AGENT_EMAIL
: l'indirizzo email dell'agente di servizio che creerà i token di accesso per l'account di servizio 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 l'account di servizio alla nuova risorsa
Dopo aver configurato l'account di servizio gestito dall'utente, puoi creare una nuova risorsa e collegare l'account di servizio alla risorsa. Assicurati di creare la nuova risorsa nel progetto appropriato.
Consulta le istruzioni per il tipo di risorsa che vuoi creare:
Collegare 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 app |
Ambiente flessibile di App Engine | Versioni app |
Cloud Composer | Ambienti |
Cloud Functions | funzione Cloud Functions Functions |
Cloud Life Sciences | Pipeline |
Cloud Run | Servizi |
Cloud Scheduler | Job |
Cloud Source Repositories |
|
Compute Engine | |
Dataflow | Job |
Datalab | Istanze |
Dataproc | Cluster |
Eventarc | Trigger |
Google Kubernetes Engine | |
Notebooks | Istanze di blocco note |
Pub/Sub | Abbonamenti |
Vertex AI | |
Workflows | Workflows |
Dopo aver creato la risorsa e aver collegato l'account di servizio alla risorsa, puoi concedere ruoli all'account di servizio in modo che possa accedere alle risorse appropriate. Questa procedura è la stessa che viene concessa a un ruolo a qualsiasi altra entità.
Per informazioni su come concedere i ruoli, consulta Concessione, modifica e revoca dell'accesso alle risorse.
Collega un account di servizio a una risorsa in un altro progetto
Per impostazione predefinita, non puoi creare un account di servizio in un progetto e collegarlo a una risorsa in un altro progetto. Se vuoi mantenere tutti gli account di servizio in un solo progetto, devi aggiornare i criteri dell'organizzazione per il progetto.
Abilita il collegamento degli account di servizio tra progetti
Per consentire agli utenti di collegare gli account di servizio di un progetto alle risorse di un altro, controlla i seguenti boolean constraints nel criterio dell'organizzazione per il progetto in cui si trovano i tuoi account di servizio:
Assicurati che il vincolo booleano
iam.disableCrossProjectServiceAccountUsage
non sia applicato in modo forzato per il progetto.Questo vincolo booleano determina se puoi collegare un account di servizio a una risorsa in un altro progetto. Il vincolo viene applicato per impostazione predefinita.
Se questo vincolo non viene applicato, IAM aggiunge un blocco sul progetto che ne impedisce l'eliminazione. Questo blocco ha l'origine
iam.googleapis.com/cross-project-service-accounts
. Ti sconsigliamo vivamente di eliminare questo blocco.Consigliato: assicurati che il vincolo booleano
iam.restrictCrossProjectServiceAccountLienRemoval
sia applicato al progetto.Questo vincolo booleano assicura che le entità possano rimuovere il blocco sul progetto solo se dispongono dell'autorizzazione
resourcemanager.projects.updateLiens
a livello di organizzazione. Se questo vincolo non viene applicato, le entità possono rimuovere il blocco sul progetto se dispongono di questa autorizzazione a livello di progetto.
Per scoprire come visualizzare o modificare un vincolo booleano in un criterio dell'organizzazione, vedi Creazione e gestione dei criteri dell'organizzazione.
Disattiva il collegamento degli account di servizio tra progetti
Se in precedenza hai abilitato il collegamento degli account di servizio tra progetti, ti sconsigliamo vivamente di disattivare questa funzionalità, soprattutto negli ambienti di produzione.
In particolare, non devi apportare queste modifiche nel progetto in cui si trovano i tuoi account di servizio:
- Non aggiornare il criterio dell'organizzazione del progetto per applicare il vincolo booleano
iam.disableCrossProjectServiceAccountUsage
. - Non aggiornare il criterio dell'organizzazione del progetto in modo che non venga applicato il vincolo booleano
iam.restrictCrossProjectServiceAccountLienRemoval
. - Non rimuovere il blocco del progetto con l'origine
iam.googleapis.com/cross-project-service-accounts
, che ti impedisce di eliminare il progetto. - Non eliminare il progetto.
Se sei disposto ad accettare il rischio di disabilitare questa funzionalità, puoi ridurre il rischio disattivando gli account di servizio che utilizzi in più progetti, quindi monitorando il tuo ambiente Google Cloud per rilevare eventuali problemi. Se riscontri problemi, puoi riattivare gli account di servizio. Se non rilevi alcun problema, è possibile che non ci siano risorse Google Cloud che dipendono da un account di servizio in un progetto diverso.
Passaggi successivi
- Scopri come collegare un account di servizio a un'istanza di Compute Engine.
- Esamina e applica le best practice per la protezione degli account di servizio.
- Scopri di più sull'audit logging per IAM.