13 best practice per proteggere i microservizi

L’architettura dei microservizi offre flessibilità, scalabilità e la possibilità di modificare, aggiungere o rimuovere componenti software senza influire su altre parti dell’applicazione.

Oltre a cicli di sviluppo software più brevi, team più piccoli e opzioni di linguaggi di programmazione flessibili, consente di ridimensionare o risolvere i problemi di determinate funzioni o servizi senza interferire con gli altri componenti.

In genere, i microservizi consentono di suddividere grandi applicazioni monogame in servizi distinti distribuibili in modo indipendente. Tuttavia, questi servizi indipendenti più piccoli aumentano il numero di componenti, quindi la complessità e la difficoltà di proteggerli.

Immagine dell’architettura monolitica vs microservizi Cappello rosso

Di solito, una tipica distribuzione di microservizi avrà i livelli hardware, servizio o applicazione, comunicazione, cloud, virtualizzazione e orchestrazione. Ognuno di questi ha specifici requisiti di sicurezza, controlli e sfide.

Sfide di sicurezza associate ai microservizi

I microservizi sono in genere sistemi ampiamente distribuiti con regole di accesso complesse, più traffico da monitorare e una superficie di attacco più ampia. Inoltre, la maggior parte dei microservizi cloud viene eseguita su ambienti cloud, che hanno anche configurazioni e controlli di sicurezza variabili.

A causa dell’elevato numero di API, porte e componenti esposti, i firewall tradizionali potrebbero non fornire una sicurezza adeguata. Questi problemi rendono le distribuzioni di microservizi più vulnerabili a varie minacce informatiche come attacchi man-in-the-middle, injection, cross-site scripting, DDoS e altri.

La sicurezza della rete è un’altra sfida con i microservizi. In particolare, il controllo dell’identità e degli accessi assume un nuovo livello di complessità. Altre vulnerabilità includono codice non sicuro e difetti nei sistemi di rilevamento dei servizi.

Sebbene proteggere i microservizi sia più difficile delle applicazioni monolitiche, è possibile proteggerli in modo efficace stabilendo una buona strategia e seguendo le best practice.

Idealmente, l’architettura richiede un approccio distribuito che dovrebbe coprire tutti i diversi componenti.

Le aree tipiche da affrontare includono

  • Protezione di applicazioni, microservizi e utenti
  • Protezione dell’identità e della gestione degli accessi
  • Protezione dei dati
  • Migliora la sicurezza delle comunicazioni da servizio a servizio
  • Monitoraggio dei microservizi e dei sistemi di sicurezza

Best practice per la protezione dei microservizi

Una delle migliori strategie consiste nell’utilizzare una combinazione di best practice, strumenti e controlli per proteggere l’intero ecosistema. L’approccio effettivo può variare a seconda del tipo di servizi, applicazioni, utenti, fattori ambientali e di altro tipo.

Se decidi di utilizzare i microservizi, devi assicurarti di soddisfare tutte le esigenze di sicurezza per i servizi, le connessioni e i dati.

Diamo ora un’occhiata ad alcune efficaci pratiche di sicurezza dei microservizi.

#1. Crea sicurezza fin dall’inizio 👮

Rendi la sicurezza parte del ciclo di sviluppo. Idealmente, integrare la sicurezza nello sviluppo e nella distribuzione dei microservizi fin dall’inizio. Affrontare la sicurezza in questo modo è un approccio semplice, efficace ed economico rispetto all’attesa di aggiungerla quando lo sviluppo del software è prossimo al completamento.

#2. Usa il meccanismo di difesa in profondità

La difesa in profondità (DiP) è una tecnica in cui applichi diversi livelli di sicurezza ai tuoi servizi e dati. La pratica rende più difficile per gli aggressori penetrare attraverso i livelli multipli, fornendo così una forte sicurezza per i tuoi servizi e dati.

A differenza delle soluzioni di sicurezza perimetrale come i firewall, il concetto di difesa in profondità è diverso. Si basa su una combinazione di strumenti come antivirus, firewall, gestione delle patch, software anti-spam e altri per fornire più livelli di sicurezza distribuiti in tutto il sistema.

Sicurezza multilivello di difesa approfondita Immagine: Impera

Con questo approccio, devi prima identificare i servizi sensibili, dopodiché applicare i livelli di sicurezza appropriati attorno ad essi.

#3. Implementa la sicurezza a livello di container 📦

Molto spesso, i microservizi si basano sulla tecnologia dei contenitori. Pertanto, la messa in sicurezza dei contenitori, sia internamente che esternamente, è un modo per ridurre la superficie di attacco ei rischi. Idealmente, mirare al principio di sicurezza del minimo privilegio è una buona pratica e richiede una combinazione di strategie tra cui, a titolo esemplificativo ma non esaustivo;

  • Limitare il permesso al minimo richiesto
  • Evita di eseguire servizi e qualsiasi altra cosa utilizzando sudo o account privilegiati.
  • Limitare o controllare l’accesso e il consumo delle risorse disponibili. Ad esempio, limitare l’accesso alle risorse del sistema operativo da parte dei contenitori aiuta a prevenire il furto o la compromissione dei dati.
  • Non archiviare i segreti nel disco contenitore.
  • Utilizzare regole appropriate per isolare l’accesso alle risorse.

È inoltre fondamentale garantire che le immagini dei contenitori non presentino vulnerabilità o problemi di sicurezza. Una regolare scansione della sicurezza e della vulnerabilità dei contenitori aiuterà a identificare i rischi.

I tipici strumenti di scansione delle immagini includono Chiara, Anchoree altro ancora.

#4. Implementa un’autenticazione a più fattori 🔒

L’abilitazione dell’autenticazione a più fattori migliora la sicurezza del front-end.

Gli utenti che accedono dovranno fornire i dettagli del nome utente e della password oltre a un’altra forma di verifica, come un codice inviato ai loro telefoni o un indirizzo e-mail specificato. La tecnica rende più difficile per gli aggressori, che potrebbero utilizzare credenziali rubate o compromesse, accedere ai microservizi poiché non avranno modo di fornire la seconda autenticazione.

#5. Usa identità utente e token di accesso

Nella distribuzione dei microservizi, un gran numero di applicazioni e servizi richiederà autorizzazioni sicure e controllo degli accessi. Un framework di autorizzazione come OAuth 2.0 e OpenID ti consente di elaborare i token in modo sicuro, proteggendo quindi i tuoi microservizi. Di conseguenza, ciò consente alle applicazioni di terze parti di accedere ad altri servizi o dati degli utenti.

In una distribuzione tipica, l’applicazione principale richiederà all’utente di autorizzare il servizio di terze parti. Dopo aver accettato questo, l’applicazione genera un token di accesso per la sessione.

In particolare, OAuth è una delle strategie più efficaci per l’identità degli utenti e il controllo degli accessi. Sebbene esistano molti altri protocolli di autorizzazione e sia possibile crearne uno proprio, è consigliabile utilizzare il protocollo OAut poiché è più standard, stabile e ampiamente accettato.

#6. Crea un gateway API

In genere, i microservizi sono costituiti da più componenti distribuiti su reti diverse e accessibili da un’ampia gamma di sistemi e client. L’esposizione dei microservizi aumenta le vulnerabilità e i rischi per la sicurezza. Un modo per proteggerli è creare un punto di ingresso unico e sicuro che ti aiuti a centralizzare tutti gli accessi da sistemi e client esterni.

Per raggiungere questo obiettivo, distribuisci un gateway API per esaminare tutte le richieste in arrivo per problemi di sicurezza prima di instradarle ai microservizi appropriati. Il gateway API si trova tra le applicazioni client e i microservizi. Quindi limita l’esposizione dei microservizi fornendo al contempo funzioni aggiuntive di gestione delle richieste come autenticazione, terminazione SSL, traduzione del protocollo, monitoraggio, instradamento delle richieste, memorizzazione nella cache e altro ancora.

Con questo approccio, il gateway API instrada tutti i servizi esterni ai microservizi supportando anche il principio di sicurezza della difesa in profondità.

Immagine del gateway API dei microservizi Livebook

I gateway API tipici includono NGINX, Kong, Tyk, Ambasciatore, Gateway API AWSe altro ancora.

Per ulteriori informazioni sulla sicurezza delle API, consulta la nostra guida su Perché e come proteggere l’endpoint API.

#7. API del profilo basate sulla zona di distribuzione

Implementa restrizioni basate sui ruoli assicurando che gli utenti abbiano accesso solo alle API e ai servizi di cui hanno bisogno. Poiché la maggior parte dei software dannosi espone spesso un servizio a più persone, limitare l’accesso ai soli utenti autorizzati riduce i rischi. Una tecnica per ridurre l’esposizione consiste nell’etichettare le API in base agli utenti che dovrebbero avervi accesso. In generale, le API possono essere;

  • API Ethernet: per i servizi esposti al mondo esterno al di fuori del data center.
  • API della zona aziendale: sono pensate per il traffico privato interno
  • API DMZ: per gestire il traffico proveniente da Internet
  • API della zona ibrida: per le distribuzioni dei data center

#8. Proteggi le comunicazioni da servizio a servizio

Le pratiche efficaci implicano l’autenticazione e l’autorizzazione delle richieste quando due microservizi comunicano.

In generale, esistono tre tecniche principali che è possibile utilizzare per proteggere le comunicazioni tra i servizi. Questi sono Trust the network, JSON Web Token (JWT) e Mutual Transport Layer Security (mTLS o Mutual TLS).

Protezione delle comunicazioni tra i servizi con JWT Image Livebook

Dei tre, il più popolare è il mTLS. In questo approccio, ogni microservizio deve contenere una coppia di chiavi pubblica/privata. Il microservizio client utilizza quindi la coppia di chiavi per autenticarsi presso il microservizio ricevente tramite mTLS.

Durante l’autenticazione, ogni microservizio genera un certificato. In seguito, ogni microservizio utilizzerà il certificato dell’altro per autenticarsi.

Mentre TLS fornisce integrità e riservatezza per i dati in transito, consente anche al client di identificare un microservizio. Il microservizio client in genere conosce l’altro microservizio. Tuttavia, poiché TLS è unidirezionale, un microservizio ricevente non può verificare il microservizio client e gli aggressori possono sfruttare questo difetto. D’altra parte, mTLS fornisce un mezzo in cui ciascuno dei microservizi può identificare l’altro.

#9. Limite di velocità 🚏 traffico clienti

La limitazione del traffico esterno previene problemi come attacchi Denial of Service (DoS) e casi in cui alcuni client consumano la maggior parte della larghezza di banda dell’applicazione. Un approccio consiste nell’applicare varie regole in grado di monitorare e controllare la velocità del traffico inviato o ricevuto da un client in base all’IP, all’ora, ecc.

Configura i tuoi servizi in modo che rallentino se rilevano diversi tentativi di accesso falliti alle tue API o qualsiasi altra attività sospetta.

Un sistema lento scoraggerebbe gli aggressori e probabilmente rinuncerebbe al tentativo di accedere ai servizi. Puoi valutare il limite utilizzando il gateway API, tramite il codice o qualsiasi altra tecnica. Di solito, la maggior parte degli ambienti SaaS ha una limitazione della velocità delle API per ridurre al minimo gli abusi da parte degli utenti e gli attacchi.

#10. Usa i gestori di orchestrazione

I gestori delle orchestrazioni consentono di automatizzare la configurazione, il coordinamento e altre attività di gestione dei microservizi oltre a migliorare la sicurezza. Di solito, gli strumenti consentono di gestire più contenitori, limitare l’accesso ai metadati, separare i carichi di lavoro, raccogliere registri e altro ancora.

Alcuni strumenti di orchestrazione dispongono di funzionalità aggiuntive che consentono agli sviluppatori di archiviare e condividere informazioni riservate come certificati SSL, chiavi di crittografia, password e token di identità.

I due metodi comunemente usati per un’orchestrazione efficace dei microservizi sono;

  • Codifica dell’orchestrazione come microservizio
  • Utilizzo dei gateway API per fornire un livello di orchestrazione

L’orchestrazione tramite il gateway API non è consigliata a causa di problemi quando è necessario ridimensionare i servizi.

Livello di orchestrazione dei microservizi: immagine Logica globale

I tipici strumenti di gestione dell’orchestrazione includono Kubernetes, Istio, Servizio Azure Kubernetes (AKS)eccetera.

Per saperne di più, esplora Container Orchestration for DeOps.

#11. Monitora tutti i tuoi sistemi e servizi

Poiché i microservizi si basano su sistemi distribuiti, è necessario disporre di una strategia di monitoraggio affidabile ed efficace per tutti i singoli componenti.

L’implementazione del monitoraggio continuo consente di rilevare e affrontare tempestivamente i rischi per la sicurezza. Per questo, esiste un’ampia gamma di soluzioni di monitoraggio dei microservizi, tra cui Prometeo, Statistiche, AfflussoDB, Logstasheccetera.

Monitoraggio all’interno dell’architettura dei microservizi

Utilizzare gli strumenti appropriati per monitorare i sistemi e i servizi interni. Alcune best practice includono;

  • Abilita la registrazione a livello di applicazione. Puoi Spluck, Grafana, Pila di ELKe altri strumenti che raccolgono i log a livello di applicazione, contenitore, rete e infrastruttura.
  • Monitorare le metriche di utilizzo
  • Usa le tendenze in metriche come CPU, memoria, tempi di risposta, errori, notifiche e altro per rilevare attività insolite indicative di un attacco esistente o potenziale.
  • Controlla i log in aree come richieste client in arrivo, record di database, contenitori e altro per identificare incoerenze o attività insolite.

#12. Automatizza le attività di sicurezza

Automatizza i processi di sicurezza come la distribuzione degli aggiornamenti, la scansione delle vulnerabilità, il monitoraggio, l’applicazione delle policy e altre attività. Inoltre, controlla gli aggiornamenti per assicurarti che siano sicuri e che non introducano nuove vulnerabilità.

Dopo gli aggiornamenti, il software di sicurezza dovrebbe idealmente eseguire test su tutti i contenitori e i microservizi per vedere se potrebbero esserci state vulnerabilità o problemi di sicurezza che si sono verificati in precedenza.

#13. Proteggi 🛡️ i dati in ogni momento

Proteggi i dati in transito e inattivi. Idealmente, imporre l’uso di HTTPS per tutte le comunicazioni, per proteggere i dati in transito e la crittografia per tutti i dati sensibili inattivi. Evita di trasmettere e archiviare password, chiavi, credenziali e dati sensibili in testo normale che risiedono all’esterno del codice.

La strategia migliore è utilizzare tecnologie standard per crittografare tutti i dati sensibili il prima possibile. Inoltre, decrittare i dati il ​​più tardi possibile per ridurre l’esposizione.

Conclusione

I microservizi si basano su componenti distribuiti per fornire vantaggi come maggiore flessibilità e opzioni di distribuzione. Tuttavia, quando si utilizzano i microservizi, le organizzazioni devono adeguare le politiche e le strategie di sicurezza interne verso un approccio più nativo del cloud e distribuito.

Idealmente, mira a ridurre la superficie di attacco, proteggendo l’ambiente dei microservizi, le API, le applicazioni e i dati.