Sicurezza dei contenitori nel servizio Azure Kubernetes abilitata da Azure Arc
Si applica a: AKS su Azure Locale 22H2, AKS su Windows Server
Questo articolo descrive vari metodi per proteggere i contenitori usati per creare pacchetti e distribuire applicazioni ed evitare di introdurre vulnerabilità di sicurezza nel servizio Azure Kubernetes abilitato da Azure Arc.
I contenitori offrono vantaggi operativi e di sicurezza perché le applicazioni e i servizi sono separati all'interno di un ambiente. I contenitori consentono anche di ridurre gli effetti degli errori a livello di sistema a causa dell'astrazione, che garantisce il tempo di attività e impedisce attacchi che potrebbero compromettere applicazioni o servizi. I contenitori vengono in genere eseguiti su un livello astratto sopra il sistema operativo host e l'astrazione offre alcune barriere di separazione e l'opportunità di applicare un modello di difesa a più livelli.
È anche possibile configurare la sicurezza continua dei contenitori proteggendo la pipeline del contenitore, l'applicazione e l'ambiente di distribuzione del contenitore. Le sezioni seguenti descrivono alcune procedure consigliate per l'implementazione della sicurezza dei contenitori.
Proteggere le immagini
Per impedire l'accesso non autorizzato, ospitare le immagini in un registro sicuro e attendibile. Le immagini devono avere un certificato TLS con una CA radice attendibile e il Registro di sistema deve usare il controllo degli accessi in base al ruolo con autenticazione avanzata. È necessario includere una soluzione di analisi delle immagini durante la progettazione di CI/CD per la compilazione e il recapito del contenitore. La soluzione di analisi delle immagini consente di identificare vulnerabilità ed esposizioni comuni (CVE) e garantisce che le immagini sfruttabili non vengano distribuite senza correzione.
Protezione avanzata dell'ambiente host
Un aspetto importante della sicurezza dei contenitori è la necessità di rafforzare la sicurezza dei sistemi in cui sono in esecuzione i contenitori e il modo in cui agiscono durante il runtime. La sicurezza dei contenitori deve concentrarsi sull'intero stack, incluso l'host e i daemon. È consigliabile rimuovere i servizi dall'host non critici e non distribuire contenitori non conformi nell'ambiente. In questo modo, l'accesso all'host può verificarsi solo tramite i contenitori e il controllo è centralizzato nel daemon di contenitori, rimuovendo l'host dalla superficie di attacco. Questi passaggi sono particolarmente utili quando si usano server proxy per accedere ai contenitori, che possono ignorare accidentalmente i controlli di sicurezza dei contenitori.
Limitare le risorse del contenitore
Quando un contenitore viene compromesso, gli utenti malintenzionati potrebbero tentare di usare le risorse host sottostanti per eseguire attività dannose. È consigliabile impostare limiti di utilizzo della memoria e della CPU per ridurre al minimo l'impatto delle violazioni.
Proteggere correttamente i segreti
Un segreto è un oggetto contenente informazioni riservate che potrebbero essere passate tra l'host e il contenitore, ad esempio password, certificati SSL/TLS, chiavi private SSH, token, stringa di connessione e altri dati che non devono essere trasmessi in testo normale o archiviati non crittografati. È consigliabile mantenere tutti i segreti dalle immagini e montarli tramite il motore di orchestrazione dei contenitori o un gestore di segreti esterni.
Isolamento della pratica
Usare l'isolamento e non usare un utente con privilegi o un utente radice per eseguire l'applicazione in un contenitore. Evitare l'esecuzione di contenitori in modalità privilegiata perché in questo modo un utente malintenzionato può inoltrare facilmente i privilegi se il contenitore viene compromesso. Conoscere l'UID (codice di identificazione univoco) e il GID (Group Identification Code) dell'utente radice in un contenitore possono consentire a un utente malintenzionato di accedere e modificare i file scritti dalla radice nel computer host. È anche necessario usare il principio dei privilegi minimi in cui un'applicazione ha accesso solo ai segreti necessari. È possibile creare un utente dell'applicazione per eseguire il processo dell'applicazione.
Distribuire il monitoraggio della sicurezza del runtime
Poiché esiste ancora la possibilità di essere compromessi anche dopo aver preso precauzioni contro gli attacchi all'infrastruttura, è importante monitorare e registrare continuamente il comportamento dell'applicazione per prevenire e rilevare attività dannose. Strumenti come Prometheus offrono un mezzo efficace per monitorare l'infrastruttura.