Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Restrinja o acesso direto ao AWS Application Load Balancer via API Gateway

By Devanshu KhannaJan 27, 20254 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

Microsserviços costumam ser implantados em sub-redes privadas dentro de uma Amazon Virtual Private Cloud (VPC) para garantir isolamento e proteção contra acesso direto pela internet. Há duas abordagens comuns para configurar o acesso externo a microsserviços:

  • Private Link: recurso de rede que usa interface endpoints para expor com segurança recursos privados da VPC ao API Gateway, sem expô-los à internet pública. Assim, o tráfego permanece dentro da rede da AWS.
  • HTTP Integration (voltada à internet): permite que o API Gateway encaminhe requisições para endpoints HTTP de acesso público, como um Application Load Balancer (ALB) voltado à internet, deixando os serviços acessíveis por um endpoint público.

Vamos focar em proteger a segunda abordagem — um ALB voltado à internet por trás de um API Gateway. Mais especificamente, vamos tratar do desafio de restringir o acesso direto ao ALB público, permitindo que apenas clientes confiáveis interajam com a aplicação pelo API Gateway.

Definição do problema

Quando um ALB voltado à internet é configurado por trás de um API Gateway com uma HTTP integration, o ALB fica acessível publicamente. Mesmo que os clientes confiáveis se conectem à aplicação pelo API Gateway, essa configuração traz um risco de segurança importante: o endpoint público do ALB pode ser acessado diretamente, contornando os recursos de segurança do API Gateway.

Essa falta de restrição abre espaço para várias vulnerabilidades. Para preservar a segurança e a integridade da sua aplicação, é fundamental impedir o acesso direto ao ALB. Ao garantir que todo o tráfego passe pelo API Gateway, você consegue aplicar recursos de segurança essenciais, como validação de requisições, throttling, autenticação e autorização. Sem essas proteções, invasores podem explorar vulnerabilidades, burlar mecanismos de autenticação e sobrecarregar os serviços de backend, abrindo caminho para ataques de negação de serviço (DoS).

A AWS oferece uma solução com REST API Gateway e AWS Web Application Firewall (WAF) para bloquear requisições que não tragam um header exclusivo, mas essa abordagem adiciona complexidade e custo. Vale lembrar que, em casos de uso que exigem medidas avançadas de segurança, como proteção contra SQL injection, cross-site scripting (XSS) ou mitigação de bots, o AWS WAF continua sendo uma ferramenta poderosa.

Neste post, apresentamos uma alternativa mais simples e econômica. Com headers customizados e condições de regra do ALB, chegamos ao mesmo nível de segurança sem depender do AWS WAF. O método funciona perfeitamente tanto com REST quanto com HTTP API Gateways e reduz bastante o esforço operacional.

**Solução proposta**

Essa abordagem elimina a necessidade do AWS WAF ao aproveitar o roteamento baseado em conteúdo do ALB. A solução envolve:

  1. Adicionar um header customizado e seu valor às requisições HTTP no API Gateway.
  2. Configurar regras do ALB para validar o header. Apenas as requisições com o header e o valor corretos vão corresponder às regras desejadas do ALB; as demais cairão na regra padrão.
  3. Definir a regra padrão do ALB para retornar um código de erro HTTP, como 403 Forbidden.

Veja uma visão geral da arquitetura:

Fluxo da requisição HTTP.

**Passos detalhados de implementação**

Passo 1: definir um header customizado no API Gateway

No HTTP API Gateway, use parameter mappings para modificar as requisições enviadas à integração com o ALB.

  1. Acesse o console do API Gateway.
  2. Vá até sua HTTP API.
  3. Na seção "Integrations", abra "Manage Integrations".
  4. Crie um parameter mapping para incluir o header customizado e seu valor.

Configuração do parameter mapping.

Se o seu API Gateway for baseado em REST, siga este link para adicionar um header HTTP customizado.

Passo 2: configurar as regras do ALB

  1. Abra a configuração do ALB no console do EC2.
  2. Para cada regra do listener (exceto a regra padrão):
  • Adicione uma condição AND.
  • Defina "HTTP header" como o tipo de condição.
  • Informe o nome do header e o valor esperado.

3. Configure a regra padrão para retornar uma resposta de erro HTTP (por exemplo, 403 Forbidden).

Condições e ações das regras do ALB.

Para saber mais sobre roteamento baseado em conteúdo no ALB, confira este artigo do blog da AWS.

Passo 3: testar a configuração

  1. Envie uma requisição pelo ALB sem o header customizado. Confira se ela aciona a regra padrão do ALB e retorna a resposta de erro.
  2. Envie uma requisição pelo API Gateway. Confira se ela é encaminhada para a aplicação.

**Conclusão**

Esta solução simplifica a arquitetura ao eliminar a dependência do AWS WAF. Ao aproveitar o roteamento baseado em conteúdo nativo do ALB, essa abordagem oferece uma forma segura e eficiente de restringir o acesso direto ao seu Application Load Balancer.

Se quiser saber mais ou tem interesse em nossos serviços, fale com a gente. É só entrar em contato aqui.