Alcune settimane fa avevo pubblicato un articolo che menzionava l’architettura basata su cellule, vorrei scendere nel dettaglio di quello che questa architettura prevede e come possa essere implementata con alcune informazioni ulteriori.
La cellula
Sin dalla scuola primaria ai bambini viene insegnato che la cellula è il più piccolo organismo vivente, una cellula è composta di vari elementi che le permettono di eseguire le funzioni di base come ad esempio nutrirsi, respirare, immagazzinare risorse….
Una cellula è costruita per poter essere completamente indipendente, può cooperare con altre cellule per creare organismi più grandi, ed è strutturata per mantenere intatte le proprie caratteristiche ed applica una difesa di base verso gli agenti esterni.
Una cellula espleta funzioni basilari, solo l’insieme di diverse cellule (e la conseguente creazione di organismi complessi) permette di implementare funzioni più complesse: una cellula non ha le capacità di afferrare un oggetto, ma l’insieme delle cellule che formano la nostra mano rendono questa funzione disponibile al corpo umano.
Il monolite
Avendo avuto a che fare con diverse realtà di business, mi sono trovato negli anni ad affrontare il problema degli applicativi monolitici: programmi che erano sviluppati per poter dare all’utente finale un’interfaccia che lo connettesse in maniera diretta con il dato che deve trattare.
Per iniziare a smembrare i monoliti nel corso degli anni sono stati definiti diversi pattern come ad esempio MVC (Model View Controller) che iniziava a definire 3 componenti differenti che possono essere sviluppate in maniera indipendente e che interagiscono tra di loro attraverso protocolli standard di comunicazione.
Questo ha permesso di analizzare e suddividere in maniera sempre più capillare le diverse componenti di ogni applicativo, proprio come gli scienziati hanno studiato gli esseri viventi e, tramite l’uso di appositi strumenti scientifici, ne hanno individuato le componenti di base.
Iniziare dall’elemento centrale
La definizione di un’architettura capillare per implementare una soluzione di business permette di applicare ad ogni singolo componente le pratiche standard in termini di:
Scalabilità per poter estendere le risorse necessarie ad ogni singolo elemento
Governance in modo da avere costantemente sotto controllo il corretto funzionamento del singolo elemento
Manutenzione per ogni singolo elemento viene definita una versione ed il relativo processo di sviluppo e rilascio negli ambienti di dev, test e produzione
Ogni cellula non definisce al proprio interno queste componenti, ma interagisce con gli organismi che le implementano.
Componenti della cella
Ogni cella è un insieme di diverse componenti che sono necessarie a renderla un elemento unico e indipendente gli elementi all’interno della cellula possono comunicare tra direttamente tra di loro in maniera proprietaria.
La cellula espone i propri sevizi attraverso protocolli standard che vengono dichiarati da una documentazione che supporti nozioni comune per la definizione delle interfacce.
Gli organismi esterni alla cellula non conoscono gli elementi interni e non sanno con quale singolo componente interagiscano, ma si interfacciano con le risorse della cella per mezzo di un gateway che agisce sul perimetro della cellula stessa.
Antibiotici
Proprio come ogni cellula del corpo umano può essere attaccata da un virus, anche questo componente architetturale ha la necessità di difendersi da agenti patogeni. Occorre quindi definire gli opportuni criteri di autorizzazione e di sicurezza per difendere gli elementi (applicativi e dati) interni.
L’accesso tramite le API pubblicate sul gateway viene quindi autorizzato per mezzo di un Identity Provider (che può essere anch’esso definito all’esterno della cellula stessa) e la dichiarazione di appositi scopes per la distinzione dei ruoli.
Il dominio delle identità che accedono dall’esterno può differire da quello necessario all’interno della cellula stessa, dove quindi si può provvedere a sostituire il token di accesso alle singole risorse interne.
Prodotti
Di seguito alcuni elementi che possono essere utilizzati per comporre le singole cellule ed il loro scopo.
API gateway
Il layer di API che la cellula richiede anch’esso una governance per la manutenzione legata alle evoluzioni applicative e la redazione della relativa documentazione da pubblicare per i fruitori esterni.
WSO2 API Manager è il prodotto per la definizione delle API, la gestione del ciclo di vita e la dichiarazione dei criteri di sicurezza sulle singole risorse. Il profilo Micro Integrator permette di implementare le logiche di integrazione e trasformazione basate sui microservizi disponibili.
Sicurezza
In ottica security by design occorre approcciare questo argomento da diversi punti di vista. L’accesso alle API può essere validato per mezzo di un Identity Provider, l’integrazione di WSO2 Identity Server è di aiuto per la definizione delle logiche di autenticazione ed autorizzazione ed integra connettori per svariati IdP esterni.
Per non fermarsi alla sicurezza perimetrale una soluzione è quella di integrare 42Crunch, un prodotto che effettua una scansione sulla definizione delle API per individuare eventuali falle di sicurezza e fornisce un servizio di Firewall che può essere deployato in modalità sydecar per validare le API a runtime.
La piattaforma 42Crunch protegge automaticamente le API dalle 10 principali vulnerabilità di sicurezza OWASP, si può integrare nativamente con gli IDE di sviluppo, i tools di CI/CD ed il runtime delle API in modo da avere una verifica costante sulle eventuali falle di sicurezza.