Informazioni sugli account di servizio

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

Contesto

Un account di servizio è un tipo speciale di Account Google destinato a rappresentare un utente "non umano" che deve eseguire l'autenticazione ed essere autorizzato ad accedere ai dati nelle API di Google.

In genere gli account di servizio vengono utilizzati in scenari quali:

  • Esecuzione di carichi di lavoro su macchine virtuali (VM).
  • Esecuzione di carichi di lavoro su workstation o data center on-premise che chiamano le API di Google.
  • Esecuzione di carichi di lavoro non legati al ciclo di vita di un utente umano.

La tua applicazione presuppone l'identità dell'account di servizio per chiamare le API di Google, in modo che gli utenti non siano coinvolti direttamente.

Gestione degli account di servizio

Gli account di servizio possono essere considerati sia come risorsa sia come identità.

Quando consideri l'account di servizio come un'identità, puoi concedere un ruolo a un account di servizio, permettendogli di accedere a una risorsa (ad esempio un progetto).

Quando un account di servizio viene considerato una risorsa, puoi concedere i ruoli ad altri utenti per accedere o gestire l'account di servizio.

Concessione dell'accesso agli account di servizio

La concessione dell'accesso a un account di servizio a una risorsa è analoga a quella per concedere l'accesso a qualsiasi altra identità. Ad esempio, se hai un'applicazione in esecuzione su Compute Engine e vuoi che abbia accesso solo per creare oggetti in Cloud Storage. Puoi creare un account di servizio per l'applicazione e concedergli il ruolo Creatore oggetti Storage.

Scopri di più su come concedere ruoli a tutti i tipi di entità, inclusi gli account di servizio.

Monitoraggio degli account di servizio

Man mano che crei più account di servizio, potresti perdere di volta in volta l'account di servizio utilizzato per uno scopo specifico.

Il nome visualizzato di un account di servizio è una buona soluzione per acquisire ulteriori informazioni sull'account di servizio, ad esempio lo scopo dell'account di servizio o una persona di contatto. Per i nuovi account di servizio, puoi completare il nome visualizzato durante la creazione dell'account di servizio. Per gli account di servizio esistenti, utilizza il metodo serviceAccounts.update() per modificare il nome visualizzato.

Identificare gli account di servizio inutilizzati

Gli account di servizio inutilizzati creano un rischio per la sicurezza non necessario, ti consigliamo quindi di disattivare gli account di servizio inutilizzati e di eliminarli quando hai la certezza che non siano più necessari. Puoi utilizzare i seguenti metodi per identificare gli account di servizio inutilizzati:

  • Gli dati dell'account di servizio indicano quali account di servizio nel progetto non sono stati autenticati negli ultimi 90 giorni.
  • L'Analizzatore attività ti consente di controllare quando è stato utilizzato l'ultima volta un account di servizio o una chiave.

Puoi anche utilizzare le metriche di utilizzo degli account di servizio per monitorare l'utilizzo delle chiavi e degli account di servizio in generale.

Eliminazione e ricreazione di account di servizio

Puoi eliminare un account di servizio e quindi crearne uno nuovo con lo stesso nome.

Quando elimini un account di servizio, le associazioni dei ruoli non vengono eliminate immediatamente. Le associazioni di ruoli elencano invece l'account di servizio con il prefisso deleted:. Per un esempio, consulta Criteri con entità eliminate.

Se crei un nuovo account di servizio con lo stesso nome di un account di servizio eliminato di recente, le associazioni precedenti potrebbero continuare a esistere. Tuttavia, non verranno applicate al nuovo account di servizio anche se entrambi gli account hanno lo stesso indirizzo email. Questo comportamento si verifica perché agli account di servizio viene assegnato un ID univoco all'interno di Identity and Access Management (IAM). Internamente, tutte le associazioni di ruoli vengono concesse utilizzando questi ID, non l'indirizzo email dell'account di servizio. Di conseguenza, le associazioni di ruolo esistenti per un account di servizio eliminato non si applicano a un nuovo account di servizio che utilizza lo stesso indirizzo email.

Analogamente, se colleghi un account di servizio a una risorsa, elimini l'account di servizio e crei un nuovo account di servizio con lo stesso nome, il nuovo account di servizio non sarà collegato alla risorsa.

Per evitare questo comportamento imprevisto, valuta la possibilità di utilizzare un nuovo nome univoco per ogni account di servizio. Inoltre, se elimini accidentalmente un account di servizio, puoi provare a annullarne l'eliminazione anziché crearne uno nuovo.

Se non puoi annullare l'eliminazione dell'account di servizio originale e devi creare un nuovo account di servizio con lo stesso nome e gli stessi ruoli, devi concedere i ruoli al nuovo account di servizio. Per maggiori dettagli, consulta la pagina Criteri con entità eliminate.

Se vuoi che il nuovo account di servizio sia collegato alle stesse risorse dell'account di servizio originale, procedi in uno dei seguenti modi:

Autorizzazioni per gli account di servizio

In questa sezione vengono descritti gli scenari comuni per le autorizzazioni concesse agli account di servizio o gli account utente con le autorizzazioni necessarie per impersonare account di servizio.

Concessione di autorizzazioni minime agli account di servizio

Come per tutti i tipi di entità, devi concedere all'account di servizio solo l'insieme minimo di autorizzazioni necessarie per raggiungere il suo obiettivo. Scopri di più sulla concessione dei ruoli a tutti i tipi di entità, inclusi gli account di servizio.

Quando concedi le autorizzazioni ad accedere a un account di servizio, tieni presente che l'utente può accedere a tutte le risorse per le quali l'account di servizio dispone delle autorizzazioni. Pertanto, è importante configurare con attenzione le autorizzazioni degli account di servizio, vale a dire indicare con esattezza il membro del team che può agire come account di servizio. Presta particolare attenzione quando consenti agli utenti di rubare l'identità di account di servizio con privilegi elevati, ad esempio account di servizio predefiniti e Compute Engine.

Gli utenti con ruoli IAM per aggiornare le istanze App Engine e Compute Engine (ad esempio Deploymenter App Engine o Amministratore istanze Compute) possono eseguire efficacemente il codice come account di servizio utilizzati per eseguire queste istanze e ottenere indirettamente l'accesso a tutte le risorse a cui hanno accesso gli account di servizio. Allo stesso modo, l'accesso SSH a un'istanza di Compute Engine può anche fornire la possibilità di eseguire codice come quell'istanza.

Autorizzazioni dell'account di servizio per scenari comuni

Gli account di servizio possono essere utilizzati in molti scenari diversi e ognuno di essi richiede determinate autorizzazioni. In questa sezione vengono descritti gli scenari comuni e le autorizzazioni necessarie.

Collegamento degli account di servizio alle risorse

Se vuoi avviare un job a lunga esecuzione che si autentica come account di servizio, devi collegare un account di servizio alla risorsa che eseguirà il job.

Autorizzazioni:

  • Autorizzazioni per creare la risorsa
  • iam.serviceAccounts.actAs

Per trovare i ruoli che includono queste autorizzazioni, cerca le autorizzazioni nell'elenco dei ruoli.

Esistono diverse risorse Google Cloud che possono eseguire job di lunga durata come account di servizio. Ecco alcuni esempi di risorse:

  • VM di Compute Engine
  • App di App Engine
  • Cloud Functions

Quando crei queste risorse, puoi scegliere di collegare un account di servizio. Questo account di servizio funge da identità della risorsa.

Per creare una risorsa e collegare un account di servizio, devi disporre delle autorizzazioni per crearla e dell'autorizzazione per impersonare l'account di servizio che collegherai alla risorsa. L'autorizzazione a impersonare l'account di servizio viene fornita da qualsiasi ruolo che includa l'autorizzazione iam.serviceAccounts.actAs.

Dopo aver creato la risorsa e avervi associato un account di servizio, puoi avviare un job a lunga esecuzione sulla risorsa. Il job viene eseguito come account di servizio associato alla risorsa e lo utilizza per autorizzare le richieste alle API Google Cloud.

Per ulteriori informazioni su come collegare gli account di servizio alle risorse, consulta Collegamento di un account di servizio a una risorsa.

Impersonare direttamente un account di servizio

Autorizzazioni:

  • iam.serviceAccounts.getAccessToken
  • iam.serviceAccounts.signBlob
  • iam.serviceAccounts.signJwt
  • iam.serviceAccounts.implicitDelegation

Ruoli:

  • roles/iam.serviceAccountTokenCreator (Creatore token account di servizio)

Una volta concesse le autorizzazioni richieste, un utente (o un servizio) può impersonare direttamente (o rivendicare) l'identità di un account di servizio in alcuni scenari comuni.

Innanzitutto, l'utente può ottenere le credenziali a breve termine per l'account di servizio utilizzando l'autorizzazione iam.serviceAccounts.getAccessToken e chiamando il metodo generateAccessToken(). Utilizzando credenziali a breve termine, un utente può inviare comandi a Google Cloud e può accedere a tutte le risorse a cui ha accesso l'account di servizio. Ad esempio, questo flusso consente a un utente di utilizzare il flag gcloud --impersonate-service-account per impersonare l'account di servizio senza richiedere l'utilizzo di una chiave esterna dell'account di servizio.

In secondo luogo, l'utente può ottenere gli elementi firmati dalla chiave privata gestita da Google dell'account di servizio utilizzando l'autorizzazione iam.serviceAccounts.signBlob e chiamando il metodo signBlob() o signJwt(). La chiave privata gestita da Google è sempre in deposito a garanzia e non è mai esposta direttamente. signBlob() consente la firma di payload arbitrari (come gli URL con firma Cloud Storage), mentre signJwt() consente solo la firma di JWT ben formulati.

Infine, l'utente può impersonare (o rivendicare) l'account di servizio senza mai recuperare una credenziale per l'account di servizio. Questo è un caso d'uso avanzato ed è supportato solo per l'accesso programmatico tramite il metodo generateAccessToken(). In scenari con almeno 3 account di servizio, vale a dire A, B e C, all'account di servizio A può essere concesso un token di accesso per l'account di servizio C se all'account di servizio A viene concessa l'autorizzazione iam.serviceAccounts.implicitDelegation su B e a B l'autorizzazione iam.serviceAccounts.getAccessToken su C.

Generazione di token ID OpenID Connect (OIDC) in corso...

Autorizzazioni:

  • iam.serviceAccounts.getOpenIdToken

Ruoli:

  • roles/iam.serviceAccountTokenCreator (Creatore token account di servizio)

Un utente (o un servizio) può generare un token JWT compatibile con OpenID Connect (OIDC) firmato dal provider OIDC di Google (accounts.google.com) che rappresenta l'identità dell'account di servizio utilizzando l'autorizzazione iam.serviceAccounts.getOpenIdToken.

Questi token non sono accettati direttamente dalla maggior parte delle API di Google senza che la tua organizzazione esegua il deployment di una federazione aggiuntiva dell'identità per concedere l'accesso a Google. Esistono alcune eccezioni, ad esempio Identity-Aware Proxy, che consente l'accesso basato su OIDC alle applicazioni gestite dagli utenti.

Generazione di chiavi private esterne

Autorizzazioni:

  • iam.serviceAccountKeys.create

Ruoli:

  • roles/editor (Editor)
  • roles/iam.serviceAccountKeyAdmin (amministratore chiavi account di servizio)

Un utente o un servizio può generare materiale con chiave privata esterna (RSA) che può essere utilizzato per eseguire l'autenticazione direttamente su Google come account di servizio. Questo materiale della chiave può essere quindi utilizzato con le librerie ADC (Application Default Credentials) o con il comando gcloud auth activate-service-account. Chiunque abbia accesso al materiale della chiave avrà accesso completo a tutte le risorse a cui ha accesso l'account di servizio. Tale materiale di chiave privata dovrebbe essere trattato con la massima preoccupazione e dovrebbe essere considerato meno sicuro più a lungo esiste il materiale. Pertanto, la rotazione del materiale della chiave privata è fondamentale per mantenere una sicurezza efficace.

Utilizzo di account di servizio con Compute Engine

Le istanze di Compute Engine devono essere eseguite come account di servizio per poter accedere ad altre risorse di Google Cloud. Per assicurarti che le tue istanze Compute Engine siano più sicure, considera quanto segue:

  • Puoi creare VM nello stesso progetto con account di servizio diversi. Per modificare l'account di servizio di una VM dopo la sua creazione, utilizza il metodo instances.setServiceAccount.

  • Puoi concedere ruoli IAM agli account di servizio per definire a quali utenti possono accedere. In molti casi non sarà più necessario fare affidamento sugli ambiti. Questo ti offre il vantaggio di poter modificare le autorizzazioni di un account di servizio VM senza ricreare l'istanza.

  • Poiché le istanze dipendono dai rispettivi account di servizio per accedere alle risorse di Google Cloud, evita di eliminare gli account di servizio quando sono ancora utilizzati dalle istanze in esecuzione. Se elimini gli account di servizio, le istanze potrebbero iniziare a non riuscire nelle loro operazioni.

Passaggi successivi

Provalo

Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.

Inizia gratuitamente