Como Trazer Seu Próprio Domínio em Plataformas SaaS?
April 9, 2024
Domínios definidos pelo usuário são uma funcionalidade amplamente utilizada em plataformas de serviços SaaS. Plataformas conhecidas como o Shopify já oferecem este serviço para proporcionar aos usuários uma experiência mais personalizada e flexível.
No modelo operacional convencional, os usuários de plataformas SaaS adquirem serviços de software oferecidos pela plataforma para criar experiências de usuário distintas, atendendo aos usuários finais de acordo. Como ponto de partida do serviço, as plataformas SaaS geralmente atribuem um subdomínio gerado aleatoriamente a cada usuário como o ponto de acesso padrão. No entanto, para atender à demanda por endereços de acesso personalizados, as plataformas também suportam que os usuários configurem seus próprios nomes de domínio como pontos de acesso, aumentando o reconhecimento da marca e a acessibilidade do usuário.
Este artigo tem como objetivo aprofundar como implementar efetivamente a funcionalidade de domínio personalizado pelo usuário no desenvolvimento prático de produtos, fornecendo insights valiosos e referências para desenvolvedores.
Análise do Problema
Você pode se perguntar: Os usuários não podem alcançar essa funcionalidade simplesmente apontando o registro DNS CNAME do domínio para o domínio aleatório fornecido pela plataforma? Na realidade, a questão é mais complexa, concentrando-se principalmente nos dois aspectos a seguir:
-
Os serviços modernos da internet utilizam o protocolo HTTPS para garantir a segurança da comunicação. Quando os usuários finais tentam acessar o site fornecido pela plataforma SaaS, usar o subdomínio aleatório fornecido pela plataforma como ponto de entrada permite o uso direto de um certificado TLS curinga, garantindo que não haja problemas com o gerenciamento de certificados. Neste ponto, o handshake entre os usuários e o serviço HTTPS da plataforma SaaS é confiável. No entanto, ao usar um domínio personalizado pelo usuário, a plataforma SaaS deve possuir um certificado confiável para esse domínio para que o navegador do usuário final estabeleça uma conexão correta, exigindo que a plataforma aceite certificados enviados pelo usuário ou forneça serviços de gerenciamento de certificados hospedados.
-
Após estabelecer uma conexão segura, a plataforma SaaS também precisa identificar qual inquilino o usuário final está tentando acessar na plataforma. Isso exige que a plataforma mantenha uma tabela de mapeamento de domínios e identificadores de inquilinos, extraindo informações específicas do inquilino de solicitações recebidas, como o cabeçalho de solicitação Host, e consultando a tabela de mapeamento para encontrar o ID do inquilino para retornar os dados necessários ao solicitante.
Gerenciamento de Certificados TLS
Principais Serviços de Nuvem
Grandes provedores de serviços de nuvem, como AWS (Amazon Web Services) e GCP (Google Cloud Platform), oferecem serviços abrangentes de gerenciamento de certificados e interfaces de API correspondentes, com a Cloudflare até lançando uma solução dedicada, Cloudflare for SaaS, especialmente projetada para serviços SaaS.
Tomando a AWS como exemplo, seu serviço AWS Certificate Manager permite que plataformas SaaS emitam facilmente certificados confiáveis para domínios personalizados configurados pelos usuários por meio de sua API. Como um serviço dentro do ecossistema AWS, ele se integra perfeitamente com outras funcionalidades principais, como Elastic Load Balancer e CloudFront, permitindo que certificados emitidos pela ACM sejam usados diretamente para terminação TLS.
Com esses serviços de nuvem, as plataformas podem gerenciar certificados TLS de forma integrada, o que realmente parece atraente. Nos estágios iniciais de um serviço SaaS, usar esses serviços de nuvem pode aliviar significativamente o fardo dos desenvolvedores, permitindo que eles se concentrem mais na implementação da lógica de negócios. No entanto, na busca por uma experiência de usuário consistente, esses serviços de nuvem também expõem alguns problemas potenciais.
Tomando o AWS Certificate Manager como exemplo, ele requer verificação de propriedade do domínio ao emitir certificados. Esse processo exige que os proprietários de domínios configurem registros CNAME específicos em seus registros DNS apontando para o endereço de acm-validations.aws
. Além disso, esse registro precisa ser mantido por um período prolongado para operações subsequentes de renovação de certificados. Isso significa que as plataformas SaaS devem expor detalhes de implementação específicos da plataforma de nuvem aos usuários. Além disso, esse mecanismo não adere a nenhum padrão comum de automação de certificados, como o protocolo ACME. Portanto, as plataformas SaaS podem ficar fortemente vinculadas aos serviços de nuvem da AWS. Quando uma plataforma SaaS tem um grande número de usuários, a migração (exigindo que cada usuário reajuste os registros DNS) torna-se quase uma tarefa impossível.
Além disso, os certificados confiáveis emitidos pelos serviços ACM não suportam download, o que significa que esses certificados só podem ser usados por outros serviços dentro do ecossistema AWS, dificultando a extensão fácil para outros provedores de nuvem, limitando assim a flexibilidade multicloud.
Gerenciamento Automatizado de Certificados
Com o Let's Encrypt e outras Autoridades de Certificação (CAs) baseadas no protocolo Ambiente de Gerenciamento Automatizado de Certificados (ACME, RFC8555) gradualmente se tornando mainstream, o gerenciamento automatizado de certificados não é mais exclusivo dos serviços de nuvem. Hoje, qualquer desenvolvedor pode facilmente implementar a emissão e renovação automática de certificados, aumentando significativamente a usabilidade e segurança do serviço.
A especificação ACME define vários mecanismos de verificação de propriedade de domínio, incluindo, mas não se limitando a, DNS TXT, HTTP, TLS ALPN, etc., fornecendo aos solicitantes de certificados opções flexíveis e diversificadas. No cenário SaaS, o método de autenticação HTTP é particularmente adequado. Os usuários só precisam configurar registros DNS CNAME para seus domínios personalizados, apontando-os para o domínio aleatório alocado pela plataforma ou um ponto de acesso CNAME unificado. Por exemplo, a plataforma pode exigir que os usuários resolvam example.com para cname.contoso.com, e esse ponto de acesso CNAME aponta para o serviço HTTP autoimplantado pela plataforma. Esse design simplifica o processo de emissão de certificados, tornando-o mais conciso e eficiente.
Uma vez que a configuração do domínio esteja correta, a plataforma pode invocar a API da CA para criar pedidos de certificados. A CA acessará então o domínio do usuário via HTTP. Como o domínio já está apontando para o ponto de acesso da plataforma nesse momento, a plataforma pode facilmente satisfazer as condições específicas de verificação de string aleatória da CA, completando assim a verificação de propriedade do domínio e baixando o certificado.
Esse mecanismo não apenas simplifica o processo de configuração do usuário, mas também evita o incômodo de modificar frequentemente os registros DNS. Mais importante, ele libera a plataforma das restrições de provedores de serviços de nuvem específicos, permitindo que plataformas SaaS ofereçam uma experiência de usuário mais amigável e consistente.
Além disso, usar esse mecanismo não significa que serviços de CDN ou balanceamento de carga não possam ser utilizados para terminação TLS na nuvem. Na verdade, os serviços de gerenciamento de certificados fornecidos por provedores de serviços de nuvem como a AWS suportam que os desenvolvedores importem certificados auto gerenciados via APIs para acesso ao tráfego. Os desenvolvedores só precisam completar a emissão de certificados em seus próprios programas e, em seguida, importar o certificado para o serviço de gerenciamento de certificados do provedor de serviços de nuvem, alcançando assim uma integração perfeita e utilização eficiente dos recursos de nuvem.
Sistemas Multi-Inquilino
Após lidar com sucesso com os certificados TLS, o próximo desafio é gerenciar a lógica de multi-inquilino nas plataformas SaaS. Dado que as plataformas SaaS não atendem apenas às necessidades específicas de um pequeno número de usuários, mas buscam fornecer um conjunto unificado de funcionalidades para uma ampla gama de usuários, suas arquiteturas de sistema geralmente adotam designs multi-inquilino. Nesse design, a plataforma identifica diferentes inquilinos por meio de IDs de inquilino únicos e fornece serviços correspondentes aos seus respectivos usuários finais.
Implementar mecanismos de identificação de inquilinos é relativamente simples. Como a verificação de propriedade do domínio e o gerenciamento de certificados são necessários, os usuários devem configurar domínios personalizados no console da plataforma SaaS e seguir as instruções do sistema para configurar a resolução DNS. Uma vez que o sistema completa a configuração do certificado, os registros de domínios personalizados serão armazenados no sistema e associados ao inquilino atual. Portanto, sempre que o sistema recebe uma solicitação, ele só precisa extrair o campo Host do cabeçalho da solicitação HTTP para determinar o domínio de acesso usado pelo navegador do cliente. Posteriormente, consultando o registro do inquilino correspondente a esse domínio, o sistema pode identificar rapidamente o identificador do inquilino. Uma vez que o identificador do inquilino é obtido, o sistema pode consultar e acessar com precisão os dados do inquilino correspondente.
Conclusão
Domínios personalizados são uma funcionalidade central em plataformas SaaS, visando fornecer aos usuários uma experiência de acesso mais personalizada e flexível. No processo de implementação da funcionalidade de domínio personalizado, duas questões-chave devem ser abordadas: gerenciamento de certificados TLS e gerenciamento de multi-inquilino.
Ao resolver esses dois problemas, podemos garantir a segurança da comunicação e o serviço personalizado na identificação de inquilinos, aumentando significativamente a qualidade do serviço e a experiência do usuário das plataformas SaaS. Isso ajudará a fortalecer a confiança e satisfação dos usuários com a plataforma, promovendo seu desenvolvimento sustentável.