Sicurezza Kubernetes: RBAC, policy di rete e sicurezza dei pod
Configuri i ruoli RBAC di Kubernetes, applichi policy di rete che limitino il traffico tra pod e applichi gli standard di sicurezza dei pod per limitare l'escalation dei privilegi.
Sicurezza Kubernetes: RBAC, policy di rete e sicurezza dei pod è una lezione Security+ Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Security+ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Security+ Academy include 4 lezioni in totale.
Panoramica della superficie di attacco di Kubernetes
Kubernetes orchestra workload containerizzati su larga scala, ma la sua complessità crea un'ampia superficie di attacco. Tra i componenti principali da proteggere vi sono: l'API Server (il piano di controllo centrale: la sua compromissione consente di controllare l'intero cluster), etcd (il database dello stato del cluster: memorizza i segreti in base64 e deve essere crittografato a riposo), il kubelet (l'agente del nodo: un'API kubelet non autenticata consente l'esecuzione arbitraria di pod), il container runtime (Docker/containerd) e l'infrastruttura di rete che collega tutti i pod. Chi sostiene Security+ dovrebbe comprendere che le configurazioni errate di Kubernetes sono tra i risultati più comuni delle valutazioni di sicurezza cloud.
RBAC: controllo degli accessi basato sui ruoli in Kubernetes
Il RBAC (Role-Based Access Control) di Kubernetes controlla quali utenti, account di servizio e processi possono eseguire determinate azioni su specifiche risorse API. Il modello comprende quattro oggetti: Role (autorizzazioni limitate a un namespace), ClusterRole (autorizzazioni a livello di cluster), RoleBinding (assegna un Role a un soggetto all'interno di un namespace) e ClusterRoleBinding (assegna un ClusterRole a un soggetto nell'intero cluster). Ogni comando kubectl viene tradotto in una chiamata API, verificata rispetto alle regole RBAC. Se RBAC non è configurato, qualsiasi utente autenticato (o account di servizio) potrebbe disporre dell'accesso amministrativo.
# Create a role allowing only pod reads in 'default' namespace
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
namespace: default
rules:
- apiGroups: ['']
resources: ['pods']
verbs: ['get', 'list', 'watch']Account di servizio e privilegio minimo
Ogni pod in Kubernetes viene eseguito con un service account, ovvero un'identità utilizzata per l'autenticazione all'API. Per impostazione predefinita, i pod usano il service account default del proprio namespace, che potrebbe disporre di autorizzazioni troppo ampie. Il principio del privilegio minimo richiede la creazione di account di servizio dedicati per ogni applicazione, con le sole autorizzazioni necessarie. Inoltre, impostare automountServiceAccountToken: false sui pod che non necessitano dell'accesso all'API impedisce il montaggio del token dell'account di servizio nel filesystem del pod, dove un'applicazione compromessa potrebbe utilizzarlo per effettuare chiamate API.
# Pod spec: disable service account token auto-mount
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
serviceAccountName: myapp-sa
automountServiceAccountToken: false
containers:
- name: myapp
image: myapp:v1.0Policy di rete: negazione predefinita
Per impostazione predefinita, in Kubernetes tutti i pod possono comunicare con tutti gli altri pod in qualsiasi namespace. Un pod compromesso può tentare immediatamente di raggiungere database, API interne e altri microservizi. Le risorse Kubernetes NetworkPolicy definiscono regole che limitano il traffico tra pod in base a label, namespace e porte. L'approccio consigliato consiste nell'applicare una policy di rete 'default deny all' in ogni namespace, seguita da regole di autorizzazione esplicite per i percorsi di comunicazione necessari. Si noti che NetworkPolicy richiede un plugin CNI che la supporti (Calico, Cilium, Weave): Kubernetes vanilla ignora NetworkPolicy in assenza di un CNI compatibile.
# Default deny all ingress and egress in a namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
- EgressPod Security Standards: sostituzione di PSP
I Pod Security Standards (PSS), introdotti in Kubernetes 1.23 e stabili dalla versione 1.25, sostituiscono i deprecati Pod Security Policy (PSP) con tre profili integrati applicabili a livello di namespace: Privileged (senza restrizioni, per i componenti di sistema), Baseline (previene escalation di privilegi note, come l'uso di container privilegiati e l'accesso alla rete dell'host) e Restricted (rafforzato, richiede utenti non root, elimina tutte le capabilities e impone filesystem root in sola lettura). I namespace vengono contrassegnati con label per applicare un livello di policy e i pod che lo violano vengono rifiutati in fase di admission.
# Label namespace to enforce 'restricted' pod security
kubectl label namespace production \
pod-security.kubernetes.io/enforce=restricted \
pod-security.kubernetes.io/audit=restricted \
pod-security.kubernetes.io/warn=restrictedGestione dei segreti in Kubernetes
I Secrets di Kubernetes memorizzano dati sensibili come password, token e certificati TLS. Per impostazione predefinita, i Secrets sono archiviati in etcd come valori codificati in base64, non crittografati. Chiunque possa leggere etcd o disponga di autorizzazioni RBAC sufficienti può decodificarli facilmente. Le best practice includono: abilitare la crittografia a riposo per etcd usando AES-GCM con una chiave memorizzata in un KMS (AWS KMS, GCP KMS), integrare un secrets manager esterno come HashiCorp Vault o AWS Secrets Manager tramite Secrets Store CSI Driver e limitare l'accesso ai Secret tramite RBAC, in modo che possano leggerli solo gli account di servizio che ne hanno bisogno.
# Enable etcd encryption at rest (encryption configuration)
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: <base64-encoded-32-byte-key>Admission controller: barriere di sicurezza
Gli admission controller sono plugin del server API di Kubernetes che intercettano le richieste API dopo l'autenticazione e l'autorizzazione, ma prima della persistenza dell'oggetto, consentendo di convalidare, modificare o rifiutare le richieste. Tra gli admission controller rilevanti per la sicurezza vi sono: PodSecurity (applica i Pod Security Standards), ImagePolicyWebhook (consente la verifica esterna della firma delle immagini), AlwaysPullImages (impone il pull di immagini aggiornate per impedire l'uso di immagini dannose presenti nella cache locale) e OPA/Gatekeeper (Open Policy Agent, la soluzione più flessibile, che consente di esprimere policy personalizzate nel linguaggio Rego per applicare qualsiasi regola di sicurezza aziendale).
Hardening dei componenti del cluster
È fondamentale rafforzare la sicurezza dei componenti del piano di controllo Kubernetes: il server API dovrebbe avere --anonymous-auth=false per disabilitare l'accesso non autenticato, --audit-log-path configurato per acquisire tutte le attività API e TLS per tutte le connessioni. Il kubelet dovrebbe avere --authorization-mode=Webhook (non AlwaysAllow) e l'autenticazione anonima disabilitata. etcd dovrebbe usare la crittografia TLS tra peer e client, avere l'accesso di rete limitato (ed essere raggiungibile solo dal server API) e proteggere i dati a riposo tramite crittografia. Il CIS Kubernetes Benchmark fornisce una checklist completa per tutte le impostazioni dei componenti.
# Check kubelet configuration for security issues
kubectl get --raw /api/v1/nodes/nodename/proxy/configz | jq '.kubeletconfig | {anonymousAuth: .authentication.anonymous.enabled, authorization: .authorization.mode}'Isolamento dei namespace e multi-tenancy
I namespace di Kubernetes forniscono una separazione logica delle risorse, ma da soli non costituiscono un confine di sicurezza forte: offrono principalmente un isolamento organizzativo. Per un vero isolamento multi-tenant (ad esempio, per i workload di clienti diversi) sono necessari controlli aggiuntivi: policy di rete per bloccare il traffico tra namespace, quote delle risorse per impedire attacchi DoS causati da tenant che consumano risorse eccessive, pool di nodi separati per tenant fortemente isolati oppure cluster dedicati per ciascun tenant. Molte organizzazioni usano gli Hierarchical Namespaces o soluzioni commerciali come vCluster per ottenere un isolamento multi-tenant più forte all'interno di un singolo cluster.
Registrazione degli audit e monitoraggio in fase di esecuzione
La registrazione degli audit di Kubernetes registra ogni richiesta API: chi l'ha effettuata, da dove, quale azione è stata richiesta e quale risorsa era interessata. I log di audit sono essenziali per le indagini forensi dopo un incidente di sicurezza e per rilevare comportamenti anomali, come associazioni di ruoli insolite, accessi ai secret o comandi exec nei pod di produzione. I log di audit devono essere trasmessi a un SIEM centralizzato. Falco fornisce il monitoraggio del comportamento dei container, mentre i servizi Kubernetes gestiti dal cloud (EKS, GKE, AKS) offrono l'integrazione nativa dei log di audit con le rispettive piattaforme di logging.
# Check recent kubectl exec events in audit log
grep '"verb":"create".*"resource":"pods".*"subresource":"exec"' /var/log/kubernetes/audit.log | tail -20Sicurezza della catena di approvvigionamento: provenienza delle immagini
La sicurezza della catena di approvvigionamento per Kubernetes garantisce che in produzione arrivino solo immagini attendibili e verificate. Le raccomandazioni CNCF sulla Supply Chain Security includono: verificare le firme delle immagini con Cosign prima della distribuzione (imponendo il controllo tramite admission controller), generare e verificare gli SBOM (Software Bills of Materials) per tutte le immagini dei container per tracciare la provenienza dei componenti, bloccare le immagini su digest (myimage@sha256:abc123) anziché su tag mutabili e analizzare tutti i chart Helm di terze parti alla ricerca di configurazioni errate e vulnerabilità prima della distribuzione.
# Pin image to digest for immutability
# Instead of:
image: nginx:latest
# Use:
image: nginx@sha256:a3e2a7a3d7f94e... # immutable digestVerifica rapida
Verifichi la Sua comprensione dei concetti di CompTIA Security+ (SY0-701) trattati in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che: RBAC di Kubernetes controlla l'accesso alle API tramite Roles, ClusterRoles e Bindings — applichi sempre il principio del privilegio minimo agli account di servizio; le configurazioni NetworkPolicy con negazione predefinita impediscono i movimenti laterali tra pod e namespace; e i Pod Security Standards impongono l'hardening dei container a livello di namespace, bloccando i container privilegiati, l'accesso alla rete dell'host e l'esecuzione come root. Nel prossimo argomento esamineremo la sicurezza serverless e le superfici di attacco a livello di funzione.
Impara Security+ Academy con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «Sicurezza Kubernetes: RBAC, policy di rete e sicurezza dei pod» è gratuita?
Sì — il testo completo di «Sicurezza Kubernetes: RBAC, policy di rete e sicurezza dei pod» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Security+ Academy, passa a CoddyKit PRO. Il corso Security+ Academy include 4 lezioni in totale.
Cosa imparerò in «Sicurezza Kubernetes: RBAC, policy di rete e sicurezza dei pod»?
Configuri i ruoli RBAC di Kubernetes, applichi policy di rete che limitino il traffico tra pod e applichi gli standard di sicurezza dei pod per limitare l'escalation dei privilegi. Eserciti Security+ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Security+ Academy?
Non è richiesta alcuna esperienza precedente. Security+ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Sicurezza Kubernetes: RBAC, policy di rete e sicurezza dei pod»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Security+ Academy?
Sì. Ogni lezione Security+ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Sicurezza dei container: hardening delle immagini e protezione a runtime
- Sicurezza Kubernetes: RBAC, policy di rete e sicurezza dei pod
- Sicurezza del serverless e delle funzioni
- Scansione di sicurezza dell'infrastruttura come codice