Account di servizio

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

In questa pagina viene descritto il funzionamento degli account di servizio con Compute Engine.

Per scoprire come creare e utilizzare gli account di servizio, consulta la documentazione Creazione e abilitazione di account di servizio per istanze.

Per scoprire le best practice per la creazione e la gestione degli account di servizio, consulta la documentazione Best practice per lavorare con 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 gratuitamente

Che 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 calcolo anziché da una persona. Gli account di servizio sono gestiti da Identity and Access Management (IAM).

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 Compute Engine per fornire le credenziali alle applicazioni in esecuzione sull'istanza. Le credenziali vengono utilizzate dall'applicazione per l'autenticazione nelle API Google Cloud e l'autorizzazione ad accedere alle risorse Google Cloud. A una istanza possono essere associati solo account di servizio gestiti dall'utente e un'istanza può avere un solo account di servizio associato. 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 di firewall che consentono o negano il traffico da e verso le istanze in base all'account di servizio che associ a ciascuna istanza.

Come viene determinata l'autorizzazione

L'autorizzazione fornita alle applicazioni in hosting su un'istanza di Compute Engine è limitata da due configurazioni distinte: i ruoli concessi all'account di servizio associato 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, 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 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 eseguire l'autenticazione nell'API Cloud Storage senza incorporare chiavi segreti 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 sulle autorizzazioni, vedi Autorizzazione in questa pagina.

Account di servizio gestiti dall'utente

Gli account di servizio gestiti dall'utente includono nuovi account di servizio che hai creato automaticamente 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 i ruoli IAM dell'account e configura 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 la pagina Creare e abilitare account di servizio per le istanze.

Account di servizio predefinito Compute Engine

I nuovi progetti che hanno attivato l'API Compute Engine hanno un account di servizio predefinito di Compute Engine, che ha il seguente indirizzo email:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

Google crea l'account di servizio predefinito di Compute Engine e lo aggiunge automaticamente al progetto, ma hai il controllo completo sull'account.

L'account di servizio predefinito di Compute Engine viene creato con il ruolo Editor di base IAM, ma puoi modificare i ruoli dell'account di servizio per controllare l'accesso dell'account di servizio alle API di Google.

Puoi disattivare o eliminare questo account di servizio dal progetto, ma ciò potrebbe causare il mancato completamento delle 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, consulta la sezione Creazione e gestione degli account di servizio.

In breve, l'account di servizio predefinito di Compute Engine ha i seguenti attributi:

  • Viene creato automaticamente, con un nome e un indirizzo email generati automaticamente, e vengono aggiunti al tuo progetto quando abiliti l'API Compute Engine.
  • Consentito automaticamente il ruolo Editor di base IAM, se non hai disattivato questo comportamento.
  • Associato per impostazione predefinita a tutte le istanze create da Google Cloud CLI e dalla console Google Cloud. Puoi ignorare questo comportamento specificando un account di servizio diverso quando crei l'istanza oppure specificando esplicitamente che all'istanza non è associato alcun account di servizio.

Account di servizio gestiti da Google

Questi account di servizio (noti anche 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 certo 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 con Compute Engine vengono forniti con un agente di servizio delle API Google, che può essere identificato tramite l'email:

PROJECT_NUMBER@cloudservices.gserviceaccount.com

Questo account di servizio è stato espressamente progettato per eseguire processi interni di Google per tuo conto. L'account è di proprietà di Google e non è elencato nella sezione Account di servizio di Google Cloud Console. Per impostazione predefinita, all'account viene concesso automaticamente il ruolo Editor di progetto nel progetto ed è elencato nella sezione IAM di Google Cloud Console. Questo account di servizio viene eliminato solo quando il progetto viene eliminato. Tuttavia, puoi cambiare i ruoli concessi a questo account, compresa la revoca di tutti gli accessi al progetto.

Alcune risorse si basano su questo account di servizio e sulle autorizzazioni dell'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 le modifichi in modo da non concedere autorizzazioni per creare le istanze, i gruppi di istanze gestite e la scalabilità automatica smetteranno di funzionare.

Per questi motivi, non modificare i ruoli di questo account di servizio a meno che un consiglio del ruolo non suggerisca espressamente 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 eseguire le attività di servizio sul tuo progetto. Si basa sul criterio IAM dell'agente di servizio concesso sul tuo 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. Google possiede questo account, ma è specifico per il tuo progetto. Questo account è nascosto nella pagina IAM nella 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 nel progetto.

Questo account di servizio viene eliminato solo quando elimini il progetto. Puoi modificare i ruoli concessi a questo account e revocare l'accesso al tuo progetto all'account stesso. La revoca o la modifica delle autorizzazioni per questo account di servizio impedisce a Compute Engine di accedere alle identità dei tuoi account di servizio sulle VM e può causare interruzioni del software in esecuzione all'interno delle VM.

Per questi motivi, dovresti evitare di modificare il più possibile 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, concedergli solo i ruoli di cui la tua applicazione ha bisogno per funzionare correttamente e collegarlo alla tua istanza Compute Engine. Il tuo codice può quindi utilizzare le credenziali predefinite dell'applicazione per eseguire l'autenticazione con le credenziali fornite dall'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 è possibile collegare un solo account di servizio alla volta; se colleghi un account di servizio a un'istanza a cui è già associato un account di servizio, l'account di servizio precedente non è più utilizzato da quell'istanza.

Quando colleghi un account di servizio a un'istanza Compute Engine, devi anche assicurarti che gli ambiti impostati nell'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 la sezione Ambiti di accesso in questa pagina.

Per informazioni dettagliate sul collegamento di un account di servizio a un'istanza di Compute Engine, consulta Creazione e abilitazione di account di servizio per le istanze.

Autorizzazione

Quando configuri un'istanza da eseguire come account di servizio, puoi determinare il livello di accesso all'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 tale istanza.

Inoltre, gli ambiti di accesso di un'istanza determinano gli ambiti OAuth predefiniti per le richieste effettuate tramite l'interfaccia a riga di comando gcloud 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. Tuttavia, non si estendono ad altri protocolli di autenticazione come gRPC.

La best practice è impostare l'ambito di accesso cloud-platform completo per l'istanza e 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 possono limitare ulteriormente l'accesso ai metodi dell'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 consentire all'account di servizio di accedere a 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 per entrambi, che limita l'account alle autorizzazioni concesse da tali ruoli.

Quando concedi un ruolo IAM a un account di servizio, a qualsiasi applicazione in esecuzione su un'istanza a cui è associato quell'account di servizio, l'autorizzazione viene conferita da tale ruolo.

Alcune cose da ricordare:

  • Alcuni ruoli IAM sono in versione beta.

    Se non esiste un ruolo predefinito per il livello di accesso desiderato, 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 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 comando gcloud e le librerie client dell'istanza. Di conseguenza, gli ambiti di accesso potenzialmente limitano 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. Definiscono gli ambiti OAuth predefiniti utilizzati nelle richieste dall'interfaccia a riga di comando gcloud 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 singola istanza. Puoi impostare gli ambiti di accesso quando crei un'istanza e gli ambiti di accesso rimangono attivi solo per la durata dell'istanza.

In genere, la documentazione di ciascun 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 sul 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 di 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 i dati delle metriche nei progetti Google Cloud:
    https://www.googleapis.com/auth/monitoring.write
  • Accesso in 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 controllo del servizio richieste per gli endpoint di 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

Ci sono molti ambiti di accesso disponibili tra cui scegliere, ma una best practice consiste nell'impostare l'cloud-platform ambito di accesso, che è un ambito OAuth per la maggior parte dei servizi Google Cloud, e quindi controllare l'accesso dell'account di servizio concedendogli ruoli IAM.

https://www.googleapis.com/auth/cloud-platform

Esempi di ambiti

Seguendo la best practice degli 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 impersonano tale account di servizio non possono eseguire azioni esterne a questi ruoli, nonostante l'ambito di accesso a Google Cloud.

D'altra parte, se concedi un ambito più restrittivo all'istanza, come l'ambito di sola lettura Cloud Storage (https://www.googleapis.com/auth/devstorage.read_only) e imposti il ruolo di amministratore roles/storage.objectAdmin sull'account di servizio, per impostazione predefinita le richieste dell'interfaccia a riga di comando gcloud e delle librerie client non saranno in grado di gestire gli oggetti di Cloud Storage da tale 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.

Esempi di ambiti di accesso sono i seguenti:

  • https://www.googleapis.com/auth/cloud-platform. Visualizza e gestisci i tuoi dati nella maggior parte dei servizi Google Cloud nel progetto Google Cloud specificato.
  • https://www.googleapis.com/auth/compute. Controllo completo dell'accesso 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