Per alcune risorse Google Cloud, puoi specificare un account di servizio gestito dall'utente che la risorsa utilizza come identità predefinita. Questa procedura è nota come aggancio dell'account di servizio alla risorsa o associazione dell'account di servizio alla risorsa. Quando il codice in esecuzione sulla risorsa accede ai servizi e alle risorse Google Cloud, utilizza e un account di servizio collegato alla risorsa come identità. Ad esempio, se alleghi una account di servizio un'istanza Compute Engine e le applicazioni nell'istanza usano una libreria client per chiamare le API Google Cloud. queste applicazioni usano automaticamente l'account di servizio collegato per l'autenticazione autorizzazione.
Questa pagina descrive come configurare gli account di servizio in modo da poterli collegare alle risorse.
Prima di iniziare
Enable the IAM and Resource Manager APIs.
Assicurati di comprendere come funzionano gli account di servizio 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 account di servizio (roles/iam.serviceAccountUser
) nell'account di servizio.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene l'autorizzazione
iam.serviceAccounts.actAs
necessaria per
associare un account di servizio a una risorsa.
Potresti anche riuscire a ottenere questa autorizzazione con ruoli personalizzati altri ruoli predefiniti.
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 cambiare il servizio dell'account di servizio è collegato alla risorsa. Le istanze di Compute Engine sono eccezione a questa regola; puoi modificare l'account di servizio collegato a un'istanza dell'oggetto o eliminare definitivamente una versione archiviata, in base alle necessità.
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 configurare l'account di servizio, puoi creare la risorsa e collegare a quella risorsa.
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, come faresti con qualsiasi altro primario.
Configurazione per una risorsa in un altro progetto
In alcuni casi, potrebbe essere necessario collegare un account di servizio a una risorsa in un altro progetto. Ad esempio, se creare tutti gli account di servizio in un unico 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, esegui la seguenti:
- Nel progetto in cui si trova l'account di servizio, segui i passaggi descritti in questa pagina per abilitare l'attacco 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, nonché il servizio che possiede quel tipo di risorsa.
Ad esempio, se stai creando un abbonamento Pub/Sub, Pub/Sub è il servizio che possiede la 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 console Google Cloud, vai alla pagina Account di servizio.
Seleziona il progetto proprietario dell'account di servizio da collegare 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 e poi inserisci l'indirizzo email dell'agente di servizio.Fai clic su Seleziona un ruolo, digita
Service Account Token Creator
e fai clic il 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 è stato gestito l'utente in cui trovi l'account di servizio.SERVICE_AGENT_EMAIL
: l'indirizzo email del servizio dell'agente.
Il comando stampa il criterio di autorizzazione aggiornato per il servizio gestito dall'utente .
(Facoltativo) Se devi concedere il ruolo a un altro agente di servizio, esegui il comando precedente.
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, ad esempiomy-project
.-
USER_SA_NAME
: il nome dell'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 delle seguenti 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 del 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 servizio gestito dall'utente.
Infine, scrivi il criterio di autorizzazione aggiornato:
La
projects.serviceAccounts.setIamPolicy
aggiorna il criterio di autorizzazione per il tuo account di servizio.Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID
: l'ID del tuo progetto Google Cloud. Gli ID progetto sono stringhe alfanumeriche, ad esempiomy-project
.-
USER_SERVICE_ACCOUNT_NAME
: il nome dell'account di servizio gestito dall'utente che stai associando a una risorsa. -
SERVICE_AGENT_EMAIL
: l'indirizzo email dell'agente di servizio che creare token di accesso per il tuo 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 delle seguenti 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 a quella risorsa. Assicurati di creare la nuova risorsa nel progetto appropriato.
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 | Modello versioni |
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 | |
Dataflow | Job |
Datalab | Istanze |
Dataproc | Cluster |
Eventarc | Trigger |
Google Kubernetes Engine | |
Notebooks | Istanze notebook |
Pub/Sub | Abbonamenti |
Vertex AI | |
Workflows | Workflows |
Dopo aver creato la risorsa e aver collegato l'account di servizio alla risorsa, puoi concedere i ruoli all'account di servizio in modo che possa accedere alle risorse appropriate. Questa procedura è la stessa che viene utilizzata per concedere un ruolo a qualsiasi altro entità principale.
Per scoprire come concedere i ruoli, consulta Concessione, modifica e revoca dell'accesso alle risorse.
Collegare 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 progetto, devi aggiornare il criterio dell'organizzazione per quel progetto.
Abilita il collegamento degli account di servizio tra progetti
Per consentire agli utenti di collegare gli account di servizio in un progetto alle risorse di un altro progetto, controlla i seguenti vincoli booleani nel criterio dell'organizzazione per il progetto in cui si trovano gli account di servizio:
Assicurati che il vincolo booleano
iam.disableCrossProjectServiceAccountUsage
non sia applicato per il progetto.Questo vincolo booleano controlla 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 che impedisce l'eliminazione del progetto. Questo blocco ha l'origine
iam.googleapis.com/cross-project-service-accounts
. Sconsigliamo vivamente per evitare l'eliminazione di questo blocco.Consigliato: assicurati che il vincolo booleano
iam.restrictCrossProjectServiceAccountLienRemoval
sia applicato per il progetto.Questo vincolo booleano assicura che le entità possano rimuovere il blocco del progetto solo se dispongono dell'autorizzazione
resourcemanager.projects.updateLiens
in a livello di organizzazione. Se questo vincolo non viene applicato, le entità possono rimuovere il blocco del progetto se dispongono dell'autorizzazione a livello di progetto.
Scopri come visualizzare o modificare un vincolo booleano in un'organizzazione consulta l'articolo su come creare e gestire i criteri dell'organizzazione.
Disabilita il collegamento degli account di servizio tra progetti
Se in precedenza hai abilitato l'attacco degli account di servizio tra i progetti, ti sconsigliamo vivamente di disattivare questa funzionalità, soprattutto negli ambienti di produzione.
Nello specifico, nel progetto in cui si trovano i tuoi account di servizio, non devi apportare nessuna di queste modifiche:
- Non aggiornare il criterio dell'organizzazione del progetto per applicare il
Vincolo booleano
iam.disableCrossProjectServiceAccountUsage
. - Non aggiornare il criterio dell'organizzazione del progetto per non applicare le
Vincolo booleano
iam.restrictCrossProjectServiceAccountLienRemoval
. - Non rimuovere il blocco del progetto con l'origine
iam.googleapis.com/cross-project-service-accounts
, che impedisce di l'eliminazione del progetto. - Non eliminare il progetto.
Se sei disposto ad accettare il rischio di disattivare questa funzione, puoi ridurre a tuo rischio disattivando gli account di servizio che utilizzi tra progetti, monitorando poi l'ambiente Google Cloud per rilevare eventuali problemi. Se riscontri problemi, puoi riattivare gli account di servizio. Se non riscontri problemi, è possibile che non siano presenti risorse Google Cloud che dipendono da un account di servizio in un altro progetto.
Log di controllo per il collegamento degli account di servizio
Quando un'entità utilizza l'autorizzazione iam.serviceAccounts.actAs
per collegare un
a una risorsa, IAM genera un audit log. Questo
contiene le seguenti informazioni:
- L'indirizzo email dell'entità che ha collegato l'account di servizio alla risorsa
- Dettagli sull'account di servizio collegato alla risorsa
Per un elenco delle risorse a cui puoi collegare gli account di servizio, consulta Collega l'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'autorizzazioneiam.serviceAccounts.actAs
. Per scoprire 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 Compute Engine in esecuzione.
- Esamina e applica le best practice per la protezione degli account di servizio.
- Scopri di più sull'audit logging per IAM.