Sto lavorando alla creazione di un'applicazione Web utilizzando il modello di architettura microservice in un set di contenitori docker e mi chiedo dell'importanza di proteggere la comunicazione tra l'applicazione e i microservizi.
L'applicazione e i microservizi saranno collegati insieme in un cluster utilizzando l'opzione --link
e i microservizi non espongono alcuna porta. La comunicazione tra l'applicazione e i microservizi avverrà tramite HTTP. L'applicazione esporrà solo la porta 80.
Ho pensato a cosa potrebbe accadere se l'applicazione è compromessa - mi sembra che se ciò accade, i dettagli di tutte le chiamate fatte alle API di microservizio saranno nelle mani dell'attaccante (incluse le chiavi segrete, se implementato - vedere lo schema discusso di seguito), in modo che possano accedere a tutti i dati che possono essere ottenuti tramite tali chiamate API, ma non avranno accesso al database o alle altre risorse utilizzate esclusivamente dai microservizi. Ma questo è vero indipendentemente dal fatto che le chiamate API siano autenticate con il metodo sopra o no.
Quanto è sicuro questo? Devo aggiungere un ulteriore livello di autenticazione alle chiamate API?
Sto prendendo in considerazione questo schema per l'autenticazione: progettando un'API REST (Web) sicura senza OAuth
Fondamentalmente, l'idea è che l'applicazione e il servizio abbiano un segreto condiviso che viene utilizzato per crittografare il contenuto del messaggio al fine di determinare se il messaggio proviene da una fonte autorizzata e se è stato manomesso. Al momento, le API saranno disponibili solo per l'applicazione, anche se a un certo punto in futuro potrebbe essere utile rendere disponibili alcune API di microservizio ad altre applicazioni, potenzialmente non in esecuzione nei contenitori docker, e so che un solido schema di autenticazione essere richiesto a quel punto - lo schema discusso sopra è adeguato?