Questa pagina descrive i service account in Google Kubernetes Engine (GKE) e il modo in cui forniscono identità per le applicazioni. Scoprirai i diversi tipi di service account e quando utilizzare ciascun tipo per autenticare l'accesso alle risorse in GKE senza fare affidamento sulle credenziali personali.
Questa pagina è rivolta a esperti di sicurezza e operatori che creano e gestiscono service account per interagire con le applicazioni GKE. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti, consulta Ruoli e attività comuni degli utenti GKE. Trusted Cloud by S3NS
Service account Kubernetes e service account IAM
La seguente tabella descrive le principali differenze tra gli account di servizio Kubernetes e gli account di servizio IAM:
Tipi di service account in GKE | |
---|---|
ServiceAccount Kubernetes |
|
Service account IAM |
|
ServiceAccount Kubernetes
Gli account di servizio Kubernetes sono gestiti a livello di cluster ed esistono nel server API di 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 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 riceve un token di autenticazione temporaneo 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 modificarne le dimensioni. Per un monitoraggio più accurato dell'utilizzo del disco, escludi i volumi che iniziano
con il prefisso kube-api-access-
dalla configurazione del 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
metodo projects.locations.clusters.getJwks
nell'API GKE.
- Per scoprire le nozioni di base sugli ServiceAccount di Kubernetes, consulta la sezione Service Accounts nella documentazione di Kubernetes.
- Per scoprire come creare nuovi service account, concedere autorizzazioni utilizzando controllo dell'accesso basato sui ruoli (RBAC) e assegnare service account ai pod, consulta Configurare i service account per i pod.
- Per le best practice per la gestione di Kubernetes ServiceAccount, 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.
Credenziali ServiceAccount Kubernetes compromesse
Se le credenziali di un account di servizio Kubernetes vengono compromesse, utilizza una delle seguenti opzioni per revocarle:
- Ricrea i pod: il token di autenticazione è associato a ogni UID pod univoco, quindi la ricreazione dei pod invalida le credenziali precedenti.
- Ricrea il service account Kubernetes: il token di autenticazione è associato all'UID dell'oggetto ServiceAccount nell'API Kubernetes. Elimina 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, vedi 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 in modo programmatico le API di Trusted Cloude gestire le autorizzazioni per le applicazioni in esecuzione nei prodotti Trusted Cloud.
Per saperne di più, consulta la panoramica dei service account IAM.
Agenti di servizio GKE
Un agente di servizio IAM è un account di servizio IAM che Trusted Cloud gestisce.
GKE utilizza l'agente di servizio Kubernetes Engine per gestire il ciclo di vita delle risorse del cluster per tuo conto, come nodi, dischi e bilanciatori del carico. Questo service agent ha il dominio
container-engine-robot.s3ns-system.iam.gserviceaccount.com
e gli viene concesso
il ruolo
Agente di servizio Kubernetes Engine (roles/container.serviceAgent
) sul tuo progetto quando abiliti l'API GKE.
L'identificatore di questo agente di servizio è il seguente:
service-PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com
PROJECT_NUMBER
è il tuo
numero di progetto.
Se rimuovi le autorizzazioni dell'agente di servizio nel tuo progetto, puoi recuperarle seguendo le istruzioni riportate in Errore 400/403: autorizzazioni di modifica mancanti sull'account.
Account di servizio del nodo GKE predefinito
GKE utilizza i service account IAM collegati ai nodi per
eseguire attività di sistema come il logging e il monitoraggio. Come minimo, questi service account nodo
devono avere il ruolo
Kubernetes Engine Default Node Service Account
(roles/container.defaultNodeServiceAccount
) sul tuo progetto. Per impostazione predefinita,
GKE utilizza l'account di servizio predefinito di Compute Engine,
che viene creato automaticamente nel tuo progetto, come service account del nodo.
Se la tua organizzazione applica il
vincolo di policy dell'organizzazione iam.automaticIamGrantsForDefaultServiceAccounts
, ilaccount di serviziot Compute Engine predefinito nel tuo progetto potrebbe
non ottenere automaticamente le autorizzazioni richieste per GKE.
Se utilizzi il account di servizio predefinito di Compute Engine per altre funzioni del tuo progetto o della tua organizzazione, il account di servizio potrebbe disporre di più autorizzazioni di quelle necessarie a GKE, il che potrebbe esporti a rischi per la sicurezza.
Per concedere il ruolo roles/container.defaultNodeServiceAccount
al account di servizio predefinito di Compute Engine, completa i seguenti passaggi:
console
- Vai alla pagina Benvenuto:
- Nel campo Numero progetto, fai clic su Copia negli appunti.
- Vai alla pagina IAM:
- Fai clic su Concedi l'accesso.
- Nel campo Nuove entità, specifica il seguente valore:
SostituisciPROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com
PROJECT_NUMBER
con il numero di progetto che hai copiato. - Nel menu Seleziona un ruolo, seleziona il ruolo Service account predefinito del nodo Kubernetes Engine.
- Fai clic su Salva.
gcloud
- Trova il numero del tuo progetto Trusted 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 di Compute Engine:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Sostituisci
PROJECT_NUMBER
con il numero di progetto del passaggio precedente.
Non disattivare il account di servizio Compute Engine predefinito a meno che tu non stia eseguendo la migrazione a service account 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 nel cluster per i tuoi pod: utilizza un
ServiceAccount Kubernetes. Ogni spazio dei nomi Kubernetes ha un
default
ServiceAccount, ma ti consigliamo di creare nuovi ServiceAccount con privilegi minimi per ogni workload in ogni spazio dei nomi. - Fornisci un'identità da utilizzare per i pod al di fuori del cluster: utilizza la federazione delle identità per i carichi di lavoro per GKE. Workload Identity Federation for GKE ti consente di specificare risorse Kubernetes come ServiceAccount come principal nelle norme IAM. Ad esempio, utilizza la federazione delle identità dei carichi di lavoro per GKE quando chiami Trusted Cloud API come Secret Manager o Spanner dai tuoi pod.
- Fornisci un'identità predefinita per i tuoi 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 Compute Engine predefinito.
Passaggi successivi
- Scopri come utilizzare i service account Google con privilegi minimi.
- Scopri come concedere un ruolo a un'entità.