Asegurar la arquitectura de micro servicios internamente

4

Estoy implementando una solución con un conjunto de Micro Services (Spring Rest Services) con Rabbit MQ como intermediario de mensajes. El servidor perimetral se autentica utilizando un servidor de identidad basado en OAuth. Las llamadas internas de Micro Sevices no están autorizadas ni autenticadas.

Mi objetivo es asegurar todos los Micro servicios internos con autenticación y autorización. Necesidad de asegurar la comunicación interna desde el ataque MiTM o escuchas ilegales.

Una cosa que podemos hacer es transmitir el token de autenticación del servidor perimetral a los servicios micro internos. Pero si alguien captura el token de autenticación, puede realizar un ataque de agente confuso (actuar como un servicio micro legítimo). Y cualquier persona puede interceptar o escuchar la comunicación entre Micro Services.

Déjame si sabes una mejor solución para esto.

Gracias de antemano.

    
pregunta user3496510 22.12.2016 - 23:03
fuente

2 respuestas

2

Reutilizar el token de borde es una idea realmente mala, ya que simplemente brinda más oportunidades para que sea interceptado y utilizado incorrectamente.

Debes identificar los límites de riesgo primero. Entonces, qué servicios / datos realmente requieren protección adicional o separada. Entonces puedes crear límites de seguridad que coincidan. En general, no debe intentar asegurar "todos" los servicios internos de forma independiente, ya que es difícil y costoso escalarlos. De todos modos, no necesariamente proporcionaría mucha seguridad adicional. La clasificación de sistemas y datos es un dolor aburrido, pero es lo más importante que puede hacer.

Cada límite puede ser asegurado por el método que sea mejor. Es posible que algunos solo necesiten estar restringidos por las direcciones permitidas a través de (firewall), otros pueden necesitar token adicional o seguridad basada en certificados.

En un entorno que necesita seguridad, los servidores perimetrales generalmente se considerarán como no confiables (semi-confiable en el mejor de los casos), ya que estos serán los más expuestos.

    
respondido por el Julian Knight 23.12.2016 - 10:16
fuente
1

Estoy de acuerdo con la respuesta de Julian de que necesita comprender primero los riesgos y clasificar los datos en su sistema.

Respetuosamente, no estoy de acuerdo con el uso de un token de borde es una mala idea en todas las circunstancias. Si el token solo especifica la identidad (quién es el autor de la llamada) y deja la autorización (lo que el interlocutor puede y no puede hacer) para cada servicio, proporciona una garantía auditable de que los usuarios pueden o no pueden realizar ciertas tareas. Por ejemplo, si el token de borde contiene una lista de roles, generalmente como notificaciones, cada microservicio podría permitir o rechazar el acceso según los roles.

Como dice Julian, esto supone que el usuario de borde es significativo. El servidor de origen (el principal del servicio en lugar del principal del usuario) podría ser más importante o podría haber reclamos (por ejemplo, región o servidor donde se almacenan los datos), que requieren un token diferente.

También estoy de acuerdo en que no es importante autenticar todos los microservicios. Sin embargo, me gustaría comenzar con la suposición de que se está autentificando y luego eliminar el requisito si no es necesario. Es mucho más fácil eliminar la autenticación que agregarla más tarde.

    
respondido por el akton 23.12.2016 - 12:57
fuente

Lea otras preguntas en las etiquetas