Sicurezza dei microservizi all’ordine del giorno per i team DevOps. L’architettura permette un time-to-market più rapido, una migliore scalabilità e componenti debolmente accoppiati rispetto alle applicazioni monolitiche. Il rovescio della medaglia è che un conglomerato di numerosi piccoli servizi autonomi va a complicare la comunicazione da servizio a servizio, frammentando la coerenza dei dati e aumentando le superfici di attacco.
Quando si lavora su un’applicazione basata su microservizi, un semplice firewall non è sufficiente. La progettazione richiede una difesa molto più stratificata per combattere le minacce. La sicurezza dell’applicazione deve essere una parte fondamentale della sua architettura: gli sviluppatori di microservizi dovrebbero creare un framework di sicurezza dell’applicazione fin dall’inizio.
Sicurezza dei microservizi: quali sono le sfide
La natura distribuita dei microservizi crea complessità intrinseche e problemi di sicurezza che i team di sviluppo devono conoscere e risolvere. A minare la sicurezza dei microservizi varie concause:
- una grande superficie di attacco
- un’analisi dei log insufficiente
- scarsi test
- bassa tolleranza agli errori
#1 Superficie d’attacco
In un’applicazione basata su microservizi, la proliferazione delle interfacce di comunicazione aumenta la superficie di attacco complessiva del programma. Ogni API e canale di comunicazione esposti va a creare un potenziale vettore di attacco che gli sviluppatori devono gestire e risolvere.
#2 Logging
Un’applicazione basata sui microservizi in genere ha servizi distribuiti e senza stato, sviluppati attraverso tecnologie eterogenee. I registri non sono tutti nello stesso formato o generati allo stesso modo. È anche possibile che questi servizi interagiscano su grandi distanze geografiche. È fondamentale creare un sistema di aggregazione dei log in modo che permetta agli analisti della sicurezza di correlare gli eventi che si verificano su piattaforme diverse e disparate, avendo così massima comprensione relativa ad anomalie, minacce ed attacchi.
#3 Testing
Gli sviluppatori di microservizi possono creare, distribuire e gestire servizi indipendenti l’uno dall’altro, il che significa che possono rilasciare rapidamente servizi senza test approfonditi. Il testing, però, rimane un’attività fondamentale per rilevare le vulnerabilità. Sebbene uno dei maggiori vantaggi delle applicazioni basate su microservizi sia la libertà di rilascio frequente, l’agilità non può prescindere da test adeguati.
#4 Tolleranza ai guasti
In un’applicazione basata su microservizi la tolleranza ai guasti è molto più complessa rispetto a quella in un’applicazione monolitica. Quando aumenta il numero di servizi che comunicano sulla rete, la complessità aumenta, rendendo più probabili i guasti. Se un microservizio non è in grado di far fronte correttamente agli errori, può destabilizzare l’intera applicazione e qualsiasi altra applicazione con cui funziona.
Best practice sulla sicurezza dei microservizi
Esistono quattro best practice che garantiscono la sicurezza dei microservizi. Gli esperti suggeriscono di adottarli tutti quando si creano applicazioni.
#1 Difesa in profondità
La difesa in profondità è una strategia che prevede l’introduzione di diversi livelli di controllo in un’applicazione. I servizi più sensibili ottengono dei veri e propri livelli di copertura di sicurezza. In questo modo, nel momento in cui un potenziale aggressore sfrutta uno dei microservizi, gli viene impedito di attaccare un altro microservizio o altri livelli dell’applicazione.
Piuttosto che dipendere da un’unica misura di sicurezza apparentemente solida, è bene utilizzare tutte le misure di sicurezza che si hanno a disposizione per creare livelli di sicurezza che costituiscono delle barriere che frenano i potenziali aggressori, ovvero:
- disporre di un firewall perimetrale di rete forte
- avere una forte identificazione basata su token
- mantenere privati gli indirizzi dei microservizi sensibili
- mantenere un forte livello di monitoraggio che identifichi in modo puntuale i comportamenti insoliti
#2 Utilizzare il gateway API
Quando si parla di sicurezza dei microservizi l’ideale è che i consumatori di servizi non comunichino direttamente con i microservizi. Piuttosto, un gateway API dovrebbe fornire un unico punto di ingresso per il traffico. Questi gateway API spesso utilizzano l’autenticazione basata su token per gestire quali privilegi di dati hanno determinati servizi e dettare come possono interagire con quei dati.
Poiché i client non accedono direttamente ai servizi, non possono sfruttare i servizi da soli. Se si posiziona il gateway API dietro un firewall è possibile aggiungere un ulteriore livello di protezione: questo garantisce che tutti i microservizi utilizzati in una particolare applicazione siano sicuri.
#3 Concentrarsi sulla sicurezza di dati e API
I microservizi devono spesso comunicare tra loro tramite pacchetti di dati e API. A questo proposito è importante mantenere i certificati di sicurezza e assicurarsi che tutti i dati in transito siano crittografati.
Gli esperti suggeriscono anche di controllare attentamente le autorizzazioni delle API: solo gli utenti autorizzati dovrebbero averne accesso. Per farlo è bene utilizzare il principio del privilegio minimo, fornendo l’accesso a una risorsa solo in base alle necessità.
#4 Applicare le strategie DevSecOps
Le migliori pratiche di sicurezza dei microservizi non riguardano solo l’implementazione della tecnologia giusta. Affinché l’adozione dei microservizi abbia successo, i team di sviluppo e le operation dovrebbero convergere in linea con il concetto di DevOps, includendo una stretta relazione con i gruppi di sicurezza per comprendere i processi adeguati e imparare a mitigare i rischi associati alle vulnerabilità.
Questo approccio, noto come DevSecOps, impone agli sviluppatori e al personale operativo di rendere i team di sicurezza parte del processo di progettazione iniziale dell’applicazione. Gli sviluppatori e il personale addetto alla sicurezza dovrebbero collaborare da subito, aiutando a determinare come monitorare costantemente e automaticamente le potenziali minacce alle applicazioni basate su microservizi. Il monitoraggio centralizzato, ad esempio, può essere gestito attraverso strumenti come Prometheus e InfluxDB.
Anche la scansione automatica del codice e gli aggiornamenti continui del codice sono essenziali. DevOps e team di sicurezza dovrebbero collaborare strettamente per monitorare il codice e impedire qualsiasi accesso non autorizzato a una risorsa nell’applicazione.