Padrão Gatekeeper

Azure Dedicated Host

Proteja aplicativos e serviços usando uma instância de host dedicada para intermediar solicitações entre clientes e o aplicativo ou serviço. O corretor valida e limpa 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 na nuvem expõem pontos de acesso que permitem às aplicações cliente invocar as suas APIs. O código usado para implementar as APIs aciona ou executa várias 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 da API acesse o armazenamento e outros serviços em nome do cliente.

Se um usuário mal-intencionado comprometer o sistema e obter acesso ao ambiente de hospedagem do aplicativo, seus mecanismos de segurança e acesso a dados e outros serviços são 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. Pode conseguir o desacoplamento utilizando uma fachada ou uma tarefa dedicada que interage com os clientes e, em seguida, encaminha o pedido — talvez através de uma interface desacoplada — para os servidores ou tarefas que tratam desse pedido. A figura fornece uma descrição geral de alto nível deste padrão.

Descrição geral de alto nível deste padrão

O padrão gatekeeper pode ser usado para proteger o armazenamento, ou pode ser usado como uma fachada mais abrangente para proteger todas as funções da aplicação. Fatores importantes:

  • Validação controlada. O gatekeeper valida todas as solicitações e rejeita as solicitações 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 utilizadas pelo host fidedigno para aceder ao armazenamento e aos serviços. Se o gatekeeper for comprometido, o atacante não terá acesso a estas credenciais ou chaves.
  • Segurança adequada. O gatekeeper é executado num modo de privilégios limitados, enquanto o resto da aplicação é executado no modo de confiança total necessário para aceder ao armazenamento e aos serviços. Se o gatekeeper for comprometido, não pode aceder diretamente aos serviços da aplicação ou aos dados.

Este padrão funciona como uma firewall numa 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. Normalmente, esta decisão exige que o gatekeeper valide e sanitize o conteúdo do pedido antes de o encaminhar para o host fidedigno.

Problemas e considerações

Na altura de decidir como implementar este padrão, considere os seguintes pontos:

  • Certifique-se de que os hosts confiáveis exponham apenas pontos de extremidade internos ou protegidos, usados apenas pelo gatekeeper. Os anfitriões fidedignos não devem expor interfaces nem pontos finais externos.
  • O gatekeeper deve ser executado num modo de privilégios limitados, o que normalmente exige a execução do gatekeeper e do host fidedigno em serviços alojados separados ou em máquinas virtuais distintas.
  • O gatekeeper não deve realizar qualquer processamento relacionado com a aplicação ou serviços ou aceder a quaisquer dados. A sua função é basicamente validar e limpar os pedidos. Os hosts confiáveis podem precisar executar a validação de solicitação adicional, mas o gatekeeper deve executar a validação principal.
  • Use um canal de comunicação seguro (HTTPS, SSL ou TLS) entre o gatekeeper e os hosts ou tarefas confiáveis sempre que possível. No entanto, alguns ambientes de alojamento não suportam HTTPS em pontos finais 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 de 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 utilizar este padrão

Esse padrão é útil para aplicativos que:

  • lidar com informações confidenciais
  • Expor serviços que exigem um alto grau de proteção contra ataques mal-intencionados
  • Execute 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 a administração

Design da 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 suporta 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ções permite centralizar a funcionalidade de segurança, como firewalls de aplicativos da Web, proteção contra DDoS, deteçã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 Monitorização e deteção de ameaças
A Eficiência de Desempenho ajuda sua carga de trabalho a atender às demandas de forma eficiente por meio de otimizações em escala, dados e código. Este padrão permite implementar a limitação de taxa ao nível do gateway, em vez de implementar o controlo da taxa ao nível do nó. A coordenação do estado da taxa entre todos os nós não é inerentemente eficiente.

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

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

Exemplo

Em um cenário hospedado na nuvem, esse padrão pode ser implementado desacoplando a função gatekeeper ou a máquina virtual das funções e serviços confiáveis em um aplicativo. A implementação pode usar um ponto de extremidade interno, uma fila ou armazenamento como um mecanismo de comunicação intermediário. A figura ilustra a utilização de um ponto final interno.

Um exemplo do padrão que utiliza as funções Web e de trabalho do Cloud Services

O padrão Valet Key também pode ser relevante ao implementar o padrão Gatekeeper. Ao se comunicar entre o Gatekeeper e funções confiáveis, é uma boa prática aprimorar a segurança usando chaves ou tokens que limitam as permissões de acesso a recursos. O padrão descreve o uso de um token ou chave que fornece aos clientes acesso restrito e direto a um recurso ou serviço específico.

O padrão de limitação de taxa é frequentemente implementado ao nível do perímetro do gatekeeper ou gateway, onde a centralização do estado da limitação de taxa evita o custo de coordenação de efetuar verificações da limitação de taxa em todos os nós de backend.