Usar o AWS WAF para proteger as APIs REST no API Gateway - Amazon API Gateway

Usar o AWS WAF para proteger as APIs REST no API Gateway

O AWS WAF é um firewall de aplicativo web que ajuda a proteger aplicativos web e APIs contra ataques. Isso permite configurar um conjunto de regras chamado de lista de controle de acesso à web (ACL da web) que permitem, bloqueiam ou contam solicitações da web com base em regras e condições de segurança da web personalizáveis que você define. Para obter mais informações, consulte Como o AWS WAF funciona.

É possível usar o AWS WAF para proteger a API REST do API Gateway contra explorações comuns da Web, como injeção de SQL e ataques de cross-site scripting (XSS). Isso pode afetar a disponibilidade e a performance da API, comprometer a segurança ou consumir recursos excessivos. Por exemplo, você pode criar regras para permitir ou bloquear solicitações de intervalos de endereços IP especificados, solicitações de blocos CIDR, solicitações originárias de um país ou região específico, solicitações que contenham código SQL mal-intencionado ou solicitações que contenham script mal-intencionado.

Você também pode criar regras que correspondam a uma string especificada ou um padrão de expressão regular em cabeçalhos HTTP, método, URI, string de consulta e o corpo da solicitação (limitados aos primeiros 64 KB). Além disso, você pode criar regras para bloquear ataques de agentes de usuário específicos, bad bots e descarte de conteúdo. Por exemplo, podem ser utilizadas regras baseadas em taxa para especificar o número de solicitações da web que são permitidas por cada IP do cliente no final de um período de cinco minutos em atualização contínua.

Importante

O AWS WAF é a primeira linha de defesa contra explorações da web. Quando o AWS WAF está habilitado em uma API, as regras do AWS WAF são avaliadas antes de outros recursos de controle de acesso, como políticas de recursos, políticas do IAM, autorizadores do Lambda e autorizadores do Amazon Cognito. Por exemplo, se o AWS WAF bloquear o acesso de um bloco CIDR que uma política de recurso permite, o AWS WAF terá precedência e a política de recurso não será avaliada.

Para habilitar o AWS WAF para sua API, você precisa fazer o seguinte:

  1. Use o console do AWS WAF, o AWS SDK ou a CLI para criar uma ACL da web que contenha a combinação desejada de regras gerenciadas do AWS WAF e suas próprias regras personalizadas. Para saber mais, consulte Getting Started with AWS WAF e Web access control lists (web ACLs).

    Importante

    O API Gateway exige uma ACL da web do AWS WAFV2 para uma aplicação regional ou uma ACL da web do AWS WAF Classic regional.

  2. Associar uma ACL da web do AWS WAF a um estágio de API. É possível fazer isso usando o console do AWS WAF, o AWS SDK ou a CLI ou usando o console do API Gateway.

Associar uma ACL da web do AWS WAF a um estágio da API do API Gateway usando o console do API Gateway

Para usar o console do API Gateway a fim de associar uma ACL da web do AWS WAF a um estágio da API do API Gateway existente, use as seguintes etapas:

  1. Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway.

  2. Escolha uma API existente ou crie uma nova.

  3. No painel de navegação principal, selecione Estágios e escolha um estágio.

  4. Na seção Detalhes do estágio, selecione Editar.

  5. Em Firewall de aplicativo Web (AWS WAF), selecione sua ACL da web.

    Se você estiver usando o AWS WAFV2, selecione uma ACL da web do AWS WAFV2 para uma aplicação regional. A ACL da web e quaisquer outros recursos do AWS WAFV2 que ela usa devem estar localizados na mesma região que sua API.

    Se você estiver usando o AWS WAF Classic regional, selecione a ACL da web regional.

  6. Escolha Salvar alterações.

Associar uma ACL da web do AWS WAF a um estágio da API do API Gateway usando a AWS CLI

Para usar a AWS CLI a fim de associar uma ACL da web do AWS WAFV2 de uma aplicação regional a um estágio da API do Gateway API existente, chame o comando associate-web-acl, como no seguinte exemplo:

aws wafv2 associate-web-acl \ --web-acl-arn arn:aws:wafv2:{region}:111122223333:regional/webacl/test-cli/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \ --resource-arn arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod

Para usar a AWS CLI a fim de associar uma ACL da web do AWS WAF Classic regional a um estágio da API do API Gateway existente, chame o comando associate-web-acl como no seguinte exemplo:

aws waf-regional associate-web-acl \ --web-acl-id 'aabc123a-fb4f-4fc6-becb-2b00831cadcf' \ --resource-arn 'arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod'

Associar uma ACL da web do AWS WAF a um estágio da API usando a API REST do AWS WAF

Para usar a API REST do AWS WAFV2 a fim de associar uma ACL da web do AWS WAFV2 de uma aplicação regional a um estágio da API do API Gateway, use o comando AssociateWebACL, como no seguinte exemplo:

import boto3 wafv2 = boto3.client('wafv2') wafv2.associate_web_acl( WebACLArn='arn:aws:wafv2:{region}:111122223333:regional/webacl/test/abc6aa3b-fc33-4841-b3db-0ef3d3825b25', ResourceArn='arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod' )

Para usar a API REST do AWS WAF a fim de associar uma ACL da web do AWS WAF Classic regional a um estágio da API do API Gateway, use o comando AssociateWebACL, como no seguinte exemplo:

import boto3 waf = boto3.client('waf-regional') waf.associate_web_acl( WebACLId='aabc123a-fb4f-4fc6-becb-2b00831cadcf', ResourceArn='arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod' )