Account Accedi
Kubernetes illustration
Vai al paragrafo

Come gestire la sicurezza di Kubernetes

Copia URL

Per gestire la sicurezza di Kubernetes è necessario eliminare le vulnerabilità di sicurezza note durante la fase di creazione, correggere gli errori di configurazione durante la fase di generazione/deployment e rispondere alle minacce durante il runtime. Questo è quanto emerge dall'ultimo report sullo stato della sicurezza di Kubernetes e dei container, in base al quale il 24% dei problemi gravi di sicurezza dei container è costituito da vulnerabilità che possono essere eliminate, quasi il 70% dipende da errori di configurazione e il 27% è rappresentato da incidenti di sicurezza al runtime.

I container sono una tecnologia ampiamente diffusa

Kubernetes è una piattaforma open source per l'orchestrazione dei container, che consente di gestire centinaia (a volte migliaia) di container Linux® organizzati in cluster. Fa ampio uso delle interfacce di programmazione delle applicazioni (API) che connettono i microservizi containerizzati. La sua natura distribuita impedisce di identificare velocemente i container che possono presentare vulnerabilità o errori di configurazione e quelli che espongono l'azienda ai rischi più gravi.

Per risolvere il problema, è fondamentale ottenere una vista esaustiva dei deployment containerizzati al fine di acquisire gli eventi critici a livello di sistema generati nei singoli container.

Potenziali errori di utilizzo di immagini e registri

Le immagini container (o immagini base) sono modelli immutabili che possono essere utilizzati per creare nuovi container. Le nuove immagini container copiate possono essere quindi modificate in modo da soddisfare esigenze specifiche.

Il problema può essere risolto configurando policy che determinano la modalità con cui le immagini vengono create e memorizzate nei relativi registri. Le immagini base devono essere testate, approvate e scansionate regolarmente. Inoltre, solo le immagini provenienti da registri di immagini consentiti devono essere utilizzate per avviare i container in un ambiente Kubernetes.

Comunicazione libera fra container

Per funzionare correttamente, container e pod devono comunicare fra loro all'interno dei deployment, ma anche con endpoint interni ed esterni. Se un hacker riesce a violare un container, la sua capacità di movimento all'interno dell'ambiente è direttamente correlata alla possibilità del container di comunicare con gli altri container e pod. In un ambiente caratterizzato da un elevato numero di container, potrebbe risultare impossibile implementare la segmentazione della rete a causa delle difficoltà legate alla configurazione manuale di tali policy.

Il problema può essere risolto monitorando il traffico scambiato fra spazi dei nomi, deployment e pod, al fine di identificarne la parte effettivamente consentita.

Policy di rete predefinite per i container

Per impostazione predefinita, i deployment Kubernetes non applicano una policy di rete a un pod, che costituisce la più piccola unità di un'applicazione Kubernetes. Le policy di rete hanno un comportamento simile a quello delle regole di un firewall, poiché controllano la modalità di comunicazione dei pod. Senza policy di rete, tutti i pod possono comunicare con qualsiasi altro pod. 

Per risolvere il problema è possibile definire policy di rete che limitano la comunicazione fra pod solo agli asset prestabiliti e montare i segreti in volumi di sola lettura all'interno dei container, anziché passarli sotto forma di variabili di ambiente.

Conformità di container e Kubernetes

Come qualsiasi altro ambiente IT, anche gli ambienti cloud native basati su Kubernetes devono rispettare le procedure consigliate di sicurezza, gli standard settoriali, i benchmark e le policy aziendali interne, dimostrando anche la relativa conformità. A volte questo richiede l'adattamento delle strategie di conformità, per consentire all'ambiente Kubernetes di rispondere a controlli originariamente concepiti per le architettura applicative tradizionali.

Per risolvere il problema, è possibile monitorare il rispetto della conformità e automatizzare gli audit.

Runtime

Kubernetes è un'infrastruttura immutabile. Non è possibile applicare patch durante il runtime dei container, perché i container in esecuzione devono essere distrutti e ricreati. I container compromessi possono eseguire processi dannosi, come il mining di criptovalute e la scansione delle porte.

Per risolvere il problema, è possibile distruggere tutti i container violati o in esecuzione, ricreare un'immagine container integra e quindi riavviarla.

La sicurezza di Kubernetes inizia durante la fase di creazione, generando immagini base affidabili e adottando processi di scansione delle vulnerabilità.

  • Usa immagini base minime. Evita di usare immagini contenenti shell o gestori di pacchetti del sistema operativo, che potrebbero presentare vulnerabilità sconosciute, o rimuovi i gestori di pacchetti in seguito.

  • Non aggiungere componenti non necessari. Come regola generale, gli strumenti comuni possono diventare rischi per la sicurezza quando vengono inclusi nelle immagini.

  • Usa solo immagini aggiornate. Aggiorna le versioni dei componenti.

  • Usa uno scanner di immagini. Identifica le vulnerabilità all'interno delle immagini, suddivise per livello.

  • Integra la sicurezza nelle pipeline CI/CD. Automatizza un elemento ripetibile della sicurezza che impedirebbe la creazione delle build per l'integrazione continua e genera avvisi per le vulnerabilità gravi ma eliminabili.

  • Etichetta le vulnerabilità permanenti. Aggiungi all'elenco delle vulnerabilità consentite le vulnerabilità che non possono essere eliminate ma non sono critiche o che non è essenziale eliminare immediatamente. 

  • Implementa misure di difesa avanzate. Standardizza i controlli delle policy e i flussi di lavoro di correzione per rilevare e aggiornare le immagini vulnerabili.

Configura la sicurezza dell'infrastruttura Kubernetes prima del deployment dei carichi di lavoro. A tale scopo, occorre innanzitutto conoscere a fondo il processo di deployment, ovvero gli elementi da distribuire (immagini, componenti, pod), dove verranno distribuiti (cluster, spazi dei nomi e nodi), come verranno distribuiti (privilegi, policy di comunicazione, misure di sicurezza applicate), le risorse a cui hanno accesso (segreti, volumi) e gli standard di conformità.

  • Usa gli spazi dei nomi. La suddivisione dei carichi di lavoro in spazi dei nomi può aiutare a contenere gli attacchi e limitare le conseguenze degli errori o delle azioni distruttive eseguite dagli utenti autorizzati.

  • Usa le policy di rete. Per impostazione predefinita, Kubernetes consente a tutti i pod di contattare qualsiasi altro pod, ma tale comportamento può essere modificato tramite la segmentazione della rete.

  • Limita le autorizzazioni di accesso ai segreti. Monta solo i segreti effettivamente necessari ai deployment.

  • Valuta i privilegi dei container. Fornisci esclusivamente le funzionalità, i ruoli e i privilegi necessari al container per svolgere la propria funzione. 

  • Verifica la provenienza delle immagini. Usa solo immagini provenienti da registri noti.

  • Analizza i deployment. Applica le policy in base ai risultati della scansione. 

  • Utilizza etichette e annotazioni. Aggiungi ai deployment un'etichetta o un'annotazione con il recapito del responsabile del team per un'applicazione containerizzata, in modo da semplificare il triage.

  • Abilita il controllo degli accessi basato sui ruoli (RBAC). RBAC controlla l'autorizzazione degli account utente e di servizio ad accedere al server API Kubernetes di un cluster.

Adottando un approccio proattivo alla sicurezza durante le fasi di creazione e deployment è possibile ridurre la probabilità di un incidente di sicurezza al runtime, ma per identificare e rispondere alle minacce durante il runtime occorre un monitoraggio continuo delle attività di processi e delle comunicazioni di rete.

  • Usa le informazioni sul contesto. Usa le informazioni raccolte durante le fasi di creazione e deployment in Kubernetes per valutare l'attività osservata rispetto a quella prevista in fase di runtime al fine di rilevare i comportamenti sospetti.

  • Analizza i deployment in esecuzione. Monitora i deployment in esecuzione per ricercare le vulnerabilità scoperte di recente e rilevate nelle immagini container.

  • Usa i controlli integrati. Configura il contesto di sicurezza per i pod in modo da limitarne le capacità.

  • Monitora il traffico di rete. Osserva e confronta il traffico di rete in tempo reale con quello consentito dalle policy di rete di Kubernetes al fine di identificare le comunicazioni impreviste.

  • Usa gli elenchi dei componenti consentiti. Identifica i processi eseguiti durante la normale fase di runtime dell'app per creare un elenco di componenti consentiti.

  • Confronta l'attività di runtime nei pod distribuiti con modalità simili. Le repliche che presentano discrepanze rilevanti devono essere analizzate.

  • Riduci a zero i pod sospetti. Usa i controlli nativi di Kubernetes per contenere le violazioni, richiedendo automaticamente a Kubernetes di ridurre a zero i pod sospetti o di distruggere e riavviare le istanze.

La sicurezza si estende oltre le immagini e i carichi di lavoro, per includere l'intera infrastruttura Kubernetes, ovvero i cluster, i nodi, il motore container e persino i cloud.

  • Applica gli aggiornamenti di Kubernetes. Durante l'aggiornamento della distribuzione di Kubernetes in uso vengono applicate le patch di sicurezza e installati nuovi strumenti di sicurezza.

  • Configura il server API Kubernetes. Disabilita l'accesso anonimo/non autenticato e utilizza la crittografia TLS per le connessioni fra i kubelet e il server API.

  • Proteggi etcd. etcd è un archivio di coppie chiave-valore utilizzato da Kubernetes per accedere ai dati. Proteggi il kubelet. Disabilita l'accesso anonimo al kubelet, avviandolo con il flag --anonymous-auth=false, e utilizza il controller di ammissione NodeRestriction per limitare le risorse a cui può accedere.

Sicurezza del cloud

Indipendentemente dal tipo di cloud (pubblico, privato, ibrido o multicloud) che ospita i container o esegue Kubernetes, l'utente del cloud (non il provider di servizi cloud) ha sempre la responsabilità di proteggere il carico di lavoro Kubernetes, che include:

  • Immagini container: sorgenti, contenuto e vulnerabilità

  • Deployment: servizi di rete, storage e privilegi

  • Gestione della configurazione: ruoli, gruppi, associazioni ai ruoli e account di servizio

  • Applicazione: gestione dei segreti, etichette e annotazioni

  • Segmentazione della rete: policy di rete nel cluster Kubernetes

  • Runtime: rilevamento delle minacce e risposta agli incidenti

L'uso di container e Kubernetes non modifica il tuo obiettivo di sicurezza, che rimane sempre quello di ridurre le vulnerabilità.

  • Integra la sicurezza nelle prime fase del ciclo di vita dei container. La sicurezza dovrebbe consentire ai team di sviluppo e DevOps di creare e distribuire in modo affidabile applicazioni predisposte per l'ambiente di produzione.

  • Usa i controlli di sicurezza nativi di Kubernetes. I controlli nativi evitano i conflitti tra i controlli di sicurezza e l'agente di orchestrazione

  • Consenti a Kubernetes di privilegiare la correzione.

Keep reading

ARTICOLO

Container e VM

I container Linux e le macchine virtuali (VM) sono entrambi pacchetti di ambienti di elaborazione che combinano vari componenti IT e li isolano dal resto del sistema.

ARTICOLO

Cos'è l'orchestrazione dei container?

Definiamo orchestrazione dei container l'automazione dei processi di deployment, gestione, scalabilità e networking dei container.

ARTICOLO

Cos'è un container Linux?

Un container Linux è un insieme di processi, isolati dal resto del sistema, che esegue un'immagine distinta contenente tutti i file necessari per supportare tali processi.

Scopri di più sui container

Prodotti

Red Hat OpenShift

Una piattaforma container enterprise-ready basata su Kubernetes, che consente di automatizzare le operazioni nell'intero stack tecnologico per gestire deployment di cloud ibrido, multicloud e all'edge.

Risorse

Formazione

Corso di formazione gratuito

Running Containers with Red Hat Technical Overview

Corso di formazione gratuito

Containers, Kubernetes and Red Hat OpenShift Technical Overview

Corso di formazione gratuito

Developing Cloud-Native Applications with Microservices Architectures

Illustration - mail

Ricevi contenuti simili

Iscriviti a Red Hat Shares, la nostra newsletter gratuita.