Questa pagina spiega come continuare ad applicare molti controlli di sicurezza a livello di pod nei cluster Google Kubernetes Engine (GKE) eseguendo la migrazione da PodSecurityPolicy al controller di ammissione PodSecurity.
Panoramica
PodSecurityPolicy era un controller di ammissione Kubernetes che consentiva di applicare controlli di sicurezza a livello di pod, come gli standard di sicurezza dei pod di Kubernetes, fornendo un controllo granulare sulla configurazione di sicurezza dei carichi di lavoro di cui è stato eseguito il deployment. Il progetto Kubernetes ha ritirato PodSecurityPolicy e ha rimosso completamente la funzionalità in Kubernetes v1.25.
Se attualmente utilizzi PodSecurityPolicy nei cluster GKE, disattiva la funzionalità prima di eseguire l'upgrade a GKE versione 1.25 e successive.
Per saperne di più sul ritiro e sulla rimozione di PodSecurityPolicy, consulta la pagina relativa al ritiro di PodSecurityPolicy.
PodSecurity e PodSecurityPolicy
Il controller di ammissione PodSecurity è disponibile e abilitato per impostazione predefinita sui cluster che eseguono le seguenti versioni di GKE:
- Versione 1.25 o successive: stabile
- Versione 1.23 e versione 1.24: beta
PodSecurity consente di applicare le policy definite negli
standard di sicurezza dei pod
ai carichi di lavoro di cui è stato eseguito il deployment. PodSecurity ti consente di continuare a implementare le configurazioni di sicurezza a livello di pod consigliate nei cluster dopo la migrazione da PodSecurityPolicy. A differenza di PodSecurityPolicy, PodSecurity non supporta le configurazioni personalizzate.
Requisiti e limitazioni
PodSecurityè disponibile in versione beta in GKE 1.23 e 1.24 e in versione stabile in GKE 1.25 e versioni successive.PodSecuritynon termina i pod già in esecuzione sui nodi, anche se violano la policy applicata.PodSecuritynon modifica i campi. Se utilizzi campi di modifica in PodSecurityPolicy, modifica la specifica del pod per assicurarti che questi campi siano presenti quando esegui il deployment dei carichi di lavoro.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Assicurati di avere un cluster GKE Autopilot o Standard che esegue la versione 1.23 o successive.
- Per i cluster Autopilot, registrati a un canale di rilascio in cui la versione predefinita è 1.23 o successive.
- Per i cluster Standard, registrati a un canale di rilascio o esegui l'upgrade del cluster a una versione specifica.
- Controlla le risorse
PodSecurityPolicyper le configurazioni dei campi di modifica. Aggiungi questi campi ai manifest dei pod in modo che tutti i carichi di lavoro già in esecuzione sui nodi siano conformi a una policy definita negli standard di sicurezza dei pod. Per istruzioni, consulta Semplificare e standardizzare le policy di sicurezza dei pod.
Configurare il controller di ammissione PodSecurity nel cluster
Il controller di ammissione PodSecurity applica gli standard di sicurezza dei pod a livello di spazio dei nomi. Devi configurare il controller in modo che applichi una delle policy definite dagli standard di sicurezza dei pod in ogni spazio dei nomi. Sono disponibili le seguenti policy:
- Restricted: policy più restrittiva. È conforme alle best practice di hardening dei pod.
- Baseline: policy minimamente restrittiva che impedisce le escalation di privilegi note. Consente tutti i valori predefiniti per i campi nelle specifiche dei pod.
- Privileged: policy senza restrizioni che consente qualsiasi cosa, incluse le escalation di privilegi note. Applica questa policy con cautela.
Per eseguire la migrazione della configurazione di PodSecurityPolicy al controller di ammissione PodSecurity, procedi nel seguente modo in ogni spazio dei nomi del cluster. Questi passaggi sono descritti in dettaglio nelle sezioni che seguono.
- Applica la policy Restricted in modalità
dry-runallo spazio dei nomi e verifica la presenza di violazioni. - Se i pod violano la policy Restricted, applica la policy Baseline meno restrittiva in modalità
dry-runallo spazio dei nomi e verifica la presenza di violazioni. - Se i pod violano la policy Baseline, modifica le specifiche dei pod per correggere le violazioni.
- Quando la policy Baseline non restituisce più violazioni, applicala in modalità
enforceallo spazio dei nomi.
Per evitare potenziali tempi di inattività se PodSecurity rifiuta i nuovi pod, esegui questi passaggi in un ambiente di staging. In alternativa, puoi applicare la policy identificata in modalità audit anziché in modalità enforce ed esaminare gli audit log per trovare i potenziali pod rifiutati.
La modalità audit non applica la policy. GKE esegue il deployment
dei pod e aggiunge voci agli audit log di GKE.
Elencare tutti gli spazi dei nomi nel cluster
Recupera un elenco di tutti gli spazi dei nomi nel cluster. Ripeti i passaggi nelle sezioni seguenti per ogni spazio dei nomi nell'elenco:
kubectl get ns
Nelle seguenti versioni di GKE, GKE ignora le policy che applichi allo spazio dei nomi kube-system:
- 1.23.6-gke.1900 e versioni successive
- 1.24.0-gke.1200 e versioni successive
Nelle versioni precedenti di GKE, evita di applicare le policy in kube-system.
Applicare ogni policy degli standard di sicurezza dei pod in modalità dry-run
Nei passaggi seguenti, applicherai ogni policy in dry-run modalità, a partire
dalla policy Restricted più restrittiva. Se l'output mostra un avviso, modifica la specifica del pod che viola la policy o prova la policy Baseline meno restrittiva. Se l'output non mostra un avviso, puoi applicare la policy Baseline senza la modalità dry-run.
Applica la policy Restricted in modalità
dry-run:kubectl label --dry-run=server --overwrite ns NAMESPACE \ pod-security.kubernetes.io/enforce=restrictedSe un pod nello spazio dei nomi viola la policy Restricted, l'output è simile al seguente:
Warning: existing pods in namespace "NAMESPACE" violate the new PodSecurity enforce level "restricted:latest" namespace/NAMESPACE labeledSe la policy Restricted mostra un avviso, modifica i pod per correggere la violazione e riprova a eseguire il comando. In alternativa, prova la policy Baseline meno restrittiva nel passaggio successivo.
Applica la policy Baseline in modalità
dry-run:kubectl label --dry-run=server --overwrite ns NAMESPACE \ pod-security.kubernetes.io/enforce=baselineSe un pod nello spazio dei nomi viola la policy Baseline, l'output è simile al seguente:
Warning: existing pods in namespace "NAMESPACE" violate the new PodSecurity enforce level "baseline:latest" namespace/NAMESPACE labeled
Se i pod violano la policy Baseline, modificali per correggere le violazioni e ripeti questo passaggio finché GKE non mostra più un avviso.
Applicare la policy a uno spazio dei nomi
Quando identifichi la policy adatta a uno spazio dei nomi, applicala allo spazio dei nomi in modalità enforce:
kubectl label --overwrite ns NAMESPACE \
pod-security.kubernetes.io/enforce=POLICY
Sostituisci POLICY con il nome della policy, che può essere restricted, baseline o privileged.
Assicurati di ripetere i passaggi precedenti per ogni spazio dei nomi nel cluster.
Disattivare la funzionalità PodSecurityPolicy nel cluster
Dopo aver configurato il controller di ammissione PodSecurity per ogni spazio dei nomi nel cluster, disattiva la funzionalità PodSecurityPolicy:
gcloud beta container clusters update CLUSTER_NAME \
--no-enable-pod-security-policy
Sostituisci CLUSTER_NAME con il nome del cluster GKE.
Quando esegui l'upgrade del cluster a GKE versione 1.25, GKE rimuove automaticamente tutti gli oggetti PodSecurityPolicy rimanenti, inclusi quelli aggiunti da GKE, Policy Controller e tutti gli oggetti PodSecurityPolicy che hai definito in precedenza.
Consigli
- Se possibile, prova a rispettare la policy Restricted. Esegui un audit delle applicazioni per verificare se la configurazione può essere ulteriormente rafforzata.
- Puoi bloccare la modalità di sicurezza dei pod a una versione secondaria specifica di Kubernetes
aggiungendo l'etichetta
pod-security.kubernetes.io/MODE-version: VERSIONai comandikubectl labelnei passaggi precedenti. SostituisciVERSIONcon il numero di versione di Kubernetes, ad esempiov1.24. - Dopo aver disattivato la funzionalità PodSecurityPolicy, esamina le applicazioni in esecuzione per verificare la presenza di interruzioni o lacune nella configurazione di sicurezza.
- Dopo aver configurato
PodSecurity, aggiorna la procedura di creazione dello spazio dei nomi in modo da applicare automaticamente un'etichettaPodSecuritya tutti i nuovi spazi dei nomi. Per informazioni, consulta Esaminare la procedura di creazione dello spazio dei nomi.
Passaggi successivi
- Scopri di più sugli standard di sicurezza dei pod.
- Scopri di più sul controller di ammissione
PodSecurity. - Scopri come applicare policy di sicurezza personalizzate a livello di pod utilizzando Gatekeeper.
- Scopri di più sul ritiro di PodSecurityPolicy.