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 |
|
Service account IAM |
|
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.
- Per conoscere le nozioni di base degli account di servizio Kubernetes, consulta la documentazione di Kubernetes relativa agli account di servizio.
- Per scoprire come creare nuovi account di servizio, concedere autorizzazioni utilizzando controllo dell'accesso basato su ruoli (RBAC) e assegnare account di servizio ai pod, consulta Configurare gli account di servizio per i pod.
- Per le best practice per la gestione degli account di servizio Kubernetes, consulta Best practice per RBAC.
- Per leggere la configurazione OIDC del server API Kubernetes per un cluster, chiama il metodo
projects.locations.clusters.well-known.getOpenid-configuration
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
- Vai alla pagina Welcome (Ti diamo il benvenuto):
- Nel campo Numero progetto, fai clic su Copia negli appunti.
- Vai alla pagina IAM:
- Fai clic su Concedi accesso.
- Nel campo Nuove entità, specifica il seguente valore:
SostituisciPROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
con il numero del progetto che hai copiato. - Nel menu Seleziona un ruolo, seleziona il ruolo Account di servizio del nodo predefinito Kubernetes Engine.
- Fai clic su Salva.
gcloud
- 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
- 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
- Scopri come utilizzare gli account di servizio Google con privilegi minimi.
- Scopri come concedere un ruolo a un'entità.