Como proteger o Amazon API Gateway por meio do AWS WAF?
Introdução
O Amazon API Gateway é um serviço gerenciado que permite que os desenvolvedores criem, publiquem, mantenham, monitorem e protejam APIs em qualquer escala com facilidade. As APIs agem como a “porta de entrada” para aplicativos acessarem dados, lógica de negócios ou funcionalidade de seus serviços de back-end. Usando o API Gateway, você pode criar APIs do RESTful e APIs do WebSocket que habilitam aplicativos de comunicação bidirecionais em tempo real. O API Gateway dá suporte às cargas de trabalho conteinerizadas e sem servidor, além de aplicativos da web.
Com isso dito, é fácil imaginar mil utilidades e funcionalidades para se criar uma API no ambiente da Amazon Web Services, principalmente hoje em dia onde se fala muito sobre tecnologia Open Banking e aplicações em micro serviços. Porém, ao mesmo tempo em que se vê benefícios, também deve crescer a preocupação com possíveis ataques (e eles realmente acontecem) a essas “portas de entrada”.
A resposta para esse inconveniente é a funcionalidade chamada Web Application Firewall, a WAF. No mercado, existem várias soluções de terceiros e de altíssima qualidade, porém para fins de documentação, irei me deter somente ao serviço próprio da AWS, chamado AWS WAF.
Dentre as variadas formas de proteção, se encontra o SQL injection, onde os invasores inserem o código SQL malicioso em solicitações Web, em um esforço para extrair dados de seu banco de dados. Esta solução foi projetada para bloquear solicitações da web que contenham código SQL potencialmente malicioso.
Tem o Cross-site scripting, também conhecido como XSS, onde os invasores usam vulnerabilidades em um site benigno, como um veículo para injetar scripts de sites de clientes maliciosos no navegador de um usuário legítimo. Esta solução foi projetada para inspecionar elementos comumente explorados de solicitações de entrada para identificar e bloquear ataques XSS.
E outras formas de proteção, tais como HTTP floods, Scanners and probes, Known attacker origins (IP reputation lists), etc., também se encontram na lista de ataques comuns à aplicações Web.
Veja mais em: https://aws.amazon.com/pt/waf
O propósito desse artigo é mostrar como fazer a integração entre os dois serviços e, assim, proteger suas APIs contra os mais comuns ataques vindos da Internet.
Pré-requisitos:
Para esse pequeno laboratório, temos como pré-requisitos os seguintes itens:
- Uma conta AWS criada;
- Acesso à Internet.
Passos:
- Acesse o serviço WAF & Shield pelo console da AWS. Logo na página principal, procure a caixa REST API e clique em Create web ACL:
![]() Figura 01
|
- Dê um nome para a regra a ser criada. Em nosso teste, nomearemos como WAF_Lab, conforme Deixe as outras opções como estão (padrão):
![]() Figura 02
|
- E na última sessão desta página, a Associated AWS resources – optional, você vai associar a regra WAF, que está prestes a criar, com o recurso AWS (nesse caso, uma API Gateway que você já tenha criado anteriormente). Clique no botão Add AWS resources:
![]() Figura 03
|
- Selecione uma das APIs que já esteja criada dentro do AWS API Gateway. Em nosso exemplo, temos uma com o nome de Compra – prod. A selecione e clique no botão Add:
![]() Figura 04
|
- Na próxima tela, terá um resumo da primeira fase, então é só clicar no botão Next:
![]() Figura 05
|
- Nesse passo, é onde se escolhe quais são as regras, ou grupo delas, que se aplicarão ao seu Web ACL. Clique no botão Add rules e depois escolha a opção Add managed rule groups (para o propósito dessa demonstração, utilizaremos regras já criadas pela AWS):
![]() Figura 06
|
- Ao abrir a próxima tela, teremos uma lista de grupos de regras pré-definidas pela a AWS. Uma lista é paga e a outra é gratuita. Vamos elencar dois grupos da lista gratuita, conforme a figura abaixo.Ao final da página, clique no botão Add Rules. Na próxima tela, clique em Next e na outra em Next
![]() Figura 07
|
- Na tela de configuração de métricas, existe a opção Request sampling. Isso vai gerar algumas requisições de exemplo, para se ter noção de como essa funcionalidade se comporta e ainda poder acompanhar um gráfico de requisição via o CloudWatch. Porém, em ambiente de produção recomendamos que deixe essa opção desabilitada. Em seguida clique no botão Next.
![]() Figura 08
|
- No último passo é onde se tem a opção de revisar todas as configurações feitas anteriormente, e ainda se tem chances de voltar e modificar algo, caso tenha cometido algum erro.
Se tudo estiver de acordo, clique em Create web ACL e aguarde o final do procedimento.
![]() Figura 09
|
Com todos esses procedimentos seguidos com sucesso, a essa altura você terá uma nova ACL criada e funcionando perfeitamente. Lembre-se, a AWS sempre está mudando o formato do console, evoluindo e adicionando novos recursos aos serviços oferecidos. Sendo assim, pode ser que algumas telas não correspondam ao desenho atual.
Em um ambiente de nuvem, seja na AWS ou em outro provedor, lembre-se de desfazer todos os recursos criados para fins de teste e/ou laboratório. Criar e esquecê-los pode após algum tempo acarretar em custos altos, e surpresas desagradáveis ao final do mês.