In questa pagina viene descritto il funzionamento degli account di servizio con Compute Engine.
Per informazioni dettagliate sul collegamento di un account di servizio a un'istanza di macchina virtuale (VM), consulta uno dei seguenti documenti:
- Per configurare l'account di servizio durante la creazione della VM, consulta Creare una VM che utilizza un account di servizio gestito dall'utente.
- Per configurare un account di servizio su una VM esistente, consulta Cambiare l'account di servizio collegato.
Per conoscere le best practice per la creazione e la gestione degli account di servizio, consulta la documentazione sulle best practice per l'utilizzo degli account di servizio.
Provalo
Se non hai mai utilizzato Google Cloud, crea un account per valutare le prestazioni di Compute Engine in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
Prova Compute Engine gratuitamenteChe cos'è un account di servizio?
Un account di servizio è un tipo speciale di account utilizzato da un'applicazione o da un carico di lavoro di computing, anziché da una persona. Gli account di servizio sono gestiti da Identity and Access Management (IAM).
Quando utilizzi gli account di servizio con le VM, tieni presente quanto segue:
- Puoi collegare lo stesso account di servizio a più VM, ma a una singola VM può essere collegato un solo account di servizio.
- Se colleghi lo stesso account di servizio a più VM, eventuali modifiche successive apportate all'account di servizio interesseranno tutte le VM che utilizzano l'account di servizio. Sono incluse le modifiche apportate ai ruoli IAM concessi all'account di servizio. Ad esempio, se rimuovi un ruolo, tutte le VM che utilizzano l'account di servizio perdono le autorizzazioni concesse da quel ruolo.
In che modo Compute Engine utilizza gli account di servizio
Compute Engine utilizza due tipi di account di servizio:
Un account di servizio gestito dall'utente può essere associato a un'istanza di Compute Engine per fornire le credenziali alle applicazioni in esecuzione nell'istanza. Queste credenziali vengono utilizzate dall'applicazione per l'autenticazione nelle API Google Cloud e l'autorizzazione per accedere alle risorse Google Cloud. A un'istanza possono essere collegati solo gli account di servizio gestiti dall'utente e un'istanza può avere un solo account di servizio collegato. Puoi modificare l'account di servizio collegato a un'istanza al momento della creazione o in un secondo momento.
Gli account di servizio gestiti da Google 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 di Compute Engine è limitata da due configurazioni separate: i ruoli concessi all'account di servizio associato e gli ambiti di accesso che hai impostato nell'istanza. Entrambe queste configurazioni devono consentire l'accesso prima che l'applicazione in esecuzione sull'istanza possa accedere a una risorsa.
Supponi di avere un'app che legge e scrive file in Cloud Storage, deve prima autenticarsi nell'API Cloud Storage. Puoi creare un'istanza con l'ambito cloud-platform
e collegare un account di servizio all'istanza. Puoi quindi concedere i ruoli Identity and Access Management (IAM) all'account di servizio per concedere alla tua app l'accesso alle risorse appropriate. L'app utilizza le credenziali dell'account di servizio per l'autenticazione nell'API Cloud Storage senza incorporare chiavi segrete o credenziali utente nell'istanza, nell'immagine o nel codice dell'app. L'app utilizza anche l'autorizzazione fornita dai ruoli IAM nell'account di servizio per accedere alle risorse.
Per ulteriori informazioni sull'autorizzazione, vedere Autorizzazione in questa pagina.
Account di servizio gestiti dall'utente
Gli account di servizio gestiti dall'utente includono i nuovi account di servizio creati esplicitamente e l'account di servizio predefinito di Compute Engine.
Nuovi account di servizio
Puoi creare e gestire i tuoi account di servizio utilizzando IAM. Dopo aver creato un account, concedi all'account i ruoli IAM e configuri le istanze in modo che vengano eseguite come account di servizio. Le app in esecuzione su istanze a cui è collegato un account di servizio possono utilizzare le credenziali dell'account per effettuare richieste ad altre API di Google.
Per creare e configurare un nuovo account di servizio, consulta Creare una VM che utilizza un account di servizio gestito dall'utente.
Account di servizio predefinito Compute Engine
I nuovi progetti che hanno abilitato l'API Compute Engine hanno un account di servizio predefinito Compute Engine, che ha il seguente indirizzo email:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
L'account di servizio predefinito di Compute Engine ha i seguenti attributi:
- Viene creata automaticamente, con un nome e un indirizzo email generati automaticamente e aggiunta al tuo progetto quando abiliti l'API Compute Engine. Hai il controllo completo dell'account.
- concesso automaticamente il ruolo IAM Editor di base, se non hai disabilitato questo comportamento. Puoi modificare i ruoli dell'account di servizio per controllarne l'accesso alle API di Google.
- Associato 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 account di servizio diverso quando crei la VM oppure specificando esplicitamente che alla VM non può essere collegato nessun account di servizio.
Puoi disabilitare o eliminare questo account di servizio dal progetto, ma questa azione potrebbe causare errori nelle applicazioni che dipendono dalle credenziali dell'account di servizio. Se elimini accidentalmente l'account di servizio predefinito di Compute Engine, puoi provare a recuperarlo entro 30 giorni. Per ulteriori informazioni, vedi Eliminare e annullare l'eliminazione degli 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 Risolvere i problemi relativi agli account di servizio predefiniti.
Account di servizio gestiti da Google
Questi account di servizio (a volte noti come agenti di servizio) vengono creati e gestiti da Google e assegnati automaticamente al tuo progetto. Questi account rappresentano servizi Google diversi e ogni account ha un determinato livello di accesso al tuo progetto Google Cloud.
Non puoi collegare account di servizio gestiti da Google a un'istanza di Compute Engine.
Agente di servizio API di Google
A parte l'account di servizio predefinito, tutti i progetti abilitati in Compute Engine vengono forniti con un agente di servizio API di Google, identificabile tramite l'indirizzo email:
PROJECT_NUMBER@cloudservices.gserviceaccount.com
Questo account di servizio è progettato specificamente per eseguire processi interni di Google per tuo conto. L'account è di proprietà di Google e non è elencato nella sezione Account di servizio della console Google Cloud. Per impostazione predefinita, all'account viene concesso automaticamente il ruolo di Editor di progetto sul progetto ed è elencato nella sezione IAM della console Google Cloud. Questo account di servizio 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 progetto.
Alcune risorse si basano su questo account di servizio e sulle autorizzazioni di editor predefinite concesse all'account di servizio. Ad esempio, i gruppi di istanze gestite e la scalabilità automatica utilizzano le credenziali di questo account per creare, eliminare e gestire le istanze. Se revochi le autorizzazioni all'account di servizio o modifichi le autorizzazioni in modo che non concedano le autorizzazioni per la creazione di istanze, i gruppi di istanze gestite e la scalabilità automatica smetteranno di funzionare.
Per questi motivi, non devi modificare i ruoli di questo account di servizio a meno che un consiglio sui ruoli suggerisca esplicitamente di modificarli.
Agente di servizio Compute Engine
Tutti i progetti che hanno abilitato 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 account di servizio è progettato specificamente per consentire a Compute Engine di svolgere le proprie attività di servizio sul tuo progetto.
Si basa sul criterio IAM dell'agente di servizio concesso nel progetto Google Cloud. È anche l'account di servizio utilizzato da Compute Engine per accedere all'account di servizio di proprietà del cliente nelle istanze VM. L'account è di proprietà di Google, ma è specifico per il tuo progetto. Questo account è nascosto dalla pagina IAM della console, a meno che non selezioni Includi concessioni di ruoli fornite da Google.
Per impostazione predefinita, all'account viene concesso automaticamente il ruolo compute.serviceAgent
sul progetto.
Questo account di servizio viene eliminato solo quando elimini il progetto. Puoi modificare i ruoli concessi a questo account e revocare tutti gli accessi al tuo progetto. La revoca o la modifica delle autorizzazioni per questo account di servizio impedisce a Compute Engine di accedere alle identità degli account di servizio sulle tue VM e può causare interruzioni del software in esecuzione all'interno delle VM.
Per questi motivi, dovresti evitare il più possibile di modificare i ruoli per questo account di servizio.
Collegamento di un account di servizio a un'istanza
Per evitare di fornire un'applicazione con autorizzazioni in eccesso, ti consigliamo di creare un account di servizio gestito dall'utente, di concedergli solo i ruoli necessari per il corretto funzionamento dell'applicazione e di collegarlo all'istanza Compute Engine. Il codice può quindi utilizzare le credenziali predefinite dell'applicazione per l'autenticazione con le credenziali fornite dall'account di servizio.
Puoi collegare un account di servizio a un'istanza Compute Engine al momento della creazione dell'istanza o in un secondo momento. A un'istanza può essere collegato un solo account di servizio alla volta. Se lo colleghi a un'istanza a cui è già collegato, l'account di servizio precedente non viene più utilizzato dall'istanza.
Quando colleghi un account di servizio a un'istanza di Compute Engine, devi anche assicurarti che gli ambiti impostati sull'istanza siano corretti. In caso contrario, l'app potrebbe non essere in grado di accedere a tutte le API necessarie. Per ulteriori informazioni, consulta Ambiti di accesso in questa pagina.
Per informazioni dettagliate su come collegare un account di servizio a un'istanza Compute Engine, esamina uno dei seguenti documenti:
- Crea una VM che utilizza un account di servizio gestito dall'utente
- Cambiare l'account di servizio collegato
Autorizzazione
Quando configuri un'istanza in modo che venga eseguita come account di servizio, determini il livello di accesso dell'account di servizio in base ai ruoli IAM che concedi all'account di servizio. Se l'account di servizio non ha ruoli IAM, non è possibile accedere alle risorse utilizzando l'account di servizio su quell'istanza.
Inoltre, gli ambiti di accesso di un'istanza determinano gli ambiti OAuth predefiniti per le richieste effettuate tramite l'interfaccia alla gcloud CLI e le librerie client nell'istanza. Di conseguenza, gli ambiti di accesso potrebbero limitare 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 controllare l'accesso dell'account di servizio utilizzando i ruoli IAM.
In pratica:
- IAM limita l'accesso alle API in base ai ruoli IAM concessi all'account di servizio.
- Gli ambiti di accesso potrebbero limitare ulteriormente l'accesso ai metodi API.
Sia gli ambiti di accesso che i ruoli IAM sono descritti in dettaglio nelle sezioni seguenti.
Ruoli IAM
Devi concedere i ruoli IAM appropriati a un account di servizio per consentirgli 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, per la gestione dei bucket Cloud Storage o entrambi, limitando l'account alle autorizzazioni concesse da tali ruoli.
Quando concedi un ruolo IAM a un account di servizio, qualsiasi applicazione in esecuzione su un'istanza a cui è collegato l'account di servizio riceverà 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 vuoi, puoi creare e concedere ruoli personalizzati.
Per autorizzare l'accesso, devi impostare gli ambiti di accesso nell'istanza.
Mentre il livello di accesso di un account di servizio è determinato dai ruoli concessi all'account di servizio, gli ambiti di accesso di un'istanza determinano gli ambiti OAuth predefiniti per le richieste effettuate tramite l'interfaccia a riga di gcloud CLI e le librerie client sull'istanza. Di conseguenza, gli ambiti di accesso limitano ulteriormente l'accesso ai metodi API durante l'autenticazione tramite OAuth.
Ambiti di accesso
Gli ambiti di accesso sono il metodo precedente per specificare l'autorizzazione per l'istanza. Definiscono gli ambiti OAuth predefiniti utilizzati nelle richieste dallgcloud CLI o dalle librerie client. Gli ambiti di accesso non si applicano alle chiamate effettuate utilizzando gRPC.
Gli ambiti di accesso si applicano a livello di istanza. Gli ambiti di accesso vengono impostati durante la creazione di un'istanza e gli ambiti di accesso vengono mantenuti solo per la durata dell'istanza.
In genere, la documentazione di ciascun metodo API elenca gli ambiti necessari per quel metodo. Ad esempio, il metodo instances.insert
fornisce un elenco degli ambiti validi nella sezione autorizzazione.
Gli ambiti di accesso non hanno effetto se non hai abilitato l'API correlata nel progetto a cui appartiene l'account di servizio. 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 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 dati delle metriche nei tuoi progetti Google Cloud:
https://www.googleapis.com/auth/monitoring.write
- Accesso di sola lettura alle funzionalità di gestione dei servizi richieste per gli endpoint Google Cloud(alpha):
https://www.googleapis.com/auth/service.management.readonly
- Accesso in lettura/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 dati di traccia in un progetto.
https://www.googleapis.com/auth/trace.append
Best practice per gli ambiti
Puoi scegliere tra molti ambiti di accesso, ma una best practice consiste nell'impostare l'ambito di accesso cloud-platform
, che è un ambito OAuth per i servizi Google Cloud, per poi controllare l'accesso dell'account di servizio concedendo i ruoli IAM.
https://www.googleapis.com/auth/cloud-platform
Esempi di ambiti
Segui la best practice per gli ambiti, se hai abilitato 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
L'account di servizio ha solo le autorizzazioni incluse in quei tre ruoli. Le applicazioni che si spacciano per tale account di servizio non possono eseguire azioni al di fuori di questi ruoli nonostante l'ambito di accesso a Google Cloud.
Se invece concedi all'istanza un ambito più restrittivo, 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
nell'account di servizio, per impostazione predefinita le richieste dall'interfaccia a riga di gcloud CLI e dalle librerie client non saranno in grado di gestire gli oggetti Cloud Storage da quell'istanza, anche se hai concesso all'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 servizi Google Cloud nel progetto Google Cloud specificato.https://www.googleapis.com/auth/compute
. Accesso 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 carichi di lavoro utilizzando account di servizio.
- Scopri di più su come creare e gestire gli account di servizio.
- Scopri di più su IAM.
- Scopri di più sulle altre opzioni di controllo dell'accesso di Compute Engine.
- Scopri come visualizzare gli audit log per monitorare le modifiche alle risorse Compute Engine.
- Se devi utilizzare un account di servizio di un altro progetto, scopri come configurare gli account di servizio per una risorsa in un progetto diverso.