Informazioni sugli account di servizio in GKE


Questa pagina descrive gli account di servizio in Google Kubernetes Engine (GKE) e come forniscono le identità per le applicazioni. Scoprirai i diversi tipi di account di servizio e quando utilizzare ciascun tipo per autenticare l'accesso alle risorse all'interno di GKE senza fare affidamento su credenziali personali.

Questa pagina è rivolta a specialisti della sicurezza e operatori che creano e gestiscono account di servizio per interagire con le applicazioni GKE. Per scoprire di più sui ruoli comuni e sugli esempi di attività a cui facciamo riferimento nei contenuti di Google Cloud, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.

Account di servizio Kubernetes e account di servizio IAM

La seguente tabella descrive le principali differenze tra gli account di servizio Kubernetes e gli account di servizio IAM:

Tipi di account di servizio in GKE
Account utente Kubernetes
  • Oggetto ServiceAccount nel server dell'API Kubernetes
  • Con ambito in uno spazio dei nomi Kubernetes in un cluster
  • Fornisce un'identità per i pod da utilizzare all'interno del cluster
Service account IAM
  • Gestisci con l'API IAM
  • Con ambito in un progetto Google Cloud
  • Fornisce un'identità per le applicazioni nel progetto

Account di servizio Kubernetes

Gli account di servizio Kubernetes sono gestiti a livello di cluster ed esistono nel server API Kubernetes come oggetti ServiceAccount. La documentazione di Kubernetes e la documentazione di GKE spesso utilizzano il termine ServiceAccount per distinguere queste risorse Kubernetes dagli account di servizio in altri ambienti come IAM.

Crea un account di servizio Kubernetes in uno spazio dei nomi e poi assegnalo a un pod utilizzando il campo serviceAccountName nel manifest del pod. Il processo kubelet sul nodo riceve un token di accesso a breve termine per l'account ServiceAccount assegnato e lo monta come volume proiettato nel pod.

Il token bearer di breve durata è un token web JSON (JWT) firmato dal server API, che è un provider OpenID Connect (OIDC). Per convalidare il token di rappresentazione, ottieni la chiave di convalida pubblica per il cluster chiamando il metodo projects.locations.clusters.getJwks nell'API GKE.

Rotazione delle credenziali dell'account di servizio Kubernetes

Se una credenziale dell'account di servizio Kubernetes è compromessa, utilizza una delle seguenti opzioni per revocarla:

  • Rigenera i pod: il token di accesso è associato a ogni UID del pod univoco, quindi la rigenerazione dei pod invalida le credenziali precedenti.
  • Rigenera l'account di servizio Kubernetes: il token di accesso è associato all'UID dell'oggetto ServiceAccount nell'API Kubernetes. Elimina ServiceAccount e crea un nuovo ServiceAccount con lo stesso nome. I token precedenti diventano non validi perché l'UID del nuovo account di servizio è diverso.
  • Esegui una rotazione delle credenziali: questa operazione revoca tutte le credenziali del account di servizio Kubernetes nel cluster. La rotazione modifica anche il certificato CA e l'indirizzo IP del cluster. Per maggiori dettagli, consulta la rotazione delle credenziali.

Service account IAM

Gli account di servizio IAM vengono gestiti a livello di progetto utilizzando l'API IAM. Puoi utilizzare questi account di servizio per eseguire azioni come chiamare in modo programmatico le API di Google Cloud e gestire le autorizzazioni per le applicazioni in esecuzione nei prodotti Google Cloud.

Per saperne di più, consulta la panoramica degli account di servizio IAM.

Agenti di servizio GKE

Un agente di servizio IAM è un account di servizio IAM gestito da Google Cloud.

GKE utilizza l'agente di servizio Kubernetes Engine per gestire per tuo conto il ciclo di vita delle risorse del cluster, come nodi, dischi e bilanciatori del carico. Questo agente di servizio ha il dominio container-engine-robot.iam.gserviceaccount.com e gli viene assegnato il ruolo Agente di servizio Kubernetes Engine (roles/container.serviceAgent) nel progetto quando attivi l'API GKE.

L'identificatore di questo agente di servizio è il seguente:

service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com

PROJECT_NUMBER è il numero del progetto numerico.

Se rimuovi le autorizzazioni dell'agente di servizio nel progetto, puoi recuperarle seguendo le istruzioni riportate in Errore 400/403: autorizzazioni di modifica mancanti nell'account.

Account di servizio del nodo GKE predefinito

GKE utilizza service account IAM collegati ai tuoi nodi per eseguire attività di sistema come il logging e il monitoraggio. Come minimo, questi account di servizio dei nodi devono avere il ruolo Account di servizio dei nodi predefinito di Kubernetes Engine (roles/container.defaultNodeServiceAccount) nel progetto. Per impostazione predefinita, GKE utilizza l'account di servizio predefinito di Compute Engine, creato automaticamente nel progetto, come account di servizio del nodo.

Se la tua organizzazione applica il vincolo del criterio dell'organizzazione iam.automaticIamGrantsForDefaultServiceAccounts, il account di servizio Compute Engine predefinito nel progetto potrebbe non ottenere automaticamente le autorizzazioni richieste per GKE.

Se utilizzi l'account di servizio predefinito di Compute Engine per altre funzioni nel progetto o nell'organizzazione, l'account di servizio potrebbe avere più autorizzazioni di quelle necessarie per GKE, il che potrebbe esporre a rischi per la sicurezza.

Per concedere il ruolo roles/container.defaultNodeServiceAccount all'account di servizio predefinito di Compute Engine, completa i seguenti passaggi:

console

  1. Vai alla pagina Welcome (Ti diamo il benvenuto):

    Vai a Benvenuto

  2. Nel campo Numero progetto, fai clic su Copia negli appunti.
  3. Vai alla pagina IAM:

    Vai a IAM

  4. Fai clic su Concedi accesso.
  5. Nel campo Nuove entità, specifica il seguente valore:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    Sostituisci PROJECT_NUMBER con il numero del progetto che hai copiato.
  6. Nel menu Seleziona un ruolo, seleziona il ruolo Account di servizio del nodo predefinito Kubernetes Engine.
  7. Fai clic su Salva.

gcloud

  1. Trova il numero del tuo progetto Google Cloud:
    gcloud projects describe PROJECT_ID \
        --format="value(projectNumber)"

    Sostituisci PROJECT_ID con l'ID progetto.

    L'output è simile al seguente:

    12345678901
    
  2. Concedi il ruolo roles/container.defaultNodeServiceAccount all'account di servizio predefinito Compute Engine:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/container.defaultNodeServiceAccount"

    Sostituisci PROJECT_NUMBER con il numero del progetto del passaggio precedente.

Non disattivare l'account di servizio Compute Engine predefinito, a meno che non stia eseguendo la migrazione ai account di servizio gestiti dall'utente.

Quando utilizzare un account di servizio specifico

Il tipo di account di servizio che utilizzi dipende dal tipo di identità che vuoi fornire per le tue applicazioni, come segue:

  • Fornisci un'identità da utilizzare per i pod nel cluster: utilizza un account di servizio Kubernetes. Ogni spazio dei nomi Kubernetes ha un account di servizio default, ma ti consigliamo di creare nuovi account di servizio con privilegi minimi per ogni carico di lavoro in ogni spazio dei nomi.
  • Fornisci un'identità da utilizzare al di fuori del cluster per i tuoi pod: utilizza Workload Identity Federation for GKE. Workload Identity Federation for GKE ti consente di specificare risorse Kubernetes come gli account di servizio come entità nei criteri IAM. Ad esempio, utilizza la federazione delle identità per i carichi di lavoro per GKE quando chiami API Google Cloud come Secret Manager o Spanner dai tuoi pod.
  • Fornisci un'identità predefinita per i tuoi nodi: utilizza un account di servizio IAM personalizzato con privilegi minimi quando crei i tuoi cluster o nodi GKE. Se non utilizzi un account di servizio IAM personalizzato, GKE utilizza l'account di servizio predefinito di Compute Engine.

Passaggi successivi