Questa pagina descrive il funzionamento dei service account con Compute Engine.
Per informazioni dettagliate sul collegamento di un service account a un'istanza di macchina virtuale (VM), consulta uno dei seguenti documenti:
- Per configurare il service account durante la creazione della VM, consulta Crea una VM che utilizza un service account gestito dall'utente.
- Per configurare il service account su una VM esistente, consulta Modifica il service account collegato.
Per scoprire le best practice per la creazione e la gestione dei service account, consulta la documentazione relativa alle 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 service account?
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 VM, tieni presente quanto segue:
- Puoi collegare lo stesso service account a più VM, ma una singola VM può avere un solo service account collegato.
- Se colleghi lo stesso service account a più VM, eventuali modifiche successive apportate al service account influiscono su tutte le VM che lo utilizzano. Sono incluse eventuali modifiche apportate ai ruoli IAM concessi al service account. Ad esempio, se rimuovi un ruolo, tutte le VM che utilizzano il service account perdono le autorizzazioni concesse da quel ruolo.
In che modo Compute Engine utilizza i service account
Compute Engine utilizza due tipi di service account:
Un service account gestito dall'utente può essere collegato a un'istanza Compute Engine per fornire le credenziali alle applicazioni in esecuzione nell'istanza. Queste credenziali vengono utilizzate dall'applicazione per l'autenticazione alle API Google Cloud e per l'autorizzazione per accedere alle risorse Google Cloud . Solo i service account gestiti dall'utente possono essere collegati a un'istanza e un'istanza può avere un solo service account collegato. Puoi modificare il service account 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 al service account collegato a ogni istanza.
Come viene determinata l'autorizzazione
L'autorizzazione fornita alle applicazioni ospitate su un'istanza Compute Engine è limitata da due configurazioni distinte: 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 nell'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 service account all'istanza. Puoi
quindi assegnare al service account i ruoli IAM (Identity and Access Management) per concedere
all'app l'accesso alle risorse appropriate. L'app utilizza le credenziali del
service account per autenticarsi nell'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 nel
service account per accedere alle risorse.
Per ulteriori informazioni sull'autorizzazione, consulta Autorizzazione
in questa pagina.
Service account gestiti dall'utente
I service account gestiti dall'utente includono i nuovi service account creati esplicitamente e il service account predefinito di Compute Engine.
Nuovi service account
Puoi creare e gestire i tuoi service account utilizzando IAM. Dopo aver creato un account, assegni i ruoli IAM all'account e configuri le istanze in modo che vengano eseguite come service account. Le app in esecuzione sulle istanze con il service account collegato possono utilizzare le credenziali dell'account per effettuare richieste ad altre API Google.
Per creare e configurare un nuovo service account, consulta Crea una VM che utilizza un service account gestito dall'utente.
Service account predefinito di Compute Engine
I nuovi progetti che hanno abilitato l'API Compute Engine dispongono di un service account predefinito di Compute Engine con l'indirizzo email seguente:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Il service account predefinito di Compute Engine ha i seguenti attributi:
- Viene creato automaticamente, con un nome e un indirizzo email generati automaticamente, e aggiunto al progetto quando attivi l'API Compute Engine. Hai il controllo completo dell'account.
- È collegato per impostazione predefinita a tutte le VM che hai creato utilizzando Google Cloud CLI o la console Google Cloud . Puoi eseguire l'override di questo comportamento specificando un service account diverso quando crei la VM o specificando esplicitamente che nessun service account deve essere collegato alla VM.
-
A seconda della configurazione della policy dell'organizzazione, al service account predefinito potrebbe essere assegnato automaticamente il ruolo Editor nel progetto. Ti consigliamo vivamente di disattivare la concessione automatica dei ruoli forzando l'applicazione del vincolo
iam.automaticIamGrantsForDefaultServiceAccounts
della policy dell'organizzazione. Se hai creato la tua organizzazione dopo il 3 maggio 2024, questo vincolo viene imposto per impostazione predefinita.Se disattivi la concessione automatica dei ruoli, devi decidere quali ruoli concedere ai service account predefiniti, quindi concedere personalmente questi ruoli.
Se il service account predefinito dispone già del ruolo Editor, ti consigliamo di sostituire il ruolo Editor con ruoli meno permissivi.Per modificare in sicurezza i ruoli del service account, utilizza Policy Simulator per vedere l'impatto della modifica, quindi concedi e revoca i ruoli appropriati.
Puoi disattivare o eliminare questo service account dal progetto, ma questa operazione potrebbe causare l'errore di eventuali applicazioni che dipendono dalle credenziali del service account. Se elimini per errore il service account predefinito di Compute Engine, puoi provare a recuperarlo entro 30 giorni. Per ulteriori informazioni, consulta Elimina e annulla l'eliminazione dei service account.
Se il service account predefinito di Compute Engine è stato eliminato più di 30 giorni fa, puoi provare a recuperarlo seguendo il processo descritto in Risoluzione dei problemi relativi ai service account predefiniti.
Agenti di servizio
Gli agenti di servizio vengono creati e gestiti da Google Cloud e assegnati automaticamente al tuo progetto. Questi account rappresentano diversi servizi Google Cloud e ogni account solitamente ha un determinato livello di accesso alle tue risorse Google Cloud .
Non puoi collegare agenti di servizio a un'istanza di Compute Engine.
Agente di servizio API di Google
A parte il service account predefinito, tutti i progetti abilitati con Compute Engine includono un agente di servizio API di Google, identificabile tramite l'indirizzo email:
PROJECT_NUMBER@cloudservices.gserviceaccount.com
Questo agente di servizio è progettato appositamente 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 agente di servizio viene concesso automaticamente il ruolo Editor di progetto nel progetto ed è elencato nella sezione IAM della console Google Cloud . Questo agente di servizio viene eliminato solo quando viene eliminato il progetto. Tuttavia, puoi modificare i ruoli concessi a questo account, inclusa la revoca di tutto l'accesso al tuo progetto.
Alcune risorse si basano sulle autorizzazioni come editor predefinite concesse a questo agente di servizio. 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 agente di servizio o modifichi le autorizzazioni in modo da non concedere l'autorizzazione per creare istanze, i gruppi di istanze gestite e la scalabilità automatica non funzioneranno più.
Per questi motivi, non dovresti modificare i ruoli di questo agente di servizio, a meno che un suggerimento per i ruoli non ti consigli esplicitamente di farlo.
Agente di servizio Compute Engine
Tutti i progetti che hanno attivato l'API Compute Engine dispongono di un agente di servizio Compute Engine con l'indirizzo email seguente:
service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
Questo agente di servizio è progettato appositamente per
Compute Engine per svolgere le sue funzioni di servizio nel progetto.
Si basa sulla policy IAM dell'agente di servizio concessa al tuo
progettoGoogle Cloud . È anche l'agente di servizio
utilizzato da Compute Engine per accedere al service account gestito dall'utente sulle istanze
VM. Google è il proprietario di questo account, ma è specifico per il tuo progetto.
Questo agente di servizio non è visibile nella
pagina IAM della
console, a meno che non selezioni Includi concessioni di ruoli fornite da Google.
Per impostazione predefinita, a questo agente di servizio viene assegnato automaticamente il
ruolo compute.serviceAgent
nel progetto.
Questo agente di servizio viene eliminato solo quando elimini il progetto. Puoi modificare i ruoli concessi a questo agente di servizio e revocare tutto l'accesso al tuo progetto da parte di questo agente. La revoca o la modifica delle autorizzazioni per questo agente di servizio impedisce a Compute Engine di accedere alle identità dei tuoi service account sulle VM e può causare interruzioni del software in esecuzione all'interno delle VM.
Per questi motivi, ti consigliamo di evitare di modificare i ruoli di questo agente di servizio il più possibile.
Collegamento di un service account a un'istanza
Per evitare di fornire a un'applicazione autorizzazioni in eccesso, ti consigliamo di creare un service account gestito dall'utente, di concedergli solo i ruoli di cui la tua applicazione ha bisogno per funzionare correttamente e di collegarlo all'istanza di Compute Engine. Il codice può quindi utilizzare Credenziali predefinite dell'applicazione per l'autenticazione con le credenziali fornite dal service account.
Puoi collegare un service account a un'istanza di Compute Engine quando la crei o in un secondo momento. È possibile collegare un solo service account a un'istanza alla volta. Se colleghi un service account a un'istanza che ha già un service account collegato, il service account precedente non viene più utilizzato da quell'istanza.
Quando colleghi un service account a un'istanza di 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, consulta Ambiti di accesso in questa pagina.
Per informazioni dettagliate sul collegamento di un service account a un'istanza di Compute Engine, consulta uno dei seguenti documenti:
- Crea una VM che utilizza un service account gestito dall'utente
- Modifica il service account collegato
Autorizzazione
Quando configuri un'istanza da eseguire come service account, puoi determinare il livello di accesso del service account in base ai ruoli IAM che concedi al service account. Se il service account non ha ruoli IAM, non è possibile accedere alle risorse utilizzando il service account nell'istanza.
Inoltre, gli ambiti di accesso di un'istanza determinano gli ambiti OAuth predefiniti per le richieste effettuate tramite gcloud CLI e le librerie client sull'istanza. Di conseguenza, gli ambiti di accesso possono limitare ulteriormente l'accesso ai metodi dell'API durante l'autenticazione tramite OAuth. Tuttavia, non si applicano 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 service account utilizzando i ruoli
IAM.
In sostanza:
- IAM limita l'accesso alle API in base ai ruoli IAM concessi al service account.
- Gli ambiti di accesso possono limitare ulteriormente l'accesso ai metodi dell'API.
Sia gli ambiti di accesso sia 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 service account di accedere ai metodi dell'API pertinenti.
Ad esempio, puoi concedere a un service account i ruoli IAM per la gestione degli oggetti Cloud Storage o per la gestione dei bucket Cloud Storage o per entrambi, il che limita l'account alle autorizzazioni concesse da questi ruoli.
Quando concedi un ruolo IAM a un service account, qualsiasi applicazione in esecuzione su un'istanza a cui è associato il service account 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.
Per autorizzare l'accesso, devi impostare gli ambiti di accesso sull'istanza.
Sebbene il livello di accesso di un service account sia determinato dai ruoli concessi al service account, gli ambiti di accesso di un'istanza determinano gli ambiti OAuth predefiniti per le richieste effettuate tramite gcloud CLI e le librerie client nell'istanza. Di conseguenza, gli ambiti di accesso possono limitare ulteriormente l'accesso ai metodi dell'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 da gcloud 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 durante la creazione di una VM o aggiornare l'ambito di accesso su una VM esistente.
In genere, la documentazione di ogni metodo dell'API elenca gli ambiti
richiesti per quel metodo. Ad esempio, il metodo instances.insert
fornisce un
elenco di ambiti validi nella
sezione relativa
all'autorizzazione.
Gli ambiti di accesso non hanno effetto se non hai abilitato l'API correlata nel progetto a cui appartiene il service account. 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 di Compute Engine, viene configurata automaticamente con i seguenti ambiti di accesso:
- Accesso di 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 i dati delle metriche nei tuoi progetti Google Cloud :
https://www.googleapis.com/auth/monitoring.write
- Accesso di sola lettura alle funzionalità di Service Management richieste per gli endpoint Google Cloud
(alpha):
https://www.googleapis.com/auth/service.management.readonly
- Accesso in lettura o scrittura alle funzionalità di Service Control richieste per gli endpoint Google Cloud
(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
Esistono 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 , quindi
controllare l'accesso del service account concedendogli i 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
Il service account avrà solo le autorizzazioni incluse in questi tre ruoli. Le applicazioni che simulano il service account 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
sul service
account, per impostazione predefinita le richieste di gcloud CLI e delle
librerie client non potranno gestire gli oggetti Cloud Storage da
quell'istanza, anche se hai concesso al service account il
ruolo roles/storage.ObjectAdmin
. Questo accade 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 tra i servizi Google Cloud nel progettoGoogle Cloud specificato.https://www.googleapis.com/auth/compute
.Accesso in 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
- Autentica i workload utilizzando i service account.
- Ulteriori informazioni sulla creazione e la gestione di service account.
- Ulteriori informazioni su IAM.
- Scopri altre opzioni di controllo dell'accesso di Compute Engine.
- Scopri come visualizzare gli audit log per monitorare la modifica delle risorse di Compute Engine.
- Se devi utilizzare un service account di un altro progetto, consulta la sezione sulla configurazione dei service account per una risorsa in un altro progetto.