La arquitectura de microservicios proporciona 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.

Generalmente, 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 el número de componentes, de ahí la complejidad y dificultad de asegurarlos.

Arquitectura monolítica frente a microservicios
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 ellos tiene requisitos, controles y desafíos de seguridad específicos.

Desafíos de seguridad asociados con microservicios

Los microservicios suelen ser sistemas ampliamente distribuidos con reglas de acceso complejas, más tráfico para monitorear 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 diferentes configuraciones y controles de seguridad.

Debido a la gran cantidad de API, puertos y componentes que se expuesto, los cortafuegos tradicionales pueden no proporcionar la seguridad adecuada. Estos problemas hacen que las implementaciones de microservicios sean más vulnerables a diversas amenazas cibernéticas como el intermediario, los ataques de inyección, las 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.

Aunque proteger los microservicios es más difícil que las aplicaciones monolíticas, puede protegerlos de manera eficaz si establece una buena estrategia y sigue las mejores prácticas.

Idealmente, la arquitectura requiere un enfoque distribuido que cubra 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
  • Protección de datos
  • Mejorar la seguridad de las comunicaciones de servicio a servicio
  • Monitoreo de microservicios y sistemas de seguridad

Mejores prácticas para proteger 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 utilizar microservicios, debe asegurarse de cumplir con todas las demandas de seguridad para los servicios, las conexiones y los datos.

Veamos ahora algunas prácticas de seguridad de microservicios efectivas.

#1. Desarrolle seguridad desde el principio 👮

Haga que la seguridad sea parte del ciclo de desarrollo. Idealmente, integrar seguridad en el desarrollo e implementación de microservicios desde el principio. Abordar la seguridad de esta manera es un enfoque fácil, efectivo y más económico que esperar para agregarlo cuando el desarrollo del software está a punto de completarse.

#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 gran seguridad para sus servicios y datos.

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

seguridad multicapa de defensa en profundidad
Imagen de seguridad multicapa de defensa en profundidad: Imperva

Con este enfoque, primero debe identificar los servicios sensibles, luego de lo cual aplica las capas de seguridad adecuadas a su alrededor.

#3. Implementar la seguridad a nivel de contenedor

Muy a menudo, los microservicios se basan en envase tecnología. 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, entre otras, las siguientes:

  • Limitar el permiso al mínimo requerido
  • Evite ejecutar servicios y cualquier otra cosa utilizando 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 prevenir el robo o compromiso de datos.
  • No guarde secretos en el disco contenedor.
  • Utilice las reglas adecuadas para aislar el acceso a los recursos.

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

Las herramientas típicas de escaneo de imágenes incluyen Clair, ancla, y más.

#4. Implementar una autenticación multifactor 🔒

La habilitación de 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 utilizando credenciales robadas o pirateadas, accedan a los microservicios, ya que no tendrán una 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 autorización segura y control de acceso. 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 las 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, se recomienda 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. Exponer 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 lograr esto, implemente una puerta de enlace API para detectar 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, respalda el principio de seguridad de defensa en profundidad.

Imagen de puerta de enlace de API de microservicios libro vivo

Las puertas de enlace API típicas incluyen Nginx, Kong, Tipo, Embajador, Puerta de enlace de API de AWS, y 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 a menudo expone un servicio a más personas, limitar el acceso solo a 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 externo fuera del centro de datos.
  • API de zona corporativa: están destinadas al tráfico privado interno
  • API 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 comunican.

En general, existen tres técnicas principales que puede utilizar para proteger las comunicaciones entre servicios. Estos son los Confía en la red, Token web JSON (JWT), y Seguridad de la capa de transporte mutua (mTLSor TLS mutuo). 

Asegurar la comunicación entre servicios con JWT
Asegurar 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. A continuación, 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 al cliente identificar un microservicio. El microservicio del cliente normalmente conoce el otro microservicio. Sin embargo, dado que TLS es unidireccional, un microservicio receptor no puede verificar el microservicio del cliente, y los atacantes pueden aprovechar este defecto. Por otro lado, el mTLS proporciona un medio en el que cada uno de los microservicios puede identificar al otro.

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

Limitar el tráfico externo evita problemas como ataques de denegación de servicio (DoS), así como casos en los 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, 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 renunciaría a su intento de acceder a los servicios. Puede limitar la tasa 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 una limitación de la tasa de API para minimizar el abuso por parte de los usuarios y 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 varios contenedores, limitar el acceso a los metadatos, segregar cargas de trabajo, recopilar registros y más.

Algunas herramientas de orquestación tienen características 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 más utilizados para la orquestación de microservicios eficaz son;

  • Codificar la orquestación como un microservicio
  • Usar 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 es necesario escalar los servicios.

Capa de orquestación de microservicios
Capa de orquestación de microservicios - Imagen Globallogic

Las herramientas típicas de administración de orquestación incluyen Kubernetes, Istio, Servicio Azure Kubernetes (AKS), etc.

Para obtener más información, explore el Orquestación de contenedores para DeOps.

#11. Supervise todos sus sistemas y servicios

Dado que los microservicios dependen de 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 ello, existe una amplia gama de soluciones de monitorización de microservicios, que incluyen Prometeo, Estadísticas, Influjo DB, Logstash, etc.

Visualización de grafana prometheus

Monitoreo dentro de la arquitectura de microservicios

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

  • Habilite el registro en la capa de la aplicación. Usted puede Splunk, grafana, Pila de ELKy otras herramientas que recopilan registros en los niveles de aplicación, contenedor, red e infraestructura.
  • Monitorear 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 indicativas de un ataque existente o potencial.
  • Audite los registros en áreas tales como solicitudes de clientes entrantes, registros de bases de datos, contenedores y otras para identificar inconsistencias o actividades inusuales.

#12. Automatizar las actividades de seguridad

Automatice los procesos de seguridad, como la implementación de actualizaciones, el análisis de vulnerabilidades, monitorización., hacer cumplir las 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 habido algunas vulnerabilidades o problemas de seguridad que ocurrieron antes.

#13. Proteja los datos de 🛡️ en todo momento

Proteja los datos en tránsito y en reposo. Idealmente, hacer cumplir el uso de HTTPS para todas las comunicaciones, para proteger los datos en tránsito y cifrado para 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 proporcionar 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 nativo y distribuido de la nube.

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