Padrão de gatekeeper

Host Dedicado do Azure

Proteja aplicativos e serviços usando uma instância de host dedicado para intermediar solicitações entre clientes e o aplicativo ou serviço. O agente valida e higieniza as solicitações e pode fornecer uma camada adicional de segurança e limitar a superfície de ataque do sistema.

Contexto e problema

Os serviços de nuvem expõem pontos de extremidade que permitem que aplicativos clientes chamem suas APIs. O código usado para implementar as APIs aciona ou executa diversas tarefas, incluindo, entre outras, autenticação, autorização, validação de parâmetros e parte ou todo o processamento de solicitações. É provável que o código API acesse o armazenamento e outros serviços em nome do cliente.

Caso um usuário mal-intencionado comprometa o sistema e obtenha acesso ao ambiente de hospedagem do aplicativo, seus mecanismos de segurança e acesso a dados e outros serviços ficam expostos. Como resultado, o usuário mal-intencionado pode obter acesso irrestrito a credenciais, chaves de armazenamento, informações confidenciais e outros serviços.

Solução

Uma solução para esse problema é dissociar o código que implementa pontos de extremidade públicos do código que processa solicitações e acessa o armazenamento. Você pode fazer desacoplamento usando uma fachada ou uma tarefa dedicada que interage com os clientes e, em seguida, transmite a solicitação, talvez por meio de uma interface desacoplada, aos hosts ou às tarefas que manipularão a solicitação. A figura fornece uma visão geral de alto nível desse padrão.

Visão geral de alto nível desse padrão

O padrão de gatekeeper pode ser usado para proteger o armazenamento ou pode ser usado como fachada mais abrangente para proteger todas as funções do aplicativo. Os fatores importantes são:

  • Validação controlada. O gatekeeper valida todas as solicitações e rejeita as que não atendem aos requisitos de validação.
  • Risco e exposição limitados. O gatekeeper não tem acesso às credenciais ou às chaves usadas pelo host confiável para acessar o armazenamento e serviços. Se o gatekeeper estiver comprometido, o invasor não obterá acesso a essas credenciais ou chaves.
  • Segurança adequada. O gatekeeper é executado em modo de privilégio limitado, enquanto o restante do aplicativo é executado no modo de confiança total necessário para acessar o armazenamento e os serviços. Se o gatekeeper estiver comprometido, ele não poderá acessar diretamente os serviços ou dados do aplicativo.

Esse padrão funciona como firewall em uma topografia de rede típica. Ele permite que o gatekeeper examine as solicitações e tome uma decisão sobre se deve passar a solicitação para o host confiável que executa as tarefas necessárias. Essa decisão normalmente requer que gatekeeper valide e limpe o conteúdo da solicitação antes de passá-la para o host confiável.

Problemas e considerações

Considere os seguintes pontos ao decidir como implementar esse padrão:

  • Certifique-se de que os hosts confiáveis exponham apenas pontos de extremidade internos ou protegidos, usados somente pelo gatekeeper. Os hosts confiáveis não devem expor nenhum ponto de extremidade externo ou interface.
  • O gatekeeper deve ser executado em um modo de privilégio limitado, o que normalmente requer a execução do gatekeeper e do host confiável em serviços hospedados ou máquinas virtuais separadas.
  • O gatekeeper não deve executar nenhum processamento relacionado ao aplicativo ou a serviços nem acessar dados. Sua função é puramente validar e corrigir solicitações. Os hosts confiáveis talvez precisem executar uma validação de solicitação adicional, mas o gatekeeper deve realizar a validação principal.
  • Use um canal de comunicação seguro (HTTPS, SSL ou TLS) entre o gatekeeper e os hosts confiáveis ou tarefas quando for possível. No entanto, alguns ambientes de hospedagem não oferecem suporte a HTTPS em pontos de extremidade internos.
  • Adicionar a camada extra para implementar o padrão gatekeeper provavelmente afetará o desempenho devido ao processamento adicional e à comunicação de rede necessários.
  • A instância do gatekeeper pode ser um ponto único de falha. Para minimizar o impacto de uma falha, considere implantar instâncias redundantes e usar um mecanismo de dimensionamento automático para garantir a capacidade de manter a disponibilidade.

Quando usar esse padrão

Esse padrão é útil para aplicativos que:

  • gerenciar informações confidenciais
  • expor serviços que exigem um alto grau de proteção contra ataques maliciosos
  • realizar operações de missão crítica que não podem ser interrompidas.
  • exigir que a validação da solicitação seja realizada separadamente das tarefas principais ou centralizar essa validação para simplificar a manutenção e administração

Design de carga de trabalho

Um arquiteto deve avaliar como o padrão Gatekeeper pode ser usado no design de sua carga de trabalho para abordar as metas e os princípios abordados nos pilares do Azure Well-Architected Framework. Por exemplo:

Pilar Como esse padrão apoia os objetivos do pilar
As decisões de design de segurança ajudam a garantir a confidencialidade, integridade e disponibilidade dos dados e sistemas da sua carga de trabalho. Adicionar um gateway ao fluxo de solicitação permite centralizar funcionalidades de segurança, como firewalls de aplicativos web, proteção contra DDoS, detecção de bots, manipulação de solicitações, início de autenticação e verificações de autorização.

- SE:06 Controles de rede
- SE:10 Monitoramento e detecção de ameaças
A eficiência de desempenho ajuda sua carga de trabalho a atender com eficiência às demandas por meio de otimizações em dimensionamento, dados e código. Esse padrão é como você pode implementar a limitação no nível do gateway, em vez de implementar verificações de taxa no nível do nó. A coordenação do estado da taxa entre todos os nós não tem um desempenho inerente.

- PE:03 Seleção de serviços

Tal como acontece com qualquer decisão de design, considere quaisquer compensações em relação aos objetivos dos outros pilares que possam ser introduzidos com este padrão.

Exemplo

Quando hospedado em nuvem, esse padrão pode ser implementado ao desacoplar a função do gatekeeper ou da máquina virtual das funções confiáveis e serviços em um aplicativo. A implementação pode usar um ponto de extremidade, fila ou armazenamento interno como mecanismo de comunicação intermediário. A figura ilustra o uso de um ponto de extremidade interno.

Um exemplo do padrão usando as funções de trabalho e da web de Serviços de Nuvem

O padrão de chave de manobrista também pode ser relevante ao implementar o padrão do Gatekeeper. Na comunicação entre o Gatekeeper e as funções confiáveis, é recomendável aumentar a segurança usando chaves ou tokens que limitem as permissões de acesso aos recursos. O padrão descreve como usar um token ou chave que forneça aos clientes acesso direto e restrito a um determinado recurso ou serviço.