Software as a Service (SaaS)
Cuando se habla de Software como servicio o SaaS del inglés Software as a Service, se trata acerca de un modelo de licenciamiento y entrega en el cual el software es licenciado en un plan de subscripción y se encuentra almacenado en los servidores del proveedor.
Mediante este servicio, los clientes utilizan la infraestructura en la nube para publicar su aplicación y dar accesos en su ambiente. El cliente es responsable de manejar los accesos de sus usuarios, crear cuentas, proveer recursos y gestionar cuentas dentro de su aplicación.
Algunos aplicaciones que se ofrecen como SaaS son Salesforce, Google Suite, Dropbox, Office 365, Zoom, AWS y Slack, entre otras.
Arquitectura Multiusuario o Multiinquilo
La Arquitectura Multiusuario, Multiinquilo o Multi-Tenant en inglés, significa que una misma instancia de un software y su infraestructura soporta múltiples usuarios. Para un mejor entendimiento de este artículo, a los usuarios de este tipo de arquitecturas se les llamará inquilinos.
Cada inquilino comparte la aplicación y podría o no compartir incluso la base de datos. Como medida de seguridad y para mantener la privadad de la información, los datos de cada inquilino son aislados y permanecen ocultos para otros inquilinos.
Principios de una Arquitectura Multiusuario
Una Arquitectura Multiusuario debe tomar en cuenta varios aspectos para asegurar un servicio de calidad, sin embargo, se puede decir que los tres más importantes son los siguientes: Aislamiento, Inducción e Identidad.
En este artículo se hablará acerca del Aislamiento, tipos que existen y consideraciones para su implementación.
Estrategias para implementar Aislamiento
Implementar una estrategia de Aislamiento requiere del analisis de algunas modelos que se pueden presentar en la infraestructura que se está construyendo. Algunos de estos modelos son: Estrategia de Niveles, Vecinos Ruidosos, Requerimientos de Cumplimiento, Arquitectura Heredada y Oportunidad de Negocio.
Estrategia de Niveles
La Estrategia de Niveles se aplica en aquellos casos donde se tiene un sistema que ofrece distintos niveles de versiones para distintos tipos de clientes, como básico, avanzado y empresarial, por ejemplo. En este caso cada nivel tendrá diferentes niveles de aislamiento y por lo tanto se debe desarrollar una infraestructura que los soporte.
Vecinos Ruidosos
Este otro modelo está relacionado al rendimiento, no tanto con la seguridad. Si se tienen inquilinos que consideran que compartir el ambiente con otros inquilinos podría afectar el rendimiento del sistema, entonces para evitar este impacto se debe desarrollar una estrategia de aislamiento que les permita tener acceso a sus propios recursos y de esta forma evitar esa afectación.
Requerimientos de Cumplimiento
Los Requerimientos de Cumplimiento son, quizás, de los modelos más comunes para implementar estrategias de aislamiento. Si los clientes son de empresas que deben cumplir con altos niveles regulatorios, como cuidados de la salud o servicios financieros, entonces deben implementarse estrategias de aislamiento muy específicas para cubrir estas necesidades.
Arquitectura Heredada
Si se deben migrar o incluir sistemas viejos para convivir con la nueva infraestructura entonces se deben buscar la forma de aplicar un nivel de aislamiento apropiado para estos sistemas que posiblemente no funcionen con el modelo a implementar.
Oportunidad de Negocio
Se puede tener una infraestructura que cuenta con uno o distintos niveles de aislamiento, pero siempre se debe ser flexible para aplicar nuevos niveles de aislamiento si se recibe una solicitud de un cliente que estará dispuesto a pagar por ello.
Tipos de Aislamiento
1. Silo
En este modelo cada recurso se encuentra totalmente aislado de los otros recursos del sistema, por lo tanto los inquilinos no comparten recursos. Para lograr esto se debe proveer de una ambiente independiente a cada inquilino, que contenga todos los recursos necesarios para sus actividades.
El modelo basado en silos se brinda la experiencia de un entorno SaaS de múltiples inquilinos donde cada inquilino tiene su propia pila de servicios pero a su vez existen servicios unificados como monitoreo, desarrollo e implementación para administrar todos los inquilinos en un repositorio compartido.
En el tipo de aislamiento por silo existen varias formas para implementarlo:
Cuenta por inquilino
Es una forma simple para implementar el aislamiento por silo. Básicamente, a cada inquilino se le entrega una cuenta separada en el ambiente de AWS. Es importante considerar factores como los límites de cuentas, la cantidad de inquilinos, la administración y la descentralización al momento de seleccionar esta técnica para que cumpla con la infraestructura y servicios que se van a ofrecer.
NPV (VPC) por inquilino
En este modelo, todos los inquilinos comparten la cuenta pero cada uno tiene una NPV o VPC de las siglas en inglés para una Nube Privada Virtual. En AWS se usará este tipo de construcción de red más grupos de seguridad y mecanismos para controlar el ingreso y asegurar así que cada inquilino usuará solamente su ambiente y no traspasará los límites hacia el ambiente de otro inquilino.
Subnet por inquilino
En esta arquitectura cada subred dentro de la VPC será un inquilino independiente. Como todas las demás opciones, es importante validar si este esquema es atractivo y útil para el servicio que se ofrece.
2. Pool
Este modelo consiste en compartir recursos con todos los usuarios y se deben implementar políticas y otras técnicas para asegurar que se realice un correcto aislamiento. Una técnica que puede utilizar es una correcta definición de la base de datos para que cada inquilino tenga un identificador único y que los datos se accedan apropiadamente por medio de este identificador.
3. Políticas de control de acceso
Una técnica muy apropiada para realizar un manejo apropiado del aislamiento para cada inquilino es establecer políticas de control de acceso no solo a nivel del API de acceso, sino también a nivel de cada nodo o servicio que se esté utilizando de AWS, como un S3 o Redshift.
De esta manera la solución será más robusta y evitará que se den acceso inapropiados a recursos e información de otros inquilinos.
4. Acceso por API
Para mejorar el aislamiento cuando se accede por medio de API y si se está usando el API Gateway, entonces se recomienda utilizar el Custom Authorizer de AWS. Este servicio puede ver los datos y aplicarles las políticas que restrinjan el acceso al otras partes del sistema.
Reto
Al momento de trabajar una arquitectura Multiusuario o Multiinquilino se debe tener la apertura para aplicar distintos tipos de aislamiento según los tipos de servicios y clientes que se estén utilizando su sistema.
Brindar seguridad por autenticación no es suficiente para limitar accesos a otros puntos del sistema, utilice políticas de acceso donde sea necesario.
Verifique que otras bondades ofrecen los servicios de AWS al momento de su selección para que pueda identificar el mecanismo de aislamiento más apropiado para su arquitectura.