Account di servizio


Questa pagina descrive il funzionamento degli account di servizio con Compute Engine.

Per informazioni dettagliate sull'associazione di un account di servizio a un'istanza di macchina virtuale (VM), consulta uno dei seguenti documenti:

Per scoprire le best practice per la creazione e la gestione degli account di servizio, consulta la documentazione relativa alle best practice per l'utilizzo degli account di servizio.

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 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).

Quando utilizzi gli account di servizio con le VM, tieni presente quanto segue:

  • Puoi collegare lo stesso account di servizio a più VM, ma una singola VM può avere un solo account di servizio collegato.
  • Se colleghi lo stesso account di servizio a più VM, eventuali modifiche successive apportate all'account di servizio influiscono su tutte le VM che lo utilizzano. Sono incluse eventuali 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 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 l'autorizzazione per accedere alle risorse Google Cloud. Solo gli account di servizio gestiti dall'utente possono essere collegati a un'istanza e un'istanza può avere un solo account di servizio collegato. Puoi modificare l'account di servizio associato 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 del firewall che consentono o rifiutano il traffico da e verso le istanze in base all'account di servizio associato 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 all'account di servizio 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 legga e scriva file su Cloud Storage. Per prima cosa, deve 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 assegnare all'account di servizio i ruoli IAM (Identity and Access Management) per concedere all'app l'accesso alle risorse appropriate. L'app utilizza le credenziali dell'account di servizio 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 nell'account di servizio per accedere alle risorse. Per ulteriori informazioni sull'autorizzazione, consulta 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, assegna i ruoli IAM all'account e configura le istanze in modo che vengano eseguite come account di servizio. Le app in esecuzione sulle istanze con l'account di servizio collegato possono utilizzare le credenziali dell'account per inviare richieste ad altre API 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 dispongono di un account di servizio predefinito Compute Engine con l'indirizzo email seguente:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

L'account di servizio predefinito Compute Engine ha i seguenti parametri:

  • Creato automaticamente, con nome e 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 create utilizzando l'interfaccia a riga di comando Google Cloud o la console Google Cloud. Puoi ignorare questo comportamento specificando un account di servizio diverso quando crei la VM o specificando esplicitamente che nessun account di servizio deve essere associato alla VM.
  • A seconda della configurazione delle norme dell'organizzazione, all'account di servizio predefinito potrebbe essere assegnato automaticamente il ruolo Editor nel progetto. Ti consigliamo vivamente di disattivare la concessione automatica dei ruoli applicando il vincolo iam.automaticIamGrantsForDefaultServiceAccounts delle norme 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, quindi concedere personalmente questi ruoli.

    Se l'account di servizio predefinito dispone già del ruolo Editor, ti consigliamo di sostituire il ruolo Editor con ruoli meno permissivi.Per modificare in sicurezza i ruoli dell'account di servizio, utilizza Policy Simulator per vedere l'impatto della modifica, quindi concedi e revoca i ruoli appropriati.

Puoi disattivare o eliminare questo account di servizio dal progetto, ma questa operazione potrebbe causare il fallimento di eventuali applicazioni che dipendono dalle credenziali dell'account di servizio. Se elimini per errore l'account di servizio predefinito di Compute Engine, puoi provare a recuperarlo entro 30 giorni. Per ulteriori informazioni, consulta Eliminare e annullare l'eliminazione degli account di servizio.

Se l'account di servizio predefinito 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 diversi servizi Google Cloud e ogni account ha in genere un determinato livello di accesso alle tue risorse Google Cloud.

Non puoi collegare agenti di servizio 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 per le API 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 Account di servizio della console Google Cloud. Per impostazione predefinita, a questo agente di servizio viene assegnato automaticamente il ruolo Editor del 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 di 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 che non conceda autorizzazioni per la creazione di 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.

Compute Engine Service Agent

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 sul criterio IAM dell'agente di servizio concesso nel tuo progetto Google Cloud. È anche l'agente di servizio utilizzato da Compute Engine per accedere all'account di servizio 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 questo agente. La revoca o la modifica delle autorizzazioni per questo agente 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, ti consigliamo di evitare di modificare i ruoli per questo agente di servizio il più possibile.

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, di concedergli solo i ruoli di cui la tua applicazione ha bisogno per funzionare correttamente e di collegarlo all'istanza Compute Engine. Il codice può quindi utilizzare 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 o in un secondo momento. È possibile associare un solo account di servizio a un'istanza alla volta. Se colleghi un account di servizio a un'istanza che ha già un account di servizio associato, l'account di servizio precedente non viene più utilizzato da quell'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, consulta Ambiti di accesso in questa pagina.

Per informazioni dettagliate sull'associazione di un account di servizio a un'istanza Compute Engine, consulta uno dei seguenti documenti:

Autorizzazione

Quando configuri un'istanza da eseguire come account di servizio, puoi determinare 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 a nessuna risorsa utilizzando l'account di servizio nell'istanza.

Inoltre, 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 possono limitare ulteriormente l'accesso ai metodi 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 dell'account di servizio utilizzando i ruoli IAM.

In sostanza:

  • 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 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 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 account di servizio, qualsiasi applicazione in esecuzione su un'istanza a cui è associato l'account di servizio 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.

    Sebbene il livello di accesso di un account di servizio sia 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 la 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 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 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 di autorizzazione.

Gli ambiti di accesso non hanno effetto se non hai abilitato l'API correlata nel progetto a cui appartiene il 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, 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 gestione dei servizi 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 dell'account di servizio concedendo 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

L'account di servizio avrà solo le autorizzazioni incluse in questi tre ruoli. Le applicazioni che simulano l'account di servizio non possono eseguire azioni al di fuori di questi ruoli, nonostante l'ambito di accesso a 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 imposta il ruolo di amministratore roles/storage.objectAdmin sull'account di servizio, per impostazione predefinita le richieste della gcloud CLI e delle librerie client non potranno gestire gli oggetti Cloud Storage da quell'istanza, anche se hai concesso all'account di servizio 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 progetto Google Cloud 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