I container sono attualmente sulle scrivanie di ogni CIO come uno dei temi più caldi in ambito cloud e trasformazione digitale. Questa tecnologia si pone come una interessante alternativa alla classica virtualizzazione e permette l’esecuzione di una applicazione, e delle sue relative dipendenze, in processi isolati dalle risorse infrastrutturali sottostanti.
La differenza fondamentale tra la tecnologia container e la classica virtualizzazione si trova a livello del sistema operativo. Nei container, infatti, il sistema operativo è condiviso tra tutte le istanze in esecuzione su di esso, garantendo una forte riduzione delle risorse utilizzate in termini di capacità computazionale e memoria.
Architettura della tecnologia in un contesto di virtualizzazione e di containerizzazione.
Indice degli argomenti
Storia e trend di mercato dei container
Esattamente come le prime soluzioni cloud, nate dall’evoluzione di concetti sviluppati decadi prima come il Grid Computing e l’Utility Computing, anche i container fondano le loro radici alla fine degli Anni 70. Nel 1979 Unix implementa il comando Chroot che permette la creazione di spazi isolati all’interno dello storage e può essere a tutti gli effetti considerato l’antenato dei container.
Solo all’inizio degli anni 2000, con il lancio di FreeBSD Jail e Linux VServer, inizia nei data center la diffusione di soluzioni in grado di partizionare ed isolare risorse computazionali in Virtual Private Server (VPS). Il 2013 e il 2014 rappresentano una svolta fondamentale con il lancio della soluzione Dockers e del sistema di orchestrazione Kubernetes che rappresentano oggi lo standard de facto del mondo container.
I diversi benefici forniti dall’adozione di soluzioni container stanno spingendo le aziende a pianificare progetti di migrazione su questa “nuova” soluzione cloud. Solamente negli ultimi due anni, infatti, la soluzione Docker è stata adottata con successo da aziende del calibro di PayPal, Visa, Vodafone, General Electric, GlaxoSmithKline ed Expedia. I principali analisti di mercato, inoltre, prevedono una crescita costante dell’adozione di soluzioni container che aumenterà di oltre il 120% da oggi al 2021 (Figura 2).
Questa crescita è supportata da alcuni scenari che hanno tipicamente come target le soluzioni container:
- migrazione di applicazioni legacy: la migrazione di applicazioni legacy su soluzioni cloud è spesso complessa e richiede diverse customizzazioni per garantire la compatibilità con la piattaforma cloud selezionata. L’adozione dei container permette di impacchettare una applicazione e le librerie necessarie alla sua esecuzione in modo rapido, garantendo così una più facile migrazione verso ambienti cloud;
- creazione di un ambiente multi-cloud: la forte standardizzazione e la portabilità dei container facilitano la creazione di ambienti ibridi e multi-cloud. Tutti i principali provider cloud pubblici hanno infatti a catalogo la propria soluzione Kubernetes in grado di orchestrare l’esecuzione e la migrazione dei container;
- consolidamento infrastrutturale: la virtualizzazione della capacità computazione abilita le migrazioni physical-to-virtual (P2V) necessarie al consolidamento dei data center e alla riduzione dello spazio utilizzato e dei consumi energetici. Questo tipo di migrazione “a caldo” garantisce la continuità operativa, velocizzando di molto la migrazione degli ambienti di produzione;
- adozione di metodologie DevOps: i container facilitano l’adozione di metodologie DevOps supportando l’intera pipeline di sviluppo ed abilitando rilasci automatici ed incrementali direttamente nell’ambiente di produzione.
Container security: i principali benefici della tecnologia
L’enorme diffusione della tecnologia container è supportata dalla sua complementarietà alla classica virtualizzazione e da una serie di benefici garantiti dalla sua adozione:
- implementazione rapida: ogni applicazione viene compressa in un singolo componente che può essere facilmente configurato e rilasciato attraverso riga di comando. Essendo il container totalmente auto-consistente, non è necessario procedere a lunghe configurazioni dell’ambiente di produzione;
- scalabilità: la scalabilità orizzontale può essere facilmente gestita attraverso la riconfigurazione dell’architettura del singolo container, aumentandone le risorse computazionali dedicate. La scalabilità verticale, invece, può essere automatizzata attraverso l’implementazione di un orchestratore che duplicherà il container in esecuzione creando un pool di istanze in cluster;
- portabilità: grazie alla forte standardizzazione della soluzione, i container facilitano la portabilità delle applicazioni, semplificandone enormemente il ciclo di sviluppo, test e rilascio. Anche il rilascio di nuove funzioni è reso più semplice, eleggendo così i container alla piattaforma preferita per supportare un approccio di Continuous Integration (CI) e Continuous Delivery (CD);
- isolamento: ogni applicazione è isolata dalle altre in esecuzione sulla stessa infrastruttura fisica e tutte le componenti computazionali sono virtualizzati a livello di sistema operativo. Le risorse virtuali possono essere assegnate in modo preciso e limitato ad ogni applicazione, eliminando totalmente la gestione di dipendenze e conflitti per l’accesso alle risorse;
- efficienza: il consumo di risorse è fortemente limitato grazie alla condivisione di un unico sistema operativo e la virtualizzazione dei soli componenti necessari all’esecuzione dell’applicazione. Inoltre, la ridotta dimensione delle immagini permette tempi di avvio notevolmente più brevi di quelli necessari da una macchina virtuale.
Principali problemi di sicurezza dei container
Così come “non è tutto ora quello che luccica”, anche i container non sono la soluzione magica per una adozione efficace della tecnologia cloud. Infatti, le funzioni che abilitano i principali benefici dei container comportano anche delle problematiche di sicurezza che devono essere opportunamente gestite. Ad esempio, la condivisione di un unico sistema operativo aumenta la possibilità di un attacco distribuito a tutti i container e l’utilizzo di agenti di sicurezza tradizionali (host-based) necessitano particolari configurazioni per implementare policy di sicurezza diverse tra le varie applicazioni. Le principali comunità di esperti di sicurezza informatica hanno individuato cinque principali punti di attenzione per una adozione sicura dei container:
- exploit del kernel: la condivisione del kernel della macchina host espone, in caso di un attacco che sfrutti un exploit del sistema operativo, tutti container basati su di essa. Questo rischio è invece fortemente mitigato dalla classica virtualizzazione basata su hypervisor in quanto aggiunge un ulteriore livello prima di raggiungere gli applicativi in esecuzione. Negli ambienti container è quindi di fondamentale importanza il patching e l’hardening del sistema operativo host;
- attacchi Denial of Service (DoS): nel caso in cui un container avesse la possibilità di accedere a risorse illimitate sul sistema host, lo sfruttamento di una vulnerabilità o un errore di programmazione dell’applicazione, potrebbe monopolizzare le risorse computazionali disponibili impedendo l’accesso di altri container a CPU e RAM e causando un attacco DoS. Questo scenario può essere prevenuto configurando opportunamente l’allocazione di risorse dedicate ad ogni container e i principali parametri per abilitare una efficiente scalabilità orizzontale e verticale;
- container breakout: in caso di un bug presente all’interno di una applicazione, un utente potrebbe scalare la piramide di privilegi sino al livello di root, ottenendo accesso con gli stessi privilegi anche a livello host. Malgrado la remota possibilità di questo evento, è necessario pianificare controlli periodici per validare la robustezza e la sicurezza della soluzione container in produzione;
- immagini infette: le immagini standard dei container (build) possono essere infettate con malware o presentare vulnerabilità conosciute. È fondamentale mantenere sempre le immagini dei container aggiornate all’ultima versione disponibile ed effettuare dei controlli periodici sulla sicurezza di queste attraverso opportune scansioni;
- segreti compromessi: durante l’esecuzione delle applicazioni il container accede periodicamente ad informazioni sensibili, chiavi API e credenziali. L’accesso indesiderato a queste informazioni comprometterebbe l’intera sicurezza dei servizi in esecuzione.
Container security: qualche utile consiglio
Il team di sicurezza IT deve essere ingaggiato durante la fase di valutazione della soluzione container per garantire la security by design e pianificare un piano per il controllo della robustezza e dello stato di aggiornamento basato su:
- l’utilizzo di sistemi operativi aggiornati in termini di patch e con opportune configurazioni di hardening;
- effettuare scansioni dei container prima del lancio in produzione;
- definire configurazioni standard e specificare le risorse disponibili per l’esecuzione di ciascun container;
- applicare rigidi controlli sull’accesso degli account privilegiati e sulla qualità della pipeline di sviluppo applicativo.
Tutti i maggiori cloud provider e le aziende di soluzioni IT hanno a catalogo servizi per la gestione della sicurezza dei container e per la loro gestione centralizzata, facilitandone l’adozione in larga scala.