Questa pagina descrive il funzionamento dei service account con Compute Engine.
Per informazioni passo passo su come collegare un account di servizio a un'istanza di macchina virtuale (VM), consulta uno dei seguenti documenti:
- Per configurare il account di servizio durante la creazione della VM, vedi Crea una VM che utilizza un service account gestito dall'utente.
- Per configurare un account di servizio su una VM esistente, vedi Modificare il service account collegato.
Per scoprire le best practice per la creazione e la gestione dei service account, leggi la documentazione Best practice per l'utilizzo dei service account.
Provalo
Se non conosci Google Cloud, crea un account per valutare le prestazioni di Compute Engine in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti senza addebiti per l'esecuzione, il test e il deployment dei workload.
Fai una prova senza costi di Compute EngineChe cos'è un account di servizio?
Un service account è un tipo speciale di account utilizzato da un'applicazione o da un workload di computing, anziché da una persona. I service account sono gestiti da Identity and Access Management (IAM).
Quando utilizzi i service account con le tue VM, tieni presente quanto segue:
- Puoi collegare lo stesso account di servizio a più VM, ma una singola VM può avere un soloaccount di serviziot collegato.
- Se colleghi lo stesso account di servizio a più VM, qualsiasi modifica successiva apportata al account di servizio influisce su tutte le VM che lo utilizzano. Ciò include le modifiche apportate ai ruoli IAM concessi alaccount di serviziot. Ad esempio, se rimuovi un ruolo, tutte le VM che utilizzano il account di servizio perdono le autorizzazioni concesse da quel ruolo.
Come Compute Engine utilizza i service account
Compute Engine utilizza due tipi di service account:
Un account di servizio gestito dall'utente può essere collegato a un'istanza Compute Engine per fornire le credenziali alle applicazioni in esecuzione sull'istanza. Queste credenziali vengono utilizzate dall'applicazione per l'autenticazione alle API di Google Cloud e l'autorizzazione per accedere alle risorse di Google Cloud . Solo i service account gestiti dall'utente possono essere collegati a un'istanza e un'istanza può avere un solo account di servizio collegato. Puoi modificare il account di servizio collegato a un'istanza al momento della creazione o in un secondo momento.
Gli agenti di servizio vengono utilizzati dall'istanza per accedere ai processi interni per tuo conto.
Inoltre, puoi creare regole firewall che consentono o negano il traffico da e verso le istanze in base all'account di servizio che associ a ogni istanza.
Come viene determinata l'autorizzazione
L'autorizzazione fornita alle applicazioni ospitate su un'istanza Compute Engine è limitata da due configurazioni separate: i ruoli concessi al service account collegato e gli ambiti di accesso impostati sull'istanza. Entrambe queste configurazioni devono consentire l'accesso prima che l'applicazione in esecuzione sull'istanza possa accedere a una risorsa.
Supponiamo che tu abbia un'app che legge e scrive file su Cloud Storage, questa deve
prima eseguire l'autenticazione nell'API Cloud Storage. Puoi creare un'istanza con l'ambito
cloud-platform
e collegare un account di servizio all'istanza. Puoi
quindi concedere ruoli Identity and Access Management (IAM) alaccount di serviziot per consentire alla tua
app di accedere alle risorse appropriate. La tua app utilizza le credenziali del account di servizio
per l'autenticazione all'API Cloud Storage senza incorporare chiavi segrete o credenziali utente nell'istanza, nell'immagine o nel codice dell'app. La tua app
utilizza anche l'autorizzazione fornita dai ruoli IAM sulaccount di serviziont per accedere alle risorse.
Per ulteriori informazioni sull'autorizzazione, consulta la sezione Autorizzazione
in questa pagina.
Account di servizio gestiti dall'utente
Gli account di servizio gestiti dall'utente includono i nuovi service account che crei in modo esplicito e l'account di servizio predefinito di Compute Engine.
Nuovi service account
Puoi creare e gestire i tuoi service account utilizzando IAM. Dopo aver creato un account, gli assegni i ruoli IAM e configuri le istanze da eseguire come account di servizio. Le app in esecuzione su istanze con l'account di servizio collegato possono utilizzare le credenziali dell'account per effettuare richieste ad altre API Google.
Per creare e configurare un nuovo account di servizio, consulta Crea una VM che utilizza un service account gestito dall'utente.
Account di servizio predefinito Compute Engine
I nuovi progetti in cui è stata abilitata l'API Compute Engine hanno un account di servizio predefinito Compute Engine con il seguente indirizzo email:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Il account di servizio Compute Engine predefinito ha i seguenti attributi:
- Viene creato automaticamente, con nome e indirizzo email generati automaticamente, e aggiunto al tuo progetto quando abiliti l'API Compute Engine. Hai il controllo completo dell'account.
- Collegato per impostazione predefinita a tutte le VM create utilizzando Google Cloud CLI o la console Google Cloud . Puoi evitare questo comportamento specificando unaccount di serviziot diverso quando crei la VM oppure specificando esplicitamente che nessuaccount di serviziont venga collegato alla VM.
-
A seconda della configurazione della policy dell'organizzazione, al account di servizio predefinito potrebbe essere concesso automaticamente il ruolo Editor nel tuo progetto. Ti consigliamo vivamente di disattivare la concessione automatica dei ruoli applicando il vincolo
iam.automaticIamGrantsForDefaultServiceAccounts
del criterio dell'organizzazione. Se hai creato la tua organizzazione dopo il 3 maggio 2024, questo vincolo viene applicato per impostazione predefinita.Se disattivi la concessione automatica dei ruoli, devi decidere quali ruoli concedere agli account di servizio predefiniti e poi concederli personalmente.
Se l'account di servizio predefinito dispone già del ruolo Editor, ti consigliamo di sostituirlo con ruoli meno permissivi.Per modificare in modo sicuro i ruoli dell'account di servizio, utilizza Policy Simulator per visualizzare l'impatto della modifica, quindi concedi e revoca i ruoli appropriati.
Puoi disabilitare o eliminare questo account di servizio dal tuo progetto, ma se lo fai potrebbe causare errori nelle applicazioni che dipendono dalle credenziali del account di servizio. Se elimini per sbaglio l'account di servizio predefinito di Compute Engine, puoi provare a recuperarlo entro 30 giorni. Per ulteriori informazioni, vedi Eliminare e ripristinare gli account di servizio.
Se l'account di servizio predefinito di Compute Engine è stato eliminato più di 30 giorni fa, puoi provare a recuperarlo seguendo la procedura descritta in Risoluzione dei problemi relativi agli account di servizio predefiniti.
Agenti di servizio
Gli agenti di servizio vengono creati e gestiti da Google Cloud e assegnati automaticamente al tuo progetto. Questi account rappresentano servizi Google Cloud diversi e ogni account in genere ha un certo livello di accesso alle tue risorse Google Cloud .
Non puoi collegare service agent a un'istanza Compute Engine.
Agente di servizio API di Google
A parte l'account di servizio predefinito, tutti i progetti abilitati con Compute Engine includono un agente di servizio delle API Google, identificabile tramite l'email:
PROJECT_NUMBER@cloudservices.gserviceaccount.com
Questo agente di servizio è progettato specificamente per eseguire processi interni di Google per tuo conto. Questo agente di servizio è di proprietà di Google e non è elencato nella sezione Service Account della console Google Cloud . Per impostazione predefinita, a questo service agent viene concesso automaticamente il ruolo Editor progetto sul progetto e viene elencato nella sezione IAM della console Google Cloud . Questo service agent viene eliminato solo quando viene eliminato il progetto. Tuttavia, puoi modificare i ruoli concessi a questo account, inclusa la revoca di tutti gli accessi al tuo progetto.
Alcune risorse si basano sulle autorizzazioni di editor predefinite concesse a questo service agent. Ad esempio, i gruppi di istanze gestite e la scalabilità automatica utilizzano le credenziali di questo agente di servizio per creare, eliminare e gestire le istanze. Se revochi le autorizzazioni a questo service agent o le modifichi in modo che non concedano le autorizzazioni per creare istanze, i gruppi di istanze gestite e la scalabilità automatica smetteranno di funzionare.
Per questi motivi, non devi modificare i ruoli di questo service agent, a meno che un suggerimento sul ruolo non ti suggerisca esplicitamente di modificarli.
Compute Engine Service Agent
Tutti i progetti in cui è stata abilitata l'API Compute Engine hanno un agente di servizio Compute Engine, che ha il seguente indirizzo email:
service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
Questo service agent è progettato specificamente per
Compute Engine per svolgere le sue attività di servizio sul tuo progetto.
Si basa sul criterio IAM dell'agente di servizio concesso al tuo progettoGoogle Cloud . È anche l'agente di servizio
che Compute Engine utilizza per
accedere aaccount di serviziont gestito dall'utente sulle istanze VM. Questo account è di proprietà di Google, ma è specifico per il tuo progetto.
Questo service agent è nascosto nella
pagina IAM della
console, a meno che tu non selezioni Includi concessioni di ruoli fornite da Google.
Per impostazione predefinita, a questo agente di servizio viene concesso automaticamente il ruolo
compute.serviceAgent
sul tuo progetto.
Questo service agent viene eliminato solo quando elimini il progetto. Puoi modificare i ruoli concessi a questo service agent e revocare tutto l'accesso al tuo progetto da questo agente. La revoca o la modifica delle autorizzazioni per questo service agent impedisce a Compute Engine di accedere alle identità dei tuoi service account sulle tue VM e può causare interruzioni del software in esecuzione all'interno delle tue VM.
Per questi motivi, devi evitare il più possibile di modificare i ruoli per questo service agent.
Collegamento di un account di servizio a un'istanza
Per evitare di fornire a un'applicazione autorizzazioni in eccesso, ti consigliamo di creare un account di servizio gestito dall'utente, concedergli solo i ruoli necessari per il corretto funzionamento dell'applicazione e collegarlo all'istanza Compute Engine. Il codice può quindi utilizzare le credenziali predefinite dell'applicazione per l'autenticazione con le credenziali fornite dal account di servizio.
Puoi collegare un account di servizio a un'istanza Compute Engine quando crei l'istanza o in un secondo momento. A un'istanza può essere collegato un solo account di servizio alla volta. Se colleghi un account di servizio a un'istanza a cui è già collegato un account di servizio, quello precedente non viene più utilizzato dall'istanza.
Quando colleghi un account di servizio a un'istanza Compute Engine, devi anche assicurarti che gli ambiti impostati sull'istanza siano corretti. In caso contrario, la tua app potrebbe non essere in grado di accedere a tutte le API di cui ha bisogno. Per ulteriori informazioni, vedi Ambiti di accesso in questa pagina.
Per informazioni dettagliate su come collegare un account di servizio a un'istanza Compute Engine, consulta uno dei seguenti documenti:
- Crea una VM che utilizza un service account gestito dall'utente
- Modificare il service account collegato
Autorizzazione
Quando configuri un'istanza da eseguire come account di servizio, determini il livello di accesso del account di servizio in base ai ruoli IAM che concedi al service account. Se il account di servizio non ha ruoli IAM, non è possibile accedere a nessuna risorsa utilizzando ilaccount di serviziot su quell'istanza.
Inoltre, gli ambiti di accesso di un'istanza determinano gli ambiti OAuth predefiniti per le richieste effettuate tramite lagcloud CLId e le librerie client sull' istanza. Di conseguenza, gli ambiti di accesso limitano ulteriormente l'accesso ai metodi API durante l'autenticazione tramite OAuth. Tuttavia, non si estendono ad altri protocolli di autenticazione come gRPC.
La best practice consiste nell'impostare l'ambito di accesso cloud-platform
completo sull'istanza, quindi nel controllare l'accesso del account di servizio utilizzando i ruoli IAM.
In sostanza:
- IAM limita l'accesso alle API in base ai ruoli IAM concessi al account di servizio.
- Gli ambiti di accesso potrebbero limitare ulteriormente l'accesso ai metodi API.
Gli ambiti di accesso e i ruoli IAM sono descritti in dettaglio nelle sezioni seguenti.
Ruoli IAM
Devi concedere i ruoli IAM appropriati a un service account per consentire a questo account di servizio di accedere ai metodi API pertinenti.
Ad esempio, puoi concedere a un account di servizio i ruoli IAM per la gestione degli oggetti Cloud Storage o dei bucket Cloud Storage oppure entrambi, il che limita l'account alle autorizzazioni concesse da questi ruoli.
Quando concedi un ruolo IAM a un account di servizio, qualsiasi applicazione in esecuzione su un'istanza a cui è collegato ilaccount di serviziot avrà l'autorizzazione conferita da quel ruolo.
Alcune cose da ricordare:
Alcuni ruoli IAM sono in versione beta.
Se non esiste un ruolo predefinito per il livello di accesso che ti interessa, puoi creare e concedere ruoli personalizzati.
Devi impostare gli ambiti di accesso sull'istanza per autorizzare l'accesso.
Mentre il livello di accesso di un account di servizio è determinato dai ruoli concessi al account di servizio, gli ambiti di accesso di un'istanza determinano gli ambiti OAuth predefiniti per le richieste effettuate tramite la gcloud CLI e le librerie client sull'istanza. Di conseguenza, gli ambiti di accesso potrebbero limitare ulteriormente l'accesso ai metodi API durante l'autenticazione tramite OAuth.
Ambiti di accesso
Gli ambiti di accesso sono il metodo legacy per specificare l'autorizzazione per l'istanza VM. Definiscono gli ambiti OAuth predefiniti utilizzati nelle richieste dallgcloud CLI o dalle librerie client. Gli ambiti di accesso non si applicano per le chiamate effettuate utilizzando gRPC.
Gli ambiti di accesso si applicano in base alla singola VM e persistono solo per la durata della VM. Puoi impostare gli ambiti di accesso quando crei una VM o aggiornare l'ambito di accesso su una VM esistente.
In genere, la documentazione di ogni metodo API elenca gli ambiti
richiesti per quel metodo. Ad esempio, il metodo instances.insert
fornisce un elenco di ambiti validi nella sezione autorizzazione.
Gli ambiti di accesso non hanno effetto se non hai abilitato l'API correlata nel progetto a cui appartiene ilaccount di serviziot. Ad esempio, la concessione di un ambito di accesso per Cloud Storage su un'istanza di macchina virtuale consente all'istanza di chiamare l'API Cloud Storage solo se hai abilitato l'API Cloud Storage nel progetto.
Ambiti predefiniti
Quando crei una nuova istanza Compute Engine, questa viene configurata automaticamente con i seguenti ambiti di accesso:
- Accesso in sola lettura a Cloud Storage:
https://www.googleapis.com/auth/devstorage.read_only
- Accesso in scrittura per scrivere i log di Compute Engine:
https://www.googleapis.com/auth/logging.write
- Accesso in scrittura per pubblicare dati statistici nei tuoi progetti Google Cloud :
https://www.googleapis.com/auth/monitoring.write
- Accesso di sola lettura alle funzionalità di Service Management richieste per Google Cloud
Endpoints(Alpha):
https://www.googleapis.com/auth/service.management.readonly
- Accesso in lettura o scrittura alle funzionalità di Service Control richieste per Google Cloud
Endpoints(alpha):
https://www.googleapis.com/auth/servicecontrol
- L'accesso in scrittura a Cloud Trace consente a un'applicazione in esecuzione su una VM di scrivere i dati di traccia in un progetto.
https://www.googleapis.com/auth/trace.append
Best practice per gli ambiti
Sono disponibili molti
ambiti di accesso
tra cui scegliere, ma una best practice consiste nell'impostare l'ambito di accesso cloud-platform
, che è un ambito OAuth per i servizi Google Cloud , e poi controllare l'accesso del account di servizio concedendogli ruoli IAM.
https://www.googleapis.com/auth/cloud-platform
Esempi di ambiti
Seguendo la best practice per gli ambiti, se hai attivato l'ambito di accesso cloud-platform
su un'istanza e poi hai concesso i seguenti ruoli IAM predefiniti:
roles/compute.instanceAdmin.v1
roles/storage.objectViewer
roles/compute.networkAdmin
In questo caso, il account di servizio dispone solo delle autorizzazioni incluse in questi tre ruoli. Le applicazioni che rappresentano questo account di servizio non possono eseguire azioni al di fuori di questi ruoli nonostante l'ambito di accesso Google Cloud .
D'altra parte, se concedi un ambito più restrittivo all'istanza, ad esempio l'ambito di sola lettura di Cloud Storage (https://www.googleapis.com/auth/devstorage.read_only
) e imposti il ruolo di amministratore roles/storage.objectAdmin
per il service account, per impostazione predefinita le richieste dalla gcloud CLI e dalle librerie client non saranno in grado di gestire gli oggetti Cloud Storage da quell'istanza, anche se hai concesso al account di servizio il ruolo roles/storage.ObjectAdmin
. Questo perché l'ambito di sola lettura di Cloud Storage non autorizza l'istanza a manipolare i dati di Cloud Storage.
Ecco alcuni esempi di ambiti di accesso:
https://www.googleapis.com/auth/cloud-platform
. Visualizza e gestisci i tuoi dati nei Google Cloud servizi del Google Cloud progetto specificato.https://www.googleapis.com/auth/compute
. Accesso con controllo completo ai metodi di Compute Engine.https://www.googleapis.com/auth/compute.readonly
. Accesso in sola lettura ai metodi di Compute Engine.https://www.googleapis.com/auth/devstorage.read_only
. Accesso in sola lettura a Cloud Storage.https://www.googleapis.com/auth/logging.write
. Accesso in scrittura ai log di Compute Engine.
Passaggi successivi
- Esegui l'autenticazione dei workload utilizzando i service account.
- Scopri di più sulla creazione e la gestione dei service account.
- Scopri di più su IAM.
- Scopri altre opzioni di controllo dell'accesso a Compute Engine.
- Scopri come visualizzare i log di controllo per monitorare le modifiche apportate alle risorse Compute Engine.
- Se devi utilizzare un account di servizio di un altro progetto, leggi informazioni sulla configurazione dei service account per una risorsa in un altro progetto.