La arquitectura de microservicios proporciona flexibilidad, escalabilidad y la capacidad de modificar, añadir o eliminar componentes de software sin afectar a otras partes de la aplicación.
Además de ciclos de desarrollo de software más cortos, equipos más reducidos y opciones de lenguaje de programación flexibles, permite escalar o solucionar problemas de determinadas funciones o servicios sin interferir con los demás componentes.
En general, los microservicios permiten dividir las grandes aplicaciones monógamas en servicios distintos desplegables de forma independiente. Sin embargo, estos servicios independientes más pequeños aumentan el número de componentes, de ahí la complejidad y la dificultad para asegurarlos.
Normalmente, un despliegue típico de microservicios tendrá las capas de hardware, servicio o aplicación, comunicación, nube, virtualización y orquestación. Cada una de ellas tiene requisitos, controles y retos de seguridad específicos.
Retos de seguridad asociados a los microservicios
Los microservicios suelen ser sistemas ampliamente distribuidos con reglas de acceso complejas, más tráfico que supervisar y una mayor superficie de ataque. Además, la mayoría de los microservicios en la nube se ejecutan en entornos de nube, que también tienen configuraciones y controles de seguridad variables.
Debido al gran número de API, puertos y componentes expuestos, los cortafuegos tradicionales pueden no proporcionar la seguridad adecuada. Estos problemas hacen que los despliegues de microservicios sean más vulnerables a diversas ciberamenazas como el man-in the middle, los ataques de inyección, el cross-site scripting, los DDoS y otros.
La seguridad de la red es otro reto de los microservicios. En particular, el control de identidades y accesos asume un nuevo nivel de complejidad. Otras vulnerabilidades son el código inseguro y los fallos en los sistemas de descubrimiento de servicios.
Aunque la seguridad de los microservicios es más difícil que la de las aplicaciones monolíticas, puede protegerlos eficazmente estableciendo una buena estrategia y siguiendo las mejores prácticas.
Idealmente, la arquitectura requiere un enfoque distribuido que debe abarcar todos los diferentes componentes.
Las áreas típicas a abordar incluyen
- Protección de aplicaciones, microservicios y usuarios
- Asegurar la gestión de identidades y accesos
- Proteger los datos
- Mejorar la seguridad de la comunicación entre servicios
- Supervisar los microservicios y los sistemas de seguridad
Mejores prácticas para asegurar los microservicios
Una de las mejores estrategias consiste en utilizar una combinación de buenas prácticas, herramientas y controles para proteger todo el ecosistema. El enfoque real puede diferir según el tipo de servicios, aplicaciones, usuarios, entorno y otros factores.
Si decide utilizar microservicios, debe asegurarse de que cumple todas las exigencias de seguridad para los servicios, las conexiones y los datos.
Echemos ahora un vistazo a algunas prácticas eficaces de seguridad de microservicios.
#1. Construya la seguridad desde el principio 👮
Haga que la seguridad forme parte del ciclo de desarrollo. Lo ideal es integrar la seguridad en el desarrollo y despliegue de microservicios desde el principio. Abordar la seguridad de esta manera es un enfoque fácil, eficaz y más barato que esperar a añadirla cuando el desarrollo del software está a punto de finalizar.
#2. Utilice el mecanismo de defensa en profundidad
La Defensa en Profundidad (DiP) es una técnica que consiste en aplicar varias capas de seguridad a sus servicios y datos. Esta práctica hace más difícil que los atacantes penetren a través de las múltiples capas, proporcionando así una fuerte seguridad a sus servicios y datos.
A diferencia de las soluciones de seguridad perimetral como los cortafuegos, el concepto de defensa en profundidad es diferente. Se basa en una combinación de herramientas como antivirus, cortafuegos, gestión de parches, software antispam y otras para proporcionar múltiples capas de seguridad distribuidas por todo el sistema.
Con este enfoque, primero debe identificar los servicios sensibles, tras lo cual aplica las capas de seguridad adecuadas a su alrededor.
#3. Despliegue la seguridad a nivel de contenedor 📦
La mayoría de las veces, los microservicios se basan en la tecnología de contenedores. Como tal, asegurar los contenedores, tanto interna como externamente, es una forma de reducir la superficie de ataque y los riesgos. Idealmente, aspirar al principio de seguridad de mínimo privilegio es una buena práctica y requiere una combinación de estrategias que incluyan, entre otras cosas;
- Limitar los permisos al mínimo necesario
- Evitar ejecutar servicios y cualquier otra cosa utilizando
el sudo
o cuentas privilegiadas. - Limitar o controlar el acceso y el consumo de los recursos disponibles. Por ejemplo, limitar el acceso a los recursos del sistema operativo por parte de los contenedores ayuda a evitar el robo o el compromiso de los datos.
- No almacene secretos en el disco del contenedor.
- Utilice reglas adecuadas para aislar el acceso a los recursos.
También es vital asegurarse de que las imágenes de los contenedores no presentan vulnerabilidades ni problemas de seguridad. Un escaneado regular de la seguridad y las vulnerabilidades de los contenedores ayudará a identificar los riesgos.
Entre las herramientas típicas de escaneado de imágenes se incluyen Clair, Anchore, etc.
#4. Despliegue una autenticación multifactor 🔒
Habilitar la autenticación multifactor mejora la seguridad del front-end.
Los usuarios que accedan tendrán que proporcionar los datos de su nombre de usuario y contraseña, además de otra forma de verificación, como un código enviado a sus teléfonos o una dirección de correo electrónico especificada. Esta técnica dificulta el acceso a los microservicios a los atacantes, que pueden estar utilizando credenciales robadas o pirateadas, ya que no tendrán forma de proporcionar la segunda autenticación.
#5. Utilice tokens de acceso e identidad de usuario
En el despliegue de microservicios, un gran número de aplicaciones y servicios requerirán una autorización y un control de acceso seguros. Un marco de autorización como OAuth 2.0 y OpenID le permite procesar los tokens de forma segura, protegiendo así sus microservicios. En consecuencia, esto permite a las aplicaciones de terceros acceder a otros servicios o datos de los usuarios.
En un despliegue típico, la aplicación principal solicitará al usuario que autorice el servicio de terceros. Al aceptarlo, la aplicación genera un token de acceso para la sesión.
En concreto, OAuth es una de las estrategias más eficaces para el control de la identidad y el acceso de los usuarios. Aunque existen varios otros protocolos de autorización, y también puede construir el suyo propio, la mejor práctica es utilizar el OAuth ya que es más estándar, estable y ampliamente aceptado.
#6. Crear una pasarela API
Generalmente, los microservicios constan de varios componentes distribuidos en diferentes redes y accesibles desde una amplia gama de sistemas y clientes. La exposición de los microservicios aumenta las vulnerabilidades y los riesgos de seguridad. Una forma de protegerlos es crear un punto de entrada único y seguro que le ayude a centralizar todos los accesos desde sistemas y clientes externos.
Para lograrlo, despliegue una pasarela de API para examinar todas las solicitudes entrantes en busca de problemas de seguridad antes de enrutarlas a los microservicios apropiados. La pasarela API se sitúa entre las aplicaciones cliente y los microservicios. A continuación, limita la exposición de los microservicios al tiempo que proporciona funciones adicionales de gestión de solicitudes, como autenticación, terminación SSL, traducción de protocolos, supervisión, enrutamiento de solicitudes, almacenamiento en caché, etc.
Con este enfoque, la pasarela API enruta todos los servicios externos a los microservicios a la vez que soporta el principio de seguridad de defensa en profundidad.
Entre las pasarelas de API típicas se incluyen NGINX, Kong, Tyk, Ambassador, la pasarela de API de AWS, etc.
Para saber más sobre la seguridad de las API, consulte nuestra guía sobre Por qué y cómo proteger el punto final de las API.
#7. Perfile las API en función de la zona de despliegue
Implemente restricciones basadas en roles asegurándose de que los usuarios sólo tienen acceso a las API y servicios que necesitan. Dado que la mayoría del software malicioso suele exponer un servicio a más personas, limitar el acceso sólo a los usuarios autorizados reduce los riesgos. Una técnica para reducir la exposición consiste en etiquetar las API en función de los usuarios que deben tener acceso a ellas. Por lo general, las API pueden ser;
- API Ethernet – Para servicios expuestos al mundo exterior fuera del centro de datos.
- APIs de Zona Corporativa – están pensadas para el tráfico privado interno
- API de DMZ – para gestionar el tráfico que se origina en Internet
- APIs de Zona Híbrida – para despliegues de centros de datos
#8. Asegure las comunicaciones de servicio a servicio
Las prácticas eficaces implican autenticar y autorizar las solicitudes cuando dos microservicios se comunican.
En general, hay tres técnicas principales que puede utilizar para asegurar las comunicaciones entre servicios. Éstas son la confianza en la red, el token web JSON(JWT) y la seguridad mutua de la capa de transporte(mTLS, o TLS mutuo).
De los tres, el más popular es el mTLS. En este enfoque, cada microservicio debe llevar un par de claves pública/privada. A continuación, el microservicio cliente utiliza el par de claves para autenticarse ante el microservicio receptor a través del mTLS.
Durante la autenticación, cada microservicio genera un certificado. Después, cada microservicio utilizará el certificado del otro para autenticarse.
Mientras que TLS proporciona integridad y confidencialidad para los datos en tránsito, también permite al cliente identificar un microservicio. El microservicio cliente suele conocer al otro microservicio. Sin embargo, como TLS es unidireccional, un microservicio receptor no puede verificar el microservicio cliente, – y los atacantes pueden explotar este fallo. Por otro lado, el mTLS proporciona un medio en el que cada uno de los microservicios puede identificar al otro.
#9. Límite de velocidad 🚏 tráfico de cliente
Limitar el tráfico externo evita problemas como los ataques de denegación de servicio (DoS), así como los casos en los que algunos clientes consumen la mayor parte del ancho de banda de la aplicación. Un enfoque consiste en aplicar varias reglas que puedan supervisar y controlar la tasa de tráfico enviado o recibido de un cliente en función de la IP, la hora, etc.
Configure sus servicios para que se ralenticen si detectan varios intentos fallidos de inicio de sesión en sus API o cualquier otra actividad sospechosa.
Un sistema lento desanimaría a los atacantes y probablemente desistirían de su intento de acceder a los servicios. Puede limitar la velocidad utilizando la pasarela API, a través del código o cualquier otra técnica. Normalmente, la mayoría de los entornos SaaS disponen de limitación de la tasa de la API para minimizar el abuso por parte de los usuarios, así como los ataques.
#10. Utilice gestores de orquestación
Los gestores de orquestación le permiten automatizar la configuración, la coordinación y otras tareas de gestión de microservicios, además de mejorar la seguridad. Por lo general, las herramientas le permiten gestionar múltiples contenedores, limitar el acceso a metadatos, segregar cargas de trabajo, recopilar registros y mucho más.
Algunas herramientas de orquestación disponen de funciones adicionales que permiten a los desarrolladores almacenar y compartir información confidencial como los certificados SSL, las claves de cifrado, las contraseñas y los tokens de identidad.
Los dos métodos más utilizados para una orquestación eficaz de microservicios son;
- Codificar la orquestación como un microservicio
- Utilizar las pasarelas API para proporcionar una capa de orquestación
La orquestación a través de la pasarela API no se recomienda debido a los retos que plantea cuando existe la necesidad de escalar los servicios.
Las herramientas típicas de gestión de la orquestación incluyen Kubernetes, Istio, Azure Kubernetes Service (AKS), etc.
Para obtener más información, explore la Orquestación de contenedores para DeOps.
#11. Supervise todos sus sistemas y servicios
Dado que los microservicios dependen de sistemas distribuidos, necesita contar con una estrategia de monitorización fiable y eficaz para todos los componentes individuales.
Implementar una monitorización continua le permite detectar y abordar los riesgos de seguridad a tiempo. Para ello, existe una amplia gama de soluciones de monitorización de microservicios, como Prometheus, Statsd, InfluxDB, Logstash, etc.
Monitorización dentro de la arquitectura de microservicios
Utilice las herramientas adecuadas para supervisar los sistemas y servicios internos. Algunas de las mejores prácticas incluyen;
- Habilite el registro en la capa de aplicación. Puede utilizar Splunk, Graphana, ELK stack y otras herramientas que recopilan registros en los niveles de aplicación, contenedor, red e infraestructura.
- Supervise las métricas de uso
- Utilice las tendencias en métricas como CPU, memoria, tiempos de respuesta, errores, notificaciones y otras para detectar actividades inusuales indicativas de un ataque existente o potencial.
- Audite los registros en áreas como solicitudes entrantes de clientes, registros de bases de datos, contenedores y otros para identificar incoherencias o actividades inusuales.
#12. Automatice las actividades de seguridad
Automatice los procesos de seguridad, como el despliegue de actualizaciones, la exploración de vulnerabilidades, la supervisión, la aplicación de políticas y otras actividades. Además, compruebe las actualizaciones para asegurarse de que son seguras y de que no están introduciendo nuevas vulnerabilidades.
Después de las actualizaciones, lo ideal sería que el software de seguridad realizara pruebas en todos los contenedores y microservicios para ver si podría haber habido alguna vulnerabilidad o problema de seguridad antes.
#13. Proteja los datos de 🛡️ en todo momento
Proteja los datos en tránsito y en reposo. Idealmente, imponga el uso de HTTPS para todas las comunicaciones, para asegurar los datos en tránsito, y el cifrado para todos los datos sensibles en reposo. Evite transmitir y almacenar contraseñas, claves, credenciales y datos sensibles en texto plano que residan fuera del código.
La mejor estrategia es utilizar tecnologías estándar para cifrar todos los datos sensibles lo antes posible. Asimismo, descifre los datos lo más tarde posible para reducir la exposición.
Conclusión
Los microservicios se basan en componentes distribuidos para proporcionar ventajas como una mayor flexibilidad y opciones de despliegue. Sin embargo, al utilizar los microservicios, las organizaciones deben ajustar las políticas y estrategias internas de seguridad hacia un enfoque más nativo de la nube y distribuido.
Lo ideal es tratar de reducir la superficie de ataque, protegiendo el entorno de microservicios, las API, las aplicaciones y los datos.