13 mejores prácticas para proteger los microservicios

La arquitectura de microservicios brinda flexibilidad, escalabilidad y la capacidad de modificar, agregar o eliminar componentes de software sin afectar otras partes de la aplicación.

Además de ciclos de desarrollo de software más cortos, equipos más pequeños y opciones de lenguaje de programación flexibles, le permite escalar o solucionar problemas de ciertas funciones o servicios sin interferir con los otros componentes.

En general, los microservicios permiten dividir grandes aplicaciones monógamas en servicios distintos que se pueden implementar de forma independiente. Sin embargo, estos servicios independientes más pequeños aumentan la cantidad de componentes, por lo tanto, la complejidad y la dificultad para asegurarlos.

Imagen de arquitectura monolítica frente a microservicios Sombrero rojo

Por lo general, una implementación típica de microservicios tendrá las capas de hardware, servicio o aplicación, comunicación, nube, virtualización y orquestación. Cada uno de estos tiene requisitos, controles y desafíos de seguridad específicos.

Desafíos de seguridad asociados con los microservicios

Los microservicios suelen ser sistemas ampliamente distribuidos con reglas de acceso complejas, más tráfico para monitorear y una superficie de ataque más grande. Además, la mayoría de los microservicios en la nube se ejecutan en entornos de nube, que también tienen distintas configuraciones y controles de seguridad.

Debido a la gran cantidad de API, puertos y componentes que están expuestos, es posible que los firewalls tradicionales no brinden la seguridad adecuada. Estos problemas hacen que las implementaciones de microservicios sean más vulnerables a varias amenazas cibernéticas como el hombre en el medio, ataques de inyección, secuencias de comandos entre sitios, DDoS y otros.

La seguridad de la red es otro desafío con los microservicios. En particular, la identidad y el control de acceso asumen un nuevo nivel de complejidad. Otras vulnerabilidades incluyen código inseguro y fallas en los sistemas de descubrimiento de servicios.

Si bien proteger los microservicios es más difícil que las aplicaciones monolíticas, puede protegerlos de manera efectiva al establecer una buena estrategia y seguir las mejores prácticas.

Idealmente, la arquitectura requiere un enfoque distribuido que debe cubrir todos los diferentes componentes.

Las áreas típicas a abordar incluyen

  • Protección de aplicaciones, microservicios y usuarios
  • Protección de la gestión de acceso e identidad
  • Protección de datos
  • Mejore la seguridad de la comunicación de servicio a servicio
  • Monitorización de los microservicios y sistemas de seguridad

Prácticas recomendadas para proteger los microservicios

Una de las mejores estrategias es utilizar una combinación de mejores prácticas, herramientas y controles para proteger todo el ecosistema. El enfoque real puede diferir según el tipo de servicios, aplicaciones, usuarios, factores ambientales y otros.

Si decide usar microservicios, debe asegurarse de cumplir con todas las demandas de seguridad para los servicios, las conexiones y los datos.

Ahora echemos un vistazo a algunas prácticas efectivas de seguridad de microservicios.

#1. Construye seguridad desde el principio 👮

Haga que la seguridad forme parte del ciclo de desarrollo. Idealmente, integre la seguridad en el desarrollo y la implementación de microservicios desde el principio. Abordar la seguridad de esta manera es un enfoque fácil, efectivo y económico que esperar para agregarla 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 en la que aplica varias capas de seguridad en sus servicios y datos. La práctica hace que sea más difícil para los atacantes penetrar a través de las múltiples capas, lo que proporciona una fuerte seguridad para sus servicios y datos.

A diferencia de las soluciones de seguridad perimetral como los firewalls, el concepto de Defensa en profundidad es diferente. Se basa en una combinación de herramientas como antivirus, firewall, administración de parches, software antispam y otras para proporcionar múltiples capas de seguridad distribuidas por todo el sistema.

Imagen de seguridad multicapa de defensa en profundidad: imperva

Con este enfoque, primero debe identificar los servicios confidenciales, después de lo cual aplica las capas de seguridad adecuadas a su alrededor.

#3. Implementar 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, apuntar al principio de seguridad de privilegios mínimos es una buena práctica y requiere una combinación de estrategias que incluyen pero no se limitan a;

  • Limitar el permiso al mínimo requerido
  • Evite ejecutar servicios y cualquier otra cosa usando el sudo o cuentas privilegiadas.
  • Limitar o controlar el acceso y 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 contenedor.
  • Utilice reglas apropiadas para aislar el acceso a los recursos.

También es vital asegurarse de que las imágenes del contenedor no tengan vulnerabilidades o problemas de seguridad. Un escaneo regular de seguridad y vulnerabilidad de los contenedores ayudará a identificar riesgos.

Las herramientas típicas de escaneo de imágenes incluyen clara, anclay más.

#4. Implementa una autenticación multifactor 🔒

Habilitar la autenticación multifactor mejora la seguridad del front-end.

Los usuarios que accedan deberán proporcionar los detalles 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 específica. La técnica dificulta que los atacantes, que pueden estar usando credenciales robadas o pirateadas, accedan a los microservicios, ya que no tendrán forma de proporcionar la segunda autenticación.

#5. Usar tokens de acceso e identidad de usuario

En la implementación de microservicios, una gran cantidad 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 y, por lo tanto, proteger sus microservicios. En consecuencia, esto permite que aplicaciones de terceros accedan a otros servicios o datos de los usuarios.

En una implementación típica, la aplicación principal solicitará al usuario que autorice el servicio de terceros. Al aceptar esto, la aplicación genera un token de acceso para la sesión.

En particular, OAuth es una de las estrategias más efectivas para la identidad del usuario y el control de acceso. Aunque existen varios otros protocolos de autorización, y también puede crear el suyo propio, es una buena práctica utilizar el OAuth ya que es más estándar, estable y ampliamente aceptado.

#6. Crear una puerta de enlace 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 lo ayude a centralizar todo el acceso desde sistemas y clientes externos.

Para lograr esto, implemente una puerta de enlace API para evaluar todas las solicitudes entrantes en busca de problemas de seguridad antes de enrutarlas a los microservicios apropiados. La puerta de enlace API se encuentra entre las aplicaciones cliente y los microservicios. Luego limita la exposición de los microservicios al tiempo que proporciona funciones adicionales de administración de solicitudes, como autenticación, terminación SSL, traducción de protocolos, monitoreo, enrutamiento de solicitudes, almacenamiento en caché y más.

Con este enfoque, la puerta de enlace API enruta todos los servicios externos a los microservicios y, al mismo tiempo, admite el principio de seguridad de defensa en profundidad.

Imagen de la puerta de enlace de la API de microservicios libro vivo

Las puertas de enlace API típicas incluyen NGINX, Kong, Tipo, Embajador, Puerta de enlace de la API de AWSy más.

Para obtener más información sobre la seguridad de la API, consulte nuestra guía sobre por qué y cómo proteger el punto final de la API.

#7. API de perfil basadas en la zona de implementación

Implemente restricciones basadas en roles asegurándose de que los usuarios solo tengan acceso a las API y los servicios que necesitan. Dado que la mayoría del software malintencionado suele exponer un servicio a más personas, limitar el acceso solo a los usuarios autorizados reduce los riesgos. Una técnica para reducir la exposición es etiquetar las API en función de los usuarios que deberían tener acceso a ellas. Generalmente, las API pueden ser;

  • API de Ethernet: para servicios expuestos al mundo exterior fuera del centro de datos.
  • API de zona corporativa: están destinadas al tráfico privado interno
  • API de DMZ: para manejar el tráfico que se origina en Internet
  • API de zona híbrida: para implementaciones de centros de datos

#8. Asegure las comunicaciones de servicio a servicio

Las prácticas efectivas implican autenticar y autorizar solicitudes cuando dos microservicios se están comunicando.

En general, existen tres técnicas principales que puede utilizar para proteger las comunicaciones entre servicios. Estos son Trust the network, JSON Web Token (JWT) y Mutual Transport Layer Security (mTLS o Mutual TLS).

Protección de las comunicaciones entre servicios con JWT Image libro vivo

De los tres, el más popular es el mTLS. En este enfoque, cada microservicio debe llevar un par de claves pública/privada. Luego, el microservicio del cliente usa el par de claves para autenticarse en el microservicio receptor a través de mTLS.

Durante la autenticación, cada microservicio genera un certificado. Posteriormente, cada microservicio utilizará el certificado del otro para autenticarse.

Si bien TLS proporciona integridad y confidencialidad para los datos en tránsito, también permite que el cliente identifique un microservicio. El microservicio del cliente suele conocer al otro microservicio. Sin embargo, dado que TLS es unidireccional, un microservicio de recepción no puede verificar el microservicio del cliente y los atacantes pueden aprovechar esta falla. Por otro lado, el mTLS proporciona un medio en el que cada uno de los microservicios puede identificarse entre sí.

#9. Límite de tarifa 🚏 tráfico de clientes

La limitación del tráfico externo evita problemas como ataques de denegación de servicio (DoS), así como instancias en las que algunos clientes consumen la mayor parte del ancho de banda de la aplicación. Un enfoque es aplicar varias reglas que pueden monitorear y controlar la tasa de tráfico enviado o recibido de un cliente en función de la IP, el tiempo, etc.

Configure sus servicios para que disminuyan la velocidad si detectan varios intentos fallidos de inicio de sesión en sus API o cualquier otra actividad sospechosa.

Un sistema lento desalentaría a los atacantes y probablemente abandonaría su intento de acceder a los servicios. Puede tasar el límite utilizando la puerta de enlace API, a través del código o cualquier otra técnica. Por lo general, la mayoría de los entornos SaaS tienen un límite de velocidad de API para minimizar el abuso por parte de los usuarios, así como los ataques.

#10. Usar administradores de orquestación

Los administradores de orquestaciones le permiten automatizar la configuración, la coordinación y otras tareas de administración de microservicios, además de mejorar la seguridad. Por lo general, las herramientas le permiten administrar múltiples contenedores, limitar el acceso a metadatos, segregar cargas de trabajo, recopilar registros y más.

Algunas herramientas de orquestación tienen funciones adicionales que permiten a los desarrolladores almacenar y compartir información confidencial, como certificados SSL, claves de cifrado, contraseñas y tokens de identidad.

Los dos métodos comúnmente utilizados para la orquestación efectiva de microservicios son;

  • Codificación de la orquestación como un microservicio
  • Uso de las puertas de enlace API para proporcionar una capa de orquestación

No se recomienda la orquestación a través de la puerta de enlace API debido a los desafíos cuando existe la necesidad de escalar los servicios.

Capa de orquestación de microservicios – Imagen Globallogic

Las herramientas típicas de gestión de la orquestación incluyen Kubernetes, istio, Servicio Azure Kubernetes (AKS)etc.

Para obtener más información, explore Container Orchestration for DeOps.

#11. Monitoriza todos tus sistemas y servicios

Dado que los microservicios se basan en sistemas distribuidos, debe tener una estrategia de monitoreo confiable y efectiva para todos los componentes individuales.

La implementación de un monitoreo continuo le permite detectar y abordar los riesgos de seguridad a tiempo. Para esto, existe una amplia gama de soluciones de monitoreo de microservicios, que incluyen Prometeo, Estadísticas, InflujoDB, Logstashetc.

Supervisión dentro de la arquitectura de microservicios

Utilizar las herramientas adecuadas para monitorear los sistemas y servicios internos. Algunas mejores prácticas incluyen;

  • Habilite el registro en la capa de aplicación. Puedes splunk, grafana, pila de ELKy otras herramientas que recopilan registros en los niveles de aplicación, contenedor, red e infraestructura.
  • Supervisar las métricas de uso
  • Utilice las tendencias en métricas como CPU, memoria, tiempos de respuesta, errores, notificaciones y otros para detectar actividades inusuales que indiquen un ataque existente o potencial.
  • Audite los registros en áreas como solicitudes de clientes entrantes, registros de bases de datos, contenedores y otros para identificar inconsistencias o actividades inusuales.

#12. Automatice las actividades de seguridad

Automatice los procesos de seguridad, como la implementación de actualizaciones, el análisis de vulnerabilidades, la supervisión, la aplicación de políticas y otras actividades. Además, verifique las actualizaciones para asegurarse de que sean seguras y de que no presenten nuevas vulnerabilidades.

Después de las actualizaciones, el software de seguridad idealmente debería realizar pruebas en todos los contenedores y microservicios para ver si podría haber algunas vulnerabilidades o problemas de seguridad que ocurrieron antes.

#13. Protege 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 proteger los datos en tránsito y el cifrado de todos los datos confidenciales en reposo. Evite transmitir y almacenar contraseñas, claves, credenciales y datos confidenciales de texto sin formato que residen fuera del código.

La mejor estrategia es utilizar tecnologías estándar para cifrar todos los datos confidenciales lo antes posible. Además, descifre los datos lo más tarde posible para reducir la exposición.

Conclusión

Los microservicios se basan en componentes distribuidos para brindar beneficios como más flexibilidad y opciones de implementación. Sin embargo, al usar los microservicios, las organizaciones deben ajustar las políticas y estrategias de seguridad interna hacia un enfoque más distribuido y nativo de la nube.

Idealmente, apunte a reducir la superficie de ataque, protegiendo el entorno de microservicios, las API, las aplicaciones y los datos.