Concetti relativi alla sicurezza per le applicazioni e i cluster nel servizio Azure Kubernetes

La sicurezza dei contenitori protegge l'intera pipeline end-to-end dalla compilazione ai carichi di lavoro dell'applicazione in esecuzione in servizio Azure Kubernetes (servizio Azure Kubernetes).

Secure Supply Chain include l'ambiente di compilazione e il registro.

Kubernetes include componenti di sicurezza, ad esempio gli standard di sicurezza dei pod e i segreti. Azure include componenti come Active Directory, Microsoft Defender per contenitori, Criteri di Azure, Azure Key Vault, gruppi di sicurezza di rete e aggiornamenti del cluster orchestrati. Il servizio Azure Kubernetes combina questi componenti di sicurezza per:

  • Fornire una storia completa di autenticazione e autorizzazione.
  • Applicare Criteri di Azure predefiniti del servizio Azure Kubernetes per proteggere le applicazioni.
  • Informazioni dettagliate end-to-end dalla compilazione tramite l'applicazione con Microsoft Defender per contenitori.
  • Mantenere il cluster del servizio Azure Kubernetes che esegue gli aggiornamenti più recenti della sicurezza del sistema operativo e le versioni di Kubernetes.
  • Fornire il traffico sicuro dei pod e l'accesso alle credenziali sensibili.

Questo articolo presenta i concetti di base che proteggono le applicazioni nel servizio Azure Kubernetes.

Sicurezza della compilazione

Come punto di ingresso per la supply chain, è importante eseguire l'analisi statica delle compilazioni di immagini prima che vengano alzate di livello nella pipeline. Ciò include la valutazione della vulnerabilità e della conformità. Non si tratta di un errore di compilazione perché presenta una vulnerabilità, in quanto interrompe lo sviluppo. Si tratta di esaminare lo stato fornitore per segmentare in base alle vulnerabilità che possono essere eseguite dai team di sviluppo. Usare anche i periodi di tolleranza per consentire agli sviluppatori di risolvere i problemi identificati.

Sicurezza del Registro di sistema

La valutazione dello stato di vulnerabilità dell'immagine nel Registro di sistema rileva la deriva e rileva anche le immagini che non provengono dall'ambiente di compilazione. Usare Notary V2 per allegare firme alle immagini per assicurarsi che le distribuzioni provengano da una posizione attendibile.

Sicurezza del cluster

Nel servizio Azure Kubernetes i componenti master kubernetes fanno parte del servizio gestito fornito, gestito e gestito da Microsoft. Ogni cluster del servizio Azure Kubernetes ha un proprio master Kubernetes a tenant singolo per fornire il server API, l'utilità di pianificazione e così via. Per altre informazioni, vedere Gestione delle vulnerabilità per servizio Azure Kubernetes.

Per impostazione predefinita, il server API di Kubernetes usa un indirizzo IP pubblico e il nome di dominio completo (FQDN). È possibile limitare l'accesso all'endpoint del server dell'API usando intervalli IP autorizzati. È anche possibile creare un cluster completamente privato per limitare l'accesso del server dell'API alla rete virtuale.

È possibile controllare l'accesso al server API usando il controllo degli accessi in base al ruolo di Kubernetes e il controllo degli accessi in base al ruolo di Azure. Per altre informazioni, vedere Integrazione di Microsoft Entra con il servizio Azure Kubernetes.

Sicurezza del nodo

I nodi del servizio Azure Kubernetes sono macchine virtuali di Azure gestite e gestite.

  • I nodi Linux eseguono versioni ottimizzate di Ubuntu o Linux di Azure.
  • I nodi di Windows Server eseguono una versione ottimizzata di Windows Server 2019 usando il runtime del containerd contenitore o Docker.

Quando un cluster del servizio Azure Kubernetes viene creato o aumentato, i nodi vengono distribuiti automaticamente con gli aggiornamenti e le configurazioni di sicurezza del sistema operativo più recenti.

Nota

Cluster del servizio Azure Kubernetes in esecuzione:

  • Kubernetes versione 1.19 e successive: i pool di nodi Linux usano containerd come runtime del contenitore. I pool di nodi di Windows Server 2019 usano containerd come runtime del contenitore, attualmente in anteprima. Per ulteriori informazioni, consultare Aggiungere un pool di nodi di Windows Server con containerd.
  • Kubernetes versione 1.19 e precedenti: i pool di nodi Linux usano Docker come runtime del contenitore. I pool di nodi di Windows Server 2019 usano Docker per il runtime del contenitore predefinito.

Per altre informazioni sul processo di aggiornamento della sicurezza per i nodi di lavoro Linux e Windows, vedere Nodi di applicazione di patch alla sicurezza.

I cluster del servizio Azure Kubernetes che eseguono macchine virtuali di seconda generazione includono il supporto per l'avvio attendibile (anteprima), che protegge dalle tecniche di attacco avanzate e persistenti combinando tecnologie che possono essere abilitate in modo indipendente, ad esempio l'avvio protetto e la versione virtualizzata del modulo VTPM (Trusted Platform Module). Amministrazione istrator può distribuire nodi di lavoro del servizio Azure Kubernetes con bootloader verificati e firmati, kernel del sistema operativo e driver per garantire l'integrità dell'intera catena di avvio della macchina virtuale sottostante.

Autorizzazione del nodo

L'autorizzazione del nodo è una modalità di autorizzazione speciale che autorizza in modo specifico le richieste api kubelet a proteggersi dagli attacchi East-West. L'autorizzazione del nodo è abilitata per impostazione predefinita nei cluster del servizio Azure Kubernetes 1.24 e versioni successive.

Distribuzione del nodo

I nodi vengono distribuiti in una subnet di rete virtuale privata, senza indirizzi IP pubblici assegnati. Ai fini della risoluzione dei problemi e della gestione, SSH è abilitato per impostazione predefinita e accessibile solo tramite l'indirizzo IP interno. La disabilitazione di SSH durante la creazione del cluster e del pool di nodi o per un cluster o un pool di nodi esistente è disponibile in anteprima. Per altre informazioni, vedere Gestire l'accesso SSH.

Archiviazione dei nodi

Per rendere disponibile l'archiviazione, i nodi usano Managed Disks di Azure. Per la maggior parte delle dimensioni dei nodi della macchina virtuale, i dischi gestiti di Azure sono dischi Premium supportati da unità SSD a prestazioni elevate. I dati archiviati nei dischi gestiti vengono crittografati automaticamente inattivi all'interno della piattaforma Azure. Per migliorare la ridondanza, i dischi gestiti di Azure vengono replicati in modo sicuro all'interno del data center di Azure.

Carichi di lavoro multi-tenant ostili

Attualmente, gli ambienti Kubernetes non sono sicuri per l'utilizzo multi-tenant ostile. Funzionalità di sicurezza aggiuntive, ad esempio i criteri di sicurezza dei pod o il controllo degli accessi in base al ruolo di Kubernetes per i nodi, bloccano in modo efficiente gli exploit. Per una vera sicurezza quando si eseguono carichi di lavoro multi-tenant ostili, considerare attendibile solo un hypervisor. Il dominio di sicurezza per Kubernetes diventa l'intero cluster, non un singolo nodo.

Per questi tipi di carichi di lavoro multi-tenant ostili, è consigliabile usare cluster isolati fisicamente. Per altre informazioni sui modi per isolare i carichi di lavoro, vedere Procedure consigliate per l'isolamento del cluster nel servizio Azure Kubernetes.

Isolamento del calcolo

A causa dei requisiti normativi o di conformità, alcuni carichi di lavoro possono richiedere un livello elevato di isolamento da altri carichi di lavoro dei clienti. Per questi carichi di lavoro, Azure offre:

  • Contenitori isolati del kernel da usare come nodi agente in un cluster del servizio Azure Kubernetes. Questi contenitori sono completamente isolati in un tipo di hardware specifico e isolati dall'infrastruttura host di Azure, dal sistema operativo host e dall'hypervisor. Sono dedicati a un singolo cliente. Selezionare una delle dimensioni delle macchine virtuali isolate come dimensione del nodo durante la creazione di un cluster del servizio Azure Kubernetes o l'aggiunta di un pool di nodi.
  • I contenitori riservati (anteprima), basati anche su contenitori riservati Kata, crittografano la memoria del contenitore e impediscono che i dati in memoria durante il calcolo siano in testo non crittografato, in formato leggibile e manomissione. Consente di isolare i contenitori da altri gruppi di contenitori/pod, nonché dal kernel del sistema operativo del nodo della macchina virtuale. I contenitori riservati (anteprima) usano la crittografia della memoria basata su hardware (edizione Standard V-SNP).
  • Il sandboxing dei pod (anteprima) fornisce un limite di isolamento tra l'applicazione contenitore e il kernel condiviso e le risorse di calcolo (CPU, memoria e rete) dell'host contenitore.

Sicurezza di rete

Per la connettività e sicurezza con le reti locali, è possibile distribuire il cluster del servizio Azure Kubernetes nelle subnet di rete virtuale di Azure esistenti. Queste reti virtuali si connettono alla rete locale usando la VPN da sito a sito di Azure o ExpressRoute. Definire controller di ingresso Kubernetes con indirizzi IP interni privati per limitare l'accesso ai servizi alla connessione di rete interna.

Gruppi di sicurezza di rete di Azure

Per filtrare il flusso del traffico di rete virtuale, Azure usa le regole del gruppo di sicurezza di rete. Queste regole definiscono gli intervalli IP di origine e di destinazione, le porte e i protocolli consentiti o negati l'accesso alle risorse. Vengono create regole predefinite per consentire il traffico TLS al server dell'API Kubernetes. È possibile creare servizi con servizi di bilanciamento del carico, mapping delle porte o route in ingresso. Il servizio Azure Kubernetes modifica automaticamente il gruppo di sicurezza di rete per il flusso del traffico.

Se si specifica una subnet personalizzata per il cluster del servizio Azure Kubernetes ,indipendentemente dall'uso di Azure CNI o Kubenet, non modificare il gruppo di sicurezza di rete a livello di scheda di interfaccia di rete gestito dal servizio Azure Kubernetes. Creare invece più gruppi di sicurezza di rete a livello di subnet per modificare il flusso del traffico. Assicurarsi che non interferiscano con il traffico necessario per la gestione del cluster, ad esempio l'accesso al servizio di bilanciamento del carico, la comunicazione con il piano di controllo o l'uscita.

Criteri di rete di Kubernetes

Per limitare il traffico di rete tra i pod nel cluster, il servizio Azure Kubernetes offre supporto per i criteri di rete Kubernetes. Con i criteri di rete, è possibile consentire o negare percorsi di rete specifici all'interno del cluster in base agli spazi dei nomi e ai selettori di etichetta.

Sicurezza delle applicazioni

Per proteggere i pod in esecuzione nel servizio Azure Kubernetes, prendere in considerazione Microsoft Defender per contenitori per rilevare e limitare gli attacchi informatici contro le applicazioni in esecuzione nei pod. Eseguire un'analisi continua per rilevare la deriva nello stato di vulnerabilità dell'applicazione e implementare un processo "blue/green/canary" per applicare patch e sostituire le immagini vulnerabili.

Segreti di Kubernetes

Con un segreto Kubernetes si inserisce dati sensibili in pod, ad esempio credenziali di accesso o chiavi.

  1. Creare un segreto usando l'API Kubernetes.
  2. Definire il pod o la distribuzione e richiedere un segreto specifico.
    • I segreti vengono forniti solo ai nodi con un pod pianificato che li richiede.
    • Il segreto viene archiviato in tmpfs, non scritto su disco.
  3. Quando si elimina l'ultimo pod in un nodo che richiede un segreto, il segreto viene eliminato dal tmpfs del nodo.
    • I segreti vengono archiviati all'interno di uno spazio dei nomi specificato e sono accessibili solo dai pod all'interno dello stesso spazio dei nomi.

L'uso dei segreti riduce le informazioni riservate definite nel manifesto YAML del pod o del servizio. Si richiede invece il segreto archiviato nel server dell'API di Kubernetes come parte del manifesto YAML. Questo approccio fornisce solo l'accesso del pod specifico al segreto.

Nota

I file manifesto dei segreti non elaborati contengono i dati segreti in formato Base64. Per altre informazioni, vedere la documentazione ufficiale. Considerare questi file come informazioni riservate e non eseguirne mai il commit nel controllo del codice sorgente.

I segreti Kubernetes vengono archiviati in etcd, un archivio chiave-valore distribuito. Il servizio Azure Kubernetes gestisce completamente l'archivio etcd e i dati vengono crittografati inattivi all'interno della piattaforma Azure.

Passaggi successivi

Per acquisire familiarità con la protezione dei cluster del servizio Azure Kubernetes, vedere Aggiornare un cluster del servizio Azure Kubernetes.

Per le procedure consigliate associate, vedere Procedure consigliate per la sicurezza e gli aggiornamenti del cluster nel servizio Azure Kubernetes e Procedure consigliate per la sicurezza dei pod nel servizio Azure Kubernetes.

Per altre informazioni sui concetti di base di Kubernetes e del servizio Azure Kubernetes, vedere: