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?