Questo documento descrive i service account in Google Kubernetes Engine (GKE) e come forniscono identità per le applicazioni. Scoprirai i diversi tipi di service account e quando utilizzare ciascun tipo per autenticare l'accesso alle risorse all'interno di GKE senza fare affidamento sulle credenziali personali.
Questo documento è destinato a specialisti della sicurezza e operatori che creano e gestiscono service account per interagire con le applicazioni GKE. Per saperne di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei Google Cloud contenuti, consulta Ruoli e attività comuni degli utenti GKE.
Service account Kubernetes e service account IAM
La tabella seguente descrive le principali differenze tra i service account Kubernetes e i service account IAM:
| Tipi di service account in GKE | |
|---|---|
| ServiceAccount Kubernetes |
|
| Service account IAM |
|
ServiceAccount Kubernetes
I service account Kubernetes vengono gestiti a livello di cluster ed esistono nel server dell'API Kubernetes come oggetti ServiceAccount. La documentazione di Kubernetes e la documentazione di GKE utilizzano spesso il termine ServiceAccount per distinguere queste risorse Kubernetes dai service account in altri ambienti come IAM.
Crea un ServiceAccount Kubernetes in uno spazio dei nomi e poi assegna questo ServiceAccount a un pod utilizzando il campo serviceAccountName nel manifest del pod. Il processo kubelet sul nodo ottiene un token di autenticazione di breve durata per il ServiceAccount assegnato e lo monta come volume proiettato nel pod. Per impostazione predefinita, questo volume proiettato ha un nome che inizia con il prefisso kube-api-access-. Tutti i volumi che iniziano con questo prefisso sono gestiti da GKE, il che significa che non puoi modificare le dimensioni di questi volumi. Per un monitoraggio più accurato dell'utilizzo del disco, escludi i volumi che iniziano con il prefisso kube-api-access- dalla configurazione di monitoraggio.
Il token di autenticazione di breve durata è un token web JSON (JWT) firmato dal server API, che è un provider OpenID Connect (OIDC). Per convalidare il token
di autenticazione, recupera la chiave di convalida pubblica per il cluster chiamando il
projects.locations.clusters.getJwks metodo
nell'API GKE.
- Per scoprire le nozioni di base di ServiceAccount Kubernetes, consulta la sezione Service Accountnella documentazione di Kubernetes.
- Per scoprire come creare nuovi ServiceAccount, concedere autorizzazioni utilizzando controllo dell'accesso basato sui ruoli (RBAC) e assegnare ServiceAccount ai pod, consulta Configurare i service account per i pod.
- Per le best practice per la gestione di ServiceAccount Kubernetes, consulta Best practice per RBAC.
- Per leggere la configurazione OIDC del server dell'API Kubernetes per un cluster,
chiama il metodo
projects.locations.clusters.well-known.getOpenid-configurationnell'API GKE.
Credenziali di ServiceAccount Kubernetes compromesse
Se le credenziali di un account di servizio Kubernetes sono compromesse, utilizza una delle seguenti opzioni per revocarle:
- Ricrea i pod: il token di autenticazione è associato a ogni UID del pod univoco, quindi la ricreazione dei pod invalida le credenziali precedenti.
- Ricrea il service account Kubernetes: il token di autenticazione è associato a l'UID dell'oggetto ServiceAccount nell'API Kubernetes. Elimina il ServiceAccount e creane uno nuovo con lo stesso nome. I token precedenti diventano non validi perché l'UID del nuovo ServiceAccount è 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 Rotazione delle credenziali.
Service account IAM
I service account IAM vengono gestiti a livello di progetto utilizzando l'API IAM. Puoi utilizzare questi service account per eseguire azioni come chiamare le Google Cloud API in modo programmatico e gestire le autorizzazioni per le applicazioni in esecuzione nei Google Cloud prodotti.
Per saperne di più, consulta la panoramica dei service account IAM.
Service agent GKE
Un service agent IAM è un account di servizio IAM che Google Cloud gestisce. GKE utilizza i seguenti due service agent:
Kubernetes Engine Service Agent
GKE utilizza Kubernetes Engine Service Agent per gestire il ciclo di vita delle risorse del cluster per tuo conto, come nodi, dischi e bilanciatori del carico. A questo service agent viene concesso il dominio
container-engine-robot.iam.gserviceaccount.com e gli viene concesso
il
ruolo
Kubernetes Engine Service Agent (roles/container.serviceAgent) nel tuo progetto quando abiliti l'API
GKE.
L'identificatore di questo service agent è il seguente:
service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
CLUSTER_PROJECT_NUMBER è il numero di progetto numerico del progetto che contiene il cluster GKE.
Kubernetes Engine Default Node Service Agent
GKE utilizza Kubernetes Engine Default Node Service Agent per supportare il logging e il monitoraggio dei nodi Kubernetes per i cluster che utilizzano Kubernetes versione 1.33 e successive. A questo service agent viene concesso il dominio
gcp-sa-gkenode.iam.gserviceaccount.com e
il ruolo
Kubernetes Engine Default Node Service Agent (roles/container.defaultNodeServiceAgent) nel tuo progetto quando abiliti
l'API GKE.
L'identificatore di questo service agent è il seguente:
service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkenode.iam.gserviceaccount.com
CLUSTER_PROJECT_NUMBER è il numero di progetto numerico del progetto che contiene il cluster GKE.
Se rimuovi le autorizzazioni del service agent nel tuo progetto, puoi recuperare le seguendo le istruzioni riportate in Errore 400/403: autorizzazioni di modifica mancanti sull'account.
Service account dei nodi
GKE utilizza i service account IAM collegati ai nodi per
eseguire attività di sistema come il logging e il monitoraggio. Questi service account dei nodi
devono avere almeno il
ruolo Kubernetes Engine Default Node Service Account
(roles/container.defaultNodeServiceAccount) nel tuo progetto. Per impostazione predefinita,
GKE utilizza il
service account predefinito di Compute Engine,
creato automaticamente nel tuo progetto, come account di servizio del nodo.
Se la tua organizzazione applica il
iam.automaticIamGrantsForDefaultServiceAccounts vincolo della policy dell'organizzazione, al account di servizio predefinito di Compute Engine nel tuo progetto potrebbero
non essere concesse automaticamente le autorizzazioni richieste per GKE.
Se utilizzi il account di servizio predefinito di Compute Engine per altre funzioni nel tuo progetto o nella tua organizzazione, il account di servizio potrebbe avere più autorizzazioni di quelle necessarie a GKE needs, il che potrebbe esporre a rischi per la sicurezza.
Non disattivare il account di servizio predefinito di Compute Engine a meno che non esegui la migrazione ai service account gestiti dall'utente.
Indirizzi email dei service account dei nodi
L'indirizzo email del account di servizio del nodo dipende dal tipo di service account, come indicato di seguito:
Service account predefinito di Compute Engine:
CLUSTER_PROJECT_NUMBER-compute@developer.gserviceaccount.comSostituisci
CLUSTER_PROJECT_NUMBERcon il numero di progetto del progetto che contiene il cluster, ad esempio1234567890.Service account personalizzato:
SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.comSostituisci quanto segue:
SERVICE_ACCOUNT_NAME: il nome del service account.SERVICE_ACCOUNT_PROJECT_ID: l'ID progetto del progetto che contiene il service account. Google Cloud
Service account dei nodi e service agent del progetto
Quando crei un cluster o un pool di nodi, i service agent nel progetto del cluster utilizzano il account di servizio collegato ai nodi per eseguire attività come i pull delle immagini. Per impostazione predefinita, i service agent nel progetto del cluster hanno il seguente accesso ai service account dei nodi in quel progetto:
- Il service agent Compute Engine in un progetto può creare token di accesso per i service account dei nodi nello stesso progetto.
- Il service agent GKE in un progetto può rappresentare i service account dei nodi nello stesso progetto.
Alcune organizzazioni utilizzano un progetto dedicato per gestire tutti i service account. Se il account di servizio del nodo non si trova nel progetto del cluster, i service agent nel progetto del cluster non possono creare token o rappresentare il account di servizio. Devi concedere ai service agent nel progetto del cluster i seguenti ruoli nel account di servizio:
- Creatore token account di servizio
(
roles/iam.serviceAccountTokenCreator) nel service account al service agent Compute Engine nel progetto del cluster. - Utente service account
(
roles/iam.serviceAccountUser) nel account di servizio al service agent GKE nel progetto del cluster.
Per saperne di più, consulta Configurare l'utilizzo account di servizio tra progetti.
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 indicato di seguito:
- Fornisci un'identità per i pod da utilizzare nel cluster: utilizza un
ServiceAccount Kubernetes. Ogni spazio dei nomi Kubernetes ha un ServiceAccount
default, ma ti consigliamo di creare nuovi ServiceAccount con privilegi minimi per ogni carico di lavoro in ogni spazio dei nomi. - Fornisci un'identità per i pod da utilizzare all'esterno del cluster: utilizza Workload Identity Federation for GKE. Workload Identity Federation for GKE ti consente di specificare le risorse Kubernetes come ServiceAccount come entità nelle policy IAM. Ad esempio, utilizza Workload Identity Federation for GKE quando chiami Google Cloud le API come Secret Manager o Spanner dai tuoi pod.
- Fornisci un'identità predefinita per i nodi: utilizza un service account IAM personalizzato con privilegi minimi quando crei i cluster o i nodi GKE. Se non utilizzi un account di servizio IAM personalizzato, GKE utilizza il account di servizio predefinito di Compute Engine.
Passaggi successivi
- Scopri come utilizzare Workload Identity Federation for GKE.
- Scopri come rafforzare la sicurezza del cluster.
- Leggi una panoramica di Workload Identity Federation for GKE.
- Scopri di più sull'autenticazione del server API.
- Scopri come configurare IAM.