Padrão de gatekeeperGatekeeper pattern

Proteger aplicativos e serviços usando uma instância de host dedicado que atua como intermediário entre clientes e o aplicativo ou serviço, valida e corrige solicitações e passa solicitações e dados entre eles.Protect applications and services by using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them. Isso pode fornecer uma camada adicional de segurança e limitar a superfície de ataque do sistema.This can provide an additional layer of security, and limit the attack surface of the system.

Contexto e problemaContext and problem

Aplicativos expõem suas funcionalidades a clientes ao aceitar e processar solicitações.Applications expose their functionality to clients by accepting and processing requests. Em cenários hospedados na nuvem, aplicativos expõem pontos de extremidade aos quais os clientes se conectam e normalmente incluem o código para manipular as solicitações de clientes.In cloud-hosted scenarios, applications expose endpoints clients connect to, and typically include the code to handle the requests from clients. Esse código executa autenticação e validação, processamento de algumas ou todas as solicitações e provavelmente acessa o armazenamento e outros serviços em nome do cliente.This code performs authentication and validation, some or all request processing, and is likely to accesses storage and other services on behalf of the client.

Se um usuário mal-intencionado conseguir comprometer o sistema e obter acesso ao ambiente de hospedagem do aplicativo, os mecanismos de segurança usados por ele, como credenciais e chaves de armazenamento, e os serviços e os dados acessados por ele serão expostos.If a malicious user is able to compromise the system and gain access to the application’s hosting environment, the security mechanisms it uses such as credentials and storage keys, and the services and data it accesses, are exposed. Como resultado, o usuário mal-intencionado pode obter acesso irrestrito a informações e outros serviços confidenciais.As a result, the malicious user can gain unrestrained access to sensitive information and other services.

SoluçãoSolution

Para minimizar o risco de clientes obterem acesso a informações e serviços confidenciais, desacoplar hosts ou tarefas que exponham pontos de extremidade públicos do código que processa solicitações e acessa o armazenamento.To minimize the risk of clients gaining access to sensitive information and services, decouple hosts or tasks that expose public endpoints from the code that processes requests and accesses storage. Você pode fazer isso 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.You can achieve this by using a façade or a dedicated task that interacts with clients and then hands off the request—perhaps through a decoupled interface—to the hosts or tasks that'll handle the request. A figura fornece uma visão geral de alto nível desse padrão.The figure provides a high-level overview of this pattern.

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

O padrão de gatekeeper pode ser usado para simplesmente proteger o armazenamento ou pode ser usado como fachada mais abrangente para proteger todas as funções do aplicativo.The gatekeeper pattern can be used to simply protect storage, or it can be used as a more comprehensive façade to protect all of the functions of the application. Os fatores importantes são:The important factors are:

  • Validação controlada.Controlled validation. O gatekeeper valida todas as solicitações e rejeita as que não atendem aos requisitos de validação.The gatekeeper validates all requests, and rejects those that don't meet validation requirements.
  • Risco e exposição limitados.Limited risk and exposure. O gatekeeper não tem acesso às credenciais ou às chaves usadas pelo host confiável para acessar o armazenamento e serviços.The gatekeeper doesn't have access to the credentials or keys used by the trusted host to access storage and services. Se o gatekeeper estiver comprometido, o invasor não obterá acesso a essas credenciais ou chaves.If the gatekeeper is compromised, the attacker doesn't get access to these credentials or keys.
  • Segurança adequada.Appropriate security. 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.The gatekeeper runs in a limited privilege mode, while the rest of the application runs in the full trust mode required to access storage and services. Se o gatekeeper estiver comprometido, ele não poderá acessar diretamente os serviços ou dados do aplicativo.If the gatekeeper is compromised, it can't directly access the application services or data.

Esse padrão funciona como firewall em uma topografia de rede típica.This pattern acts like a firewall in a typical network topography. 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 (às vezes chamado de keymaster) que executa as tarefas necessárias.It allows the gatekeeper to examine requests and make a decision about whether to pass the request on to the trusted host (sometimes called the keymaster) that performs the required tasks. 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.This decision typically requires the gatekeeper to validate and sanitize the request content before passing it on to the trusted host.

Problemas e consideraçõesIssues and considerations

Considere os seguintes pontos ao decidir como implementar esse padrão:Consider the following points when deciding how to implement this pattern:

  • Certifique-se de que os hosts confiáveis aos quais o gatekeeper passa as solicitações exponham apenas pontos de extremidade internos ou protegidos e conectem-se somente ao gatekeeper.Ensure that the trusted hosts the gatekeeper passes requests to expose only internal or protected endpoints, and connect only to the gatekeeper. Os hosts confiáveis não devem expor nenhum ponto de extremidade externo ou interface.The trusted hosts shouldn't expose any external endpoints or interfaces.
  • O gatekeeper deve ser executado em modo de privilégio limitado.The gatekeeper must run in a limited privilege mode. Normalmente, isso significa executar o gatekeeper e o host confiável em serviços hospedados ou máquinas virtuais separadas.Typically this means running the gatekeeper and the trusted host in separate hosted services or virtual machines.
  • O gatekeeper não deve executar nenhum processamento relacionado ao aplicativo ou a serviços nem acessar dados.The gatekeeper shouldn't perform any processing related to the application or services, or access any data. Sua função é puramente validar e corrigir solicitações.Its function is purely to validate and sanitize requests. Os hosts confiáveis talvez precisem executar uma validação adicional das solicitações, mas a validação do núcleo deve ser executada pelo gatekeeper.The trusted hosts might need to perform additional validation of requests, but the core validation should be performed by the gatekeeper.
  • 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.Use a secure communication channel (HTTPS, SSL, or TLS) between the gatekeeper and the trusted hosts or tasks where this is possible. No entanto, alguns ambientes de hospedagem não oferecem suporte a HTTPS em pontos de extremidade internos.However, some hosting environments don't support HTTPS on internal endpoints.
  • Adicionar a camada extra ao aplicativo para implementar o padrão do gatekeeper provavelmente terá um impacto no desempenho devido ao processamento adicional e na comunicação de rede exigida por ele.Adding the extra layer to the application to implement the gatekeeper pattern is likely to have some impact on performance due to the additional processing and network communication it requires.
  • A instância do gatekeeper pode ser um ponto único de falha.The gatekeeper instance could be a single point of failure. Para minimizar o impacto de uma falha, considere implantar instâncias adicionais e usar um mecanismo de dimensionamento automático para garantir a capacidade de manter a disponibilidade.To minimize the impact of a failure, consider deploying additional instances and using an autoscaling mechanism to ensure capacity to maintain availability.

Quando usar esse padrãoWhen to use this pattern

Esse padrão é útil para:This pattern is useful for:

  • Aplicativos que lidem com informações confidenciais, exponham serviços que devem ter um alto grau de proteção contra ataques mal-intencionados ou executem operações essenciais que não devem ser interrompidas.Applications that handle sensitive information, expose services that must have a high degree of protection from malicious attacks, or perform mission-critical operations that shouldn't be disrupted.
  • Aplicativos distribuídos nos quais é necessário executar a validação de solicitação separadamente das principais tarefas ou centralizar essa validação para simplificar a manutenção e administração.Distributed applications where it's necessary to perform request validation separately from the main tasks, or to centralize this validation to simplify maintenance and administration.

ExemploExample

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.In a cloud-hosted scenario, this pattern can be implemented by decoupling the gatekeeper role or virtual machine from the trusted roles and services in an application. Faça isso usando um ponto de extremidade, fila ou armazenamento interno como mecanismo de comunicação intermediário.Do this by using an internal endpoint, a queue, or storage as an intermediate communication mechanism. A figura ilustra o uso de um ponto de extremidade interno.The figure illustrates using an internal endpoint.

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.The Valet Key pattern might also be relevant when implementing the Gatekeeper pattern. 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.When communicating between the Gatekeeper and trusted roles it's good practice to enhance security by using keys or tokens that limit permissions for accessing resources. Descreve como usar um token ou chave que forneça aos clientes acesso direto e restrito a um determinado recurso ou serviço.Describes how to use a token or key that provides clients with restricted direct access to a specific resource or service.