Cómo Usar Tu Propio Dominio en Plataformas SaaS
April 9, 2024
Los dominios definidos por el usuario son una característica ampliamente utilizada en las plataformas de servicios SaaS. Plataformas conocidas como Shopify han ofrecido este servicio para brindar a los usuarios una experiencia más personalizada y flexible.
En el modelo operativo convencional, los usuarios de plataformas SaaS adquieren servicios de software ofrecidos por la plataforma para crear experiencias de usuario distintivas, atendiendo a los usuarios finales en consecuencia. Como punto de partida del servicio, las plataformas SaaS suelen asignar un subdominio generado aleatoriamente a cada usuario como punto de acceso predeterminado. Sin embargo, para satisfacer la demanda de direcciones de acceso personalizadas, las plataformas también permiten que los usuarios configuren sus propios nombres de dominio como puntos de acceso, mejorando el reconocimiento de la marca y la accesibilidad del usuario.
Este artículo tiene como objetivo profundizar en cómo implementar de manera efectiva la funcionalidad de dominio personalizado por el usuario en el desarrollo práctico de productos, proporcionando ideas y referencias valiosas para los desarrolladores.
Análisis del Problema
Puede que te preguntes: ¿No pueden los usuarios lograr esta funcionalidad simplemente apuntando el registro DNS CNAME del dominio al dominio aleatorio proporcionado por la plataforma? En realidad, el problema es más complejo, centrándose principalmente en los siguientes dos aspectos:
-
Los servicios modernos de internet utilizan el protocolo HTTPS para garantizar la seguridad de la comunicación. Cuando los usuarios finales intentan acceder al sitio proporcionado por la plataforma SaaS, usar el subdominio aleatorio proporcionado por la plataforma como punto de entrada permite el uso directo de un certificado TLS comodín, asegurando que no haya problemas con la gestión de certificados. En este punto, el apretón de manos entre los usuarios y el servicio HTTPS de la plataforma SaaS es confiable. Sin embargo, al usar un dominio personalizado por el usuario, la plataforma SaaS debe poseer un certificado confiable para ese dominio para que el navegador del usuario final establezca una conexión correcta, lo que requiere que la plataforma acepte certificados cargados por el usuario o proporcione servicios de gestión de certificados alojados.
-
Después de establecer una conexión segura, la plataforma SaaS también necesita identificar a qué inquilino intenta acceder el usuario final en la plataforma. Esto requiere que la plataforma mantenga una tabla de mapeo de dominios e identificadores de inquilinos, extrayendo información específica del inquilino de las solicitudes entrantes, como el encabezado de solicitud Host, y consultando la tabla de mapeo para encontrar el ID del inquilino y devolver los datos necesarios al solicitante.
Gestión de Certificados TLS
Principales Servicios en la Nube
Los principales proveedores de servicios en la nube, como AWS (Amazon Web Services) y GCP (Google Cloud Platform), ofrecen servicios completos de gestión de certificados y las correspondientes interfaces API, con Cloudflare incluso lanzando una solución dedicada, Cloudflare for SaaS, diseñada específicamente para servicios SaaS.
Tomando AWS como ejemplo, su servicio AWS Certificate Manager permite a las plataformas SaaS emitir fácilmente certificados confiables para dominios personalizados configurados por el usuario a través de su API. Como un servicio dentro del ecosistema de AWS, se integra perfectamente con otras funcionalidades centrales como Elastic Load Balancer y CloudFront, permitiendo que los certificados emitidos por ACM se utilicen directamente para la terminación TLS.
Con estos servicios en la nube, las plataformas pueden gestionar los certificados TLS de manera integral, lo que ciertamente suena atractivo. En las primeras etapas de un servicio SaaS, el uso de estos servicios en la nube puede aliviar significativamente la carga de los desarrolladores, permitiéndoles centrarse más en la implementación de la lógica del negocio. Sin embargo, en la búsqueda de una experiencia de usuario consistente, estos servicios en la nube también exponen algunos problemas potenciales.
Tomando AWS Certificate Manager como ejemplo, requiere la verificación de la propiedad del dominio al emitir certificados. Este proceso exige que los propietarios del dominio configuren registros CNAME específicos en sus registros DNS apuntando a la dirección de acm-validations.aws
. Además, este registro debe mantenerse durante un período prolongado para las operaciones de renovación de certificados posteriores. Esto significa que las plataformas SaaS deben exponer detalles de implementación específicos de la plataforma en la nube a los usuarios. Además, este mecanismo no sigue ningún estándar común de automatización de certificados como el protocolo ACME. Por lo tanto, las plataformas SaaS pueden quedar fuertemente vinculadas a los servicios en la nube de AWS. Cuando una plataforma SaaS tiene un gran número de usuarios, la migración (requiriendo que cada usuario reajuste sus registros DNS) se convierte en una tarea casi imposible.
Además, los certificados confiables emitidos por los servicios de ACM no admiten la descarga, lo que significa que estos certificados solo pueden ser utilizados por otros servicios dentro del ecosistema de AWS, dificultando la extensión a otros proveedores de nube y limitando la flexibilidad multi-nube.
Gestión Automatizada de Certificados
Con Let's Encrypt y otras Autoridades de Certificación (CA) basadas en el protocolo Automatic Certificate Management Environment (ACME, RFC8555) convirtiéndose gradualmente en la corriente principal, la gestión automatizada de certificados ya no es exclusiva de los servicios en la nube. Hoy en día, cualquier desarrollador puede implementar fácilmente la emisión y renovación automática de certificados, mejorando enormemente la usabilidad y seguridad del servicio.
La especificación ACME define varios mecanismos de verificación de propiedad del dominio, incluyendo pero no limitándose a DNS TXT, HTTP, TLS ALPN, etc., proporcionando a los solicitantes de certificados opciones flexibles y diversas. En el escenario SaaS, el método de autenticación HTTP es particularmente adecuado. Los usuarios solo necesitan configurar registros DNS CNAME para sus dominios personalizados, apuntándolos al dominio aleatorio asignado por la plataforma o a un punto de acceso CNAME unificado. Por ejemplo, la plataforma puede requerir que los usuarios resuelvan example.com a cname.contoso.com, y este punto de acceso CNAME apunta al servicio HTTP autoimplementado por la plataforma. Este diseño simplifica el proceso de emisión de certificados, haciéndolo más conciso y eficiente.
Una vez que la configuración del dominio es correcta, la plataforma puede invocar la API de la CA para crear órdenes de certificados. La CA accederá entonces al dominio del usuario a través de HTTP. Como el dominio ya está apuntando al punto de acceso de la plataforma en este momento, la plataforma puede satisfacer fácilmente las condiciones de verificación de cadena aleatoria específica de la CA, completando así la verificación de propiedad del dominio y descargando el certificado.
Este mecanismo no solo simplifica el proceso de configuración del usuario, sino que también evita la molestia de modificar frecuentemente los registros DNS. Más importante aún, libera a la plataforma de las restricciones de proveedores de servicios en la nube específicos, permitiendo que las plataformas SaaS brinden una experiencia de usuario más amigable y consistente.
Además, el uso de este mecanismo no significa que no se puedan utilizar servicios de CDN o balanceo de carga para la terminación TLS en la nube. De hecho, los servicios de gestión de certificados proporcionados por proveedores de servicios en la nube como AWS permiten a los desarrolladores importar certificados autogestionados a través de APIs para el acceso al tráfico. Los desarrolladores solo necesitan completar la emisión de certificados en sus propios programas y luego importar el certificado al servicio de gestión de certificados del proveedor de servicios en la nube, logrando así una integración perfecta y un uso eficiente de los recursos en la nube.
Sistemas Multi-Inquilino
Después de manejar con éxito los certificados TLS, el siguiente desafío es gestionar la lógica multi-inquilino en las plataformas SaaS. Dado que las plataformas SaaS no solo sirven a las necesidades específicas de un pequeño número de usuarios, sino que buscan proporcionar un conjunto unificado de características a una amplia gama de usuarios, sus arquitecturas de sistemas suelen adoptar diseños multi-inquilino. En este diseño, la plataforma identifica a diferentes inquilinos a través de identificadores únicos de inquilino y proporciona servicios correspondientes a sus respectivos usuarios finales.
Implementar mecanismos de identificación de inquilinos es relativamente sencillo. Dado que se requiere verificación de propiedad del dominio y gestión de certificados, los usuarios deben configurar dominios personalizados en la consola de la plataforma SaaS y seguir las instrucciones del sistema para configurar la resolución DNS. Una vez que el sistema completa la configuración del certificado, los registros de dominios personalizados se almacenan en el sistema y se asocian con el inquilino actual. Por lo tanto, cada vez que el sistema recibe una solicitud, solo necesita extraer el campo Host del encabezado de la solicitud HTTP para determinar el dominio de acceso utilizado por el navegador del cliente. Posteriormente, al consultar el registro del inquilino correspondiente a este dominio, el sistema puede identificar rápidamente el identificador del inquilino. Una vez obtenido el identificador del inquilino, el sistema puede consultar y acceder con precisión a los datos del inquilino correspondiente.
Conclusión
Los dominios personalizados son una característica central en las plataformas SaaS, destinada a proporcionar a los usuarios una experiencia de acceso más personalizada y flexible. En el proceso de implementación de la funcionalidad de dominio personalizado, se deben abordar dos problemas clave: la gestión de certificados TLS y la gestión multi-inquilino.
Al abordar estos dos problemas, podemos garantizar la seguridad de la comunicación y el servicio personalizado en la identificación de inquilinos, mejorando significativamente la calidad del servicio y la experiencia del usuario en las plataformas SaaS. Esto ayudará a fortalecer la confianza y satisfacción del usuario con la plataforma, promoviendo su desarrollo sostenible.