Padrão do controlador de chamadasGatekeeper pattern

Proteja aplicações e serviços com uma instância de anfitrião dedicada que age como um mediador entre clientes e a aplicação ou serviço, valida e limpa pedidos, e transmite dados e pedidos 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. Este 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

As aplicações expõem as funcionalidades aos clientes ao aceitar e processar pedidos.Applications expose their functionality to clients by accepting and processing requests. Nos cenários de alojamento na cloud, as aplicações expõem os clientes de pontos finais ligados a estas e, geralmente, incluem o código para processar os pedidos dos clientes.In cloud-hosted scenarios, applications expose endpoints clients connect to, and typically include the code to handle the requests from clients. Este código realiza a autenticação e a validação de alguns ou de todos os pedidos de processamento e, muito provavelmente, acede ao armazenamento e a 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 utilizador mal-intencionado for capaz de comprometer o sistema e obter acesso ao ambiente de alojamento da aplicação, os mecanismos de segurança que este utiliza, tal como credenciais e chaves de armazenamento, assim como os serviços e os dados acedidos, 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. Desta forma, o utilizador mal-intencionado pode obter acesso irrestrito a informações confidenciais e a outros serviços.As a result, the malicious user can gain unrestrained access to sensitive information and other services.

SoluçãoSolution

Para minimizar o risco de os clientes obterem acesso a serviços e informações confidenciais, deve desacoplar os anfitriões ou as tarefas que expõe os pontos finais públicos do código que processa os pedidos e que acede ao 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. Pode fazê-lo com uma fachada ou uma tarefa dedicada que interage com os clientes e, em seguida, entrega o pedido (possivelmente através de uma interface desacoplada) aos anfitriões ou às tarefas que processarão o pedido.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 descrição geral de alto nível deste padrão.The figure provides a high-level overview of this pattern.

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

O padrão do controlador de chamadas serve simplesmente para proteger o armazenamento ou pode ser utilizado como uma fachada mais abrangente para proteger todas as funções da aplicação.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. Fatores importantes:The important factors are:

  • Controlado validação.Controlled validation. O controlador de chamadas valida todos os pedidos e rejeita os que não satisfazem os 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 controlador de chamadas não tem acesso às credenciais ou às chaves utilizadas pelo anfitrião fidedigno para aceder ao armazenamento e aos 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 controlador de chamadas for comprometido, o atacante não obterá acesso a estas credenciais ou chaves.If the gatekeeper is compromised, the attacker doesn't get access to these credentials or keys.
  • Apropriado de segurança.Appropriate security. O controlador de chamadas é executado num modo de privilégios limitados, enquanto o resto da aplicação é executada no modo de fidedignidade total necessário para aceder ao armazenamento e aos 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 controlador de chamadas for comprometido, não poderá aceder diretamente aos serviços da aplicação ou aos dados.If the gatekeeper is compromised, it can't directly access the application services or data.

Este padrão funciona como uma firewall numa topografia de rede típica.This pattern acts like a firewall in a typical network topography. Assim, permite que o controlador de chamadas examine os pedidos e decida se são encaminhados para o anfitrião fidedigno (por vezes, denominado 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. Por norma, esta decisão precisa que o controlador de chamadas valide e limpe o conteúdo do pedido antes de o transmitir para o anfitrião fidedigno.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

Na altura de decidir como implementar este padrão, considere os seguintes pontos:Consider the following points when deciding how to implement this pattern:

  • Verifique se os anfitriões fidedignos para os quais o controlador de chamadas transmite os pedidos expõem apenas pontos finais internos ou protegidos e estabelecem ligação apenas com o controlador de chamadas.Ensure that the trusted hosts the gatekeeper passes requests to expose only internal or protected endpoints, and connect only to the gatekeeper. Os anfitriões fidedignos não devem expor interfaces nem pontos finais externos.The trusted hosts shouldn't expose any external endpoints or interfaces.
  • O controlador de chamadas tem de ser executado num modo de privilégios limitados.The gatekeeper must run in a limited privilege mode. Normalmente, significa executar o controlador de chamadas e o anfitrião fidedigno em serviços alojados ou máquinas virtuais separados.Typically this means running the gatekeeper and the trusted host in separate hosted services or virtual machines.
  • O controlador de chamadas não deve realizar qualquer processamento relacionado com a aplicação ou os serviços, ou aceder aos dados.The gatekeeper shouldn't perform any processing related to the application or services, or access any data. A sua função é basicamente validar e limpar os pedidos.Its function is purely to validate and sanitize requests. Os anfitriões fidedignos podem ter de realizar uma validação adicional dos pedidos, mas a validação central deve ser realizada pelo controlador de chamadas.The trusted hosts might need to perform additional validation of requests, but the core validation should be performed by the gatekeeper.
  • Utilize um canal de comunicação seguro (HTTPS, SSL ou TLS) entre o controlador de chamadas e os anfitriões fidedignos ou as tarefas em que tal seja 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 alojamento não suportam HTTPS em pontos finais internos.However, some hosting environments don't support HTTPS on internal endpoints.
  • A adição da camada adicional à aplicação para implementar o padrão do controlador de chamadas terá provavelmente algum impacto no desempenho devido ao processamento e à comunicação de rede adicionais necessários.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 controlador de chamadas 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 implementar instâncias adicionais e utilizar um mecanismo de dimensionamento automático para assegurar a capacidade para 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 utilizar este padrãoWhen to use this pattern

Este padrão é útil nas seguintes situações:This pattern is useful for:

  • As aplicações que processam informações confidenciais, expõem serviços que têm de ter um nível elevado de proteção contra ataques maliciosos ou realizam operações fundamentais 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.
  • Aplicações distribuídas nas quais é necessário realizar a validação de pedidos separadamente das tarefas principais ou centralizar esta validação para simplificar a manutenção e a 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

Num cenário de alojamento na cloud, este padrão pode ser implementado ao desacoplar a função do controlador de chamadas ou da máquina virtual das funções e dos serviços fidedignos numa aplicação.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 com um ponto final interno, uma fila ou um armazenamento como mecanismo de comunicação intermédio.Do this by using an internal endpoint, a queue, or storage as an intermediate communication mechanism. A figura ilustra a utilização de um ponto final interno.The figure illustrates using an internal endpoint.

Um exemplo do padrão com as funções de trabalho e Web dos Serviços Cloud

O padrão da Chave Valet também pode ser relevante aquando da implementação do padrão do controlador de chamadas.The Valet Key pattern might also be relevant when implementing the Gatekeeper pattern. Durante a comunicação entre o controlador de chamadas e as funções fidedignas, para melhorar a segurança, é boa prática utilizar chaves ou tokens que limitam 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 utilizar um token ou uma chave que oferece aos clientes um acesso direto restrito a um recurso ou serviço específico.Describes how to use a token or key that provides clients with restricted direct access to a specific resource or service.