¿Qué tan seguro es el tráfico de contenedor a contenedor?

11

Estoy trabajando en la creación de una aplicación web utilizando el patrón de arquitectura de microservicio en un conjunto de contenedores de ventana acoplable y me pregunto sobre la importancia de asegurar la comunicación entre la aplicación y los microservicios.

La aplicación y los microservicios se vincularán en un clúster utilizando la opción --link y los microservicios no expondrán ningún puerto. La comunicación entre la aplicación y los microservicios se realizará a través de HTTP. La aplicación solo expondrá el puerto 80.

He pensado en lo que podría suceder si la aplicación se ve comprometida. Me parece que si eso sucede, los detalles de las llamadas realizadas a las API de microservicio estarán en manos del atacante (incluidas las claves secretas, si se implementa, consulte el esquema que se describe a continuación), por lo que tendrán acceso a cualquier información que se pueda obtener a través de esas llamadas a la API, pero no tendrán acceso a la base de datos ni a ningún otro recurso que sean utilizados exclusivamente por los microservicios. Pero esto es cierto independientemente de si las llamadas a la API están autenticadas por el método indicado anteriormente o no.

¿Qué tan seguro es esto? ¿Debo agregar una capa adicional de autenticación a las llamadas a la API?

Estoy considerando este esquema de autenticación: diseño de una API REST (Web) segura sin OAuth

Básicamente, la idea es que la aplicación y el servicio tengan un secreto compartido que se utiliza para cifrar el contenido del mensaje a fin de determinar si el mensaje proviene de una fuente autorizada y si se ha manipulado. En la actualidad, las API estarán disponibles solo para la aplicación, aunque en algún momento en el futuro podría ser útil hacer que algunas API de microservicio estén disponibles para otras aplicaciones, que posiblemente no se ejecuten en contenedores docker, y sé que un esquema de autenticación robusto será necesario en ese momento: ¿el esquema descrito anteriormente es adecuado?

    
pregunta Kryten 05.01.2015 - 16:43
fuente

1 respuesta

6

De la documentación de la ventana acoplable en enlace de contenedor , es posible ver que la configuración estándar para los enlaces es crear un Red interna en el host de la ventana acoplable que utilizan los contenedores para comunicarse entre sí.

Esta red no está expuesta fuera del host de forma predeterminada, por lo que desde esa perspectiva debería estar protegida contra atacantes basados en la red (es decir, no se puede acceder a los puertos o servicios a través de la red, por lo que no hay nada que atacar).

Si un atacante obtiene acceso al host de la ventana acoplable, es probable que la seguridad de los contenedores tenga problemas de todas formas con o sin vinculación, según el nivel de privilegio que pueda obtener el atacante, al igual que el acceso a una cuenta privilegiada en el host de la ventana acoplable. todas las apuestas están apagadas.

El otro escenario probable de ataque es donde el atacante obtiene acceso a la parte externa de su aplicación en contenedor. Aquí, nuevamente, no hay muchos inconvenientes en el uso de enlaces sin seguridad adicional, ya que una vez que tienen acceso al servidor de aplicaciones front-end, es probable que obtengan las credenciales necesarias para acceder a los servicios back-end, ya que estarán presentes en el servidor front-end.

Una nota de precaución sería que si diseña confiar en la seguridad de la vinculación de contenedores, puede tener problemas si posteriormente escala su solución para dividir los componentes de la aplicación en máquinas virtuales diferentes o incluso en hosts físicos diferentes, como lo haría entonces. potencialmente estar exponiendo esos servicios a redes no confiables.

En resumen, diría que la vinculación de contenedores debe considerarse un medio relativamente seguro de comunicación entre contenedores.

    
respondido por el Rоry McCune 17.08.2015 - 09:30
fuente

Lea otras preguntas en las etiquetas