Come qualsiasi entità, un account di servizio può autenticarsi su Google, ottenere un token di accesso OAuth 2.0 e chiamare le API di Google. Tuttavia, questa procedura funziona diversamente per gli account di servizio rispetto agli utenti.
Gli account di servizio vengono autenticati mediante una delle seguenti operazioni:
- Ottenere credenziali di breve durata
- Utilizzo di una chiave dell'account di servizio per firmare un token web JSON (JWT) e scambiarlo con un token di accesso
Credenziali dell'account di servizio di breve durata
Il modo più sicuro per autenticarsi come account di servizio è ottenere credenziali di breve durata per l'account di servizio sotto forma di token di accesso OAuth 2.0. Per impostazione predefinita, questi token scadono dopo 1 ora.
Le credenziali dell'account di servizio di breve durata sono utili per gli scenari in cui devi concedere l'accesso limitato alle risorse per account di servizio attendibili. Inoltre, presentano meno rischi rispetto alle credenziali permanenti, come le chiavi degli account di servizio.
In molti casi, queste credenziali vengono ottenute automaticamente e non è necessario crearle o gestirle personalmente. Ecco alcuni esempi:
- Se esegui un comando Google Cloud CLI e includi il
--impersonate-service-account
, quindi gcloud CLI crea credenziali di breve durata per l'account di servizio ed esegue il comando con queste credenziali. Se colleghi un account di servizio a un'istanza della macchina virtuale (VM) Compute Engine, i carichi di lavoro su quell'istanza possono utilizzare le librerie client Cloud per accedere ai servizi Google Cloud. Le librerie client Cloud utilizzano le credenziali predefinite dell'applicazione (ADC) per ottenere credenziali di breve durata per l'account di servizio.
Per maggiori dettagli su questa procedura, vedi Autenticazione delle applicazioni mediante credenziali degli account di servizio.
Se hai configurato l'identità del carico di lavoro di addestramento, le librerie client di Cloud utilizzare le credenziali del tuo provider di identità per generare un servizio di breve durata le credenziali dell'account.
Puoi anche utilizzare l'API Credenziali account di servizio per creare manualmente credenziali di breve durata. Ad esempio, potresti creare un'etichetta che fornisce agli utenti credenziali degli account di servizio di breve durata per accedere temporaneamente alle risorse Google Cloud.
L'API Service Account Credentials può creare i seguenti tipi di credenziali:
- Token di accesso OAuth 2.0
- Token ID OpenID Connect (OIDC)
- Token web JSON (JWT) autofirmati
- Blob binari autofirmati
Per saperne di più, consulta la sezione Creazione di un account di servizio di breve durata credenziali.
Interpretazione degli audit log
Cloud Audit Logs ti aiuta a rispondere alle domande "chi ha fatto cosa, dove e quando?" per le tue risorse Google Cloud.
Quando utilizzi credenziali di breve durata per rubare l'identità di un account di servizio, la maggior parte dei servizi Google Cloud crea voci di log che mostrano le seguenti identità:
- L'account di servizio impersonato dalle credenziali di breve durata
- L'identità che ha creato le credenziali di breve durata
Puoi utilizzare queste voci di log per identificare l'entità che ha creato credenziali di breve durata, nonché l'account di servizio utilizzato dall'entità impersonato.
Per esempi di voci dei log di controllo che mostrano l'impersonificazione degli account di servizio, consulta Impersonificazione di un account di servizio per accedere a Google Cloud.
Furto d'identità
L'usurpazione d'identità si verifica quando utilizzi le credenziali di un account di servizio per generare una nuova credenziale per l'account di servizio.
L'API Service Account Credentials vieta i tipi seguenti Furto d'identità:
Utilizzo di una credenziale di breve durata per un account di servizio per generare un nuovo token di accesso per l'account di servizio.
Fanno eccezione i JWT (JSON Web Token) autofirmati. puoi utilizzare un JWT autofirmato per un account di servizio al fine di generare nuovo token di accesso per l'account di servizio.
Utilizzo di una credenziale di breve durata per un account di servizio per firmare un oggetto binario (blob) o JWT che può essere utilizzato per chiamare le seguenti API:
Google Cloud vieta questo tipo di furto d'identità perché consente i malintenzionati aggiornano i token rubati a tempo indeterminato.
Se provi a utilizzare la sostituzione di persona in uno dei modi vietati, potresti riscontrare il seguente errore:
FAILED_PRECONDITION: You can't create a token for the same service account that you used to authenticate the request.
Se riscontri questo errore, prova a utilizzare credenziali diverse per generare la nuova credenziale di breve durata per il tuo account di servizio, ad esempio le credenziali dell'utente finale o quelle di un altro account di servizio.
Chiavi account di servizio
Ogni account di servizio è associato a una coppia di chiavi RSA pubblica/privata. L'API Credentials for Service Account utilizza questa coppia di chiavi interna per creare credenziali dell'account di servizio di breve durata e per firmare blob e token web JSON (JWT). Questa coppia di chiavi è nota come coppia di chiavi gestita da Google.
Inoltre, puoi creare più coppie di chiavi RSA pubbliche/private, dette coppie di chiavi gestite dall'utente e utilizzano la chiave privata per l'autenticazione con Google su quelle di livello inferiore. Questa chiave privata è nota come chiave dell'account di servizio.
Coppie di chiavi gestite da Google
Le coppie di chiavi gestite da Google vengono utilizzate dall'API Credenziali account di servizio e dai servizi Google Cloud come App Engine e Compute Engine per generare credenziali di breve durata per gli account di servizio.
Le chiavi gestite da Google che vengono utilizzate attivamente per la firma vengono ruotate regolarmente in base alle best practice per la sicurezza. Il processo di rotazione è probabilistico; dell'uso della nuova chiave aumenterà gradualmente per tutta la durata della chiave.
La chiave privata in una coppia di chiavi gestita da Google viene sempre conservata in custodia e non potrai mai accedervi direttamente.
La chiave pubblica in una coppia di chiavi gestita da Google è accessibile pubblicamente, chiunque può verificare le firme create con la chiave privata. Puoi accedono alla chiave pubblica in diversi formati:
- Certificato X.509:
https://www.googleapis.com/service_accounts/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL
- Chiave web JSON (JWK):
https://www.googleapis.com/service_accounts/v1/jwk/SERVICE_ACCOUNT_EMAIL
- Formato non elaborato:
https://www.googleapis.com/service_accounts/v1/metadata/raw/SERVICE_ACCOUNT_EMAIL
Se scarichi e memorizzi nella cache la chiave pubblica, ti consigliamo di memorizzarla nella cache per al massimo 24 ore per assicurarti di avere sempre la chiave corrente. Indipendentemente dal momento in cui la recupero, la chiave pubblica sarà valida per almeno 24 ore dopo il recupero.
Coppie di chiavi gestite dall'utente
Puoi creare coppie di chiavi gestite dall'utente per un account di servizio, quindi utilizzare la chiave privata di ogni coppia di chiavi per autenticarti con le API Google. Questo privato è nota come chiave dell'account di servizio.
Le librerie client di Cloud possono utilizzare le chiavi dell'account di servizio per ottenere automaticamente un token di accesso OAuth 2.0. Puoi anche usare una chiave dell'account di servizio per firmare un JWT manualmente, quindi utilizza il JWT firmato per richiedere un token di accesso. Per maggiori dettagli, vedi Utilizzo di OAuth 2.0 per le applicazioni server-server.
Ogni account di servizio può avere fino a 10 chiavi dell'account. Google archivia solo la parte pubblica di una coppia di chiavi gestita dall'utente.
Esistono diversi modi per creare una coppia di chiavi gestita dall'utente per un servizio :
- Utilizza l'API IAM per creano automaticamente una coppia di chiavi gestita dall'utente. Google genera una coppia di chiave pubblica/privata; archivia solo la chiave pubblica; e restituisce l'errore chiave per te.
- Crea personalmente una coppia di chiavi gestita dall'utente, quindi carica solo la chiave pubblica. Google non vede mai la chiave privata.
Le chiavi gestite dagli utenti sono credenziali importantissime. Per limitare l'utilizzo delle chiavi gestite dall'utente, puoi applicare i seguenti vincoli dei criteri dell'organizzazione in un'organizzazione, un progetto o una cartella:
constraints/iam.disableServiceAccountKeyCreation
: impedisce alle entità di la creazione di chiavi degli account di servizio gestite dall'utente.constraints/iam.disableServiceAccountKeyUpload
: impedisce ai principali di caricare una chiave pubblica per un account di servizio.
Se applichi questi vincoli perché utilizzi la federazione delle identità per i carichi di lavoro, ti consigliamo di utilizzare i vincoli dei criteri dell'organizzazione per la federazione delle identità per i carichi di lavoro per specificare quali provider di identità sono consentiti.
Tempi di scadenza per le chiavi gestite dall'utente
Per impostazione predefinita, quando crei una chiave dell'account di servizio gestita dall'utente, la chiave non scade mai. Puoi modificare questa impostazione predefinita impostando una scadenza per tutti i nuovi nel progetto, nella cartella o nell'organizzazione. Una data di scadenza specifica il numero di ore durante le quali una chiave appena creata è valida.
Usa le date di scadenza quando hai bisogno di tempo l'accesso a un sistema che richiede una chiave dell'account di servizio. Ad esempio, utilizza le date di scadenza quando:
- Lo sviluppo di codice in un ambiente non di produzione per un'applicazione in grado di autenticarsi solo con le chiavi degli account di servizio
- Utilizzo di uno strumento di terze parti che può autenticarsi solo con le chiavi dell'account di servizio
Evita di utilizzare date di scadenza nei seguenti casi:
- Carichi di lavoro di produzione. In fase di produzione, una chiave dell'account di servizio scaduta potrebbe causare un'interruzione accidentale. Utilizza invece chiavi che non scadono e gestisci il loro ciclo di vita con la rotazione delle chiavi.
- Carichi di lavoro non di produzione che richiedono accesso permanente, ad esempio una pipeline di integrazione continua (CI).
- Sistemi di rotazione delle chiavi che impediscono l'utilizzo di una chiave dopo un determinato periodo di tempo. Per scoprire le strategie di rotazione delle chiavi consigliate, consulta Rotazione delle chiavi dell'account di servizio.
Per evitare interruzioni del servizio, ti consigliamo di non impostare una data di scadenza, a meno che il constraints/iam.disableServiceAccountKeyCreation
vincolo dei criteri dell'organizzazione non sia stato applicato per un periodo di tempo prolungato. Quando imposti una data di scadenza, devi anche interrompere l'applicazione del vincolo constraints/iam.disableServiceAccountKeyCreation
. Per
su questo vincolo, consulta
Limita la durata delle chiavi degli account di servizio.
Per impostare una data di scadenza:
- Identifica il progetto, la cartella o l'organizzazione in cui vuoi impostare una data di scadenza per le chiavi dell'account di servizio.
- Aggiungi un criterio dell'organizzazione che applichi il
vincolo
constraints/iam.serviceAccountKeyExpiryHours
. Dopo aver applicato questo vincolo per il progetto, la cartella o l'organizzazione, la data e l'ora di scadenza si applicano a tutte le chiavi dell'account di servizio appena create all'interno della risorsa principale. Le chiavi esistenti non sono interessate.
I tempi di scadenza sono misurati in ore. Come best practice, utilizza date di scadenza brevi, ad esempio 8 ore, 24 ore (1 giorno) o 168 ore (7 giorni). Tempi di scadenza brevi contribuiscono ad assicurare che il tuo team disponga di una procedura ben testata per l'aggiornamento delle chiavi. Avvia con la data di scadenza più breve che soddisfa le tue esigenze e aumentala solo se necessaria.