2015-05-10 11 views
5

Sto cercando di capire il modo migliore per strutturare e implementare i microservizi utilizzando lo stack Spring Cloud e Netflix, in particolare utilizzando Eureka e Feign. Ho alcune domande relative alla sicurezza relative a ciascuna:Protezione dei microservizi che utilizzano Spring Cloud e Netflix Eureka e Feign

  1. Ho visto che è possibile configurare Eureka Server con una credenziale username/password. Ciò mantiene le app non autorizzate, ma ogni app deve condividere le credenziali per accedere a Eureka. C'è un modo semplice per creare un registro di credenziali in modo che ogni microservizio possa avere il proprio? (Sarebbe bello collegarlo allo stack di Spring Security - UserDetailService e simili)

  2. Una volta che i microservizi sono cablati e comunicanti in modo eccessivo, è possibile condividere/passare le credenziali utilizzate in una richiesta originale a chiamate aggiuntive effettuate ad altri microservizi? Quindi, se "Jim" richiede /foos su FooService, e FooService richieste /bars su BarService, BarService avrebbe saputo che si trattava di Jim ne fanno richiesta?

Jim> FooService> BarService - dove BarService conosce la richiesta viene gestita per Jim ...

+1

1. Eureka Server può essere protetto utilizzando Spring Security. Non abbiamo nulla configurato automaticamente. La sicurezza di eureka è attualmente un esercizio per gli sviluppatori. 2. Per quanto riguarda Feign, è possibile collegare 'RequestInterceptor's che può richiamare l'autenticazione da qualsiasi luogo e aggiungerla alla richiesta successiva. Di nuovo, questo è un esercizio, non lo facciamo automaticamente. – spencergibb

+0

@spencergibb Ri 1: La sicurezza sul server ha senso ed è semplice, ma come possiamo consentire ai client di conoscere la suddetta sicurezza? La risposta 2 è perfetta :) grazie –

+0

beh questa è una grande domanda con i servizi in generale. È possibile crittografare i server di configurazione nel server di configurazione, quindi come si può garantire ciò? Potresti usare i certificati. Potresti usare la sicurezza della rete. puoi inserire le credenziali nelle variabili di ambiente. Non abbiamo risolto quel problema. – spencergibb

risposta

1

David. Potresti dare un'occhiata a un articolo che ho scritto sulla sicurezza dei servizi di spring cloud. Il team di primavera ha in gran parte lasciato questo argomento allo sviluppatore come dovrebbe essere, dal momento che le implementazioni di sicurezza variano notevolmente tra le organizzazioni. Questo esempio utilizza l'autenticazione di base sui server eureka e config.

http://www.baeldung.com/spring-cloud-securing-services

Alcune piccole takeaway dovrebbero essere: l'autenticazione deve essere definito sui server di configurazione e di scoperta di distanza da qualsiasi altro tipo di autenticazione che avete per il resto del sistema. Questi due server devono gestire la propria autenticazione perché spesso è necessario che siano in esecuzione prima che un server di autenticazione possa avviarsi (dal momento che richiama la configurazione da servizio di configurazione e registri con il servizio di rilevamento).

Il servizio per la comunicazione di servizio è una bestia diversa. La domanda che devi porci, come sta dicendo David, è che stai correndo con i tuoi servizi con la sicurezza ip, sono esposti a tutto il web, dove avviene l'autenticazione nella tua app. Senza queste domande è difficile dare consigli specifici.

Alcuni consigli generali in questo settore potrebbe essere:

  • Se i servizi sono in esecuzione dietro un firewall IP è possibile specificare un'intestazione unico che autenticare qualsiasi servizio in arrivo in questo modo non si fa. davvero bisogno di specificare le autorizzazioni per la rete interna solo identificando ogni servizio sarà sufficiente. Puoi persino elencare in bianco gli indirizzi IP specifici da consentire sempre.

  • Se si eseguono questi servizi esposti al Web, è possibile che si desideri indirizzare tutto il traffico al gateway (questo dovrebbe anche essere il luogo in cui avviene l'autenticazione per la propria app). Se si ottiene un 403, è necessario eseguire un accesso programmatico e riprovare la richiesta con l'id di sessione. Se si configura il sistema con spring-session, ogni servizio preleverà automaticamente i dettagli di autenticazione di quel servizio.

Queste sono solo due delle numerose possibilità. Non sono esattamente sicuro di quanto sei a tuo agio nello scrivere queste configurazioni di sicurezza, quindi se vuoi ulteriore assistenza chiarisci le tue domande in uno scenario e cercherò di scrivere una soluzione generica per il tuo caso d'uso.

Problemi correlati