Como enviar respostas personalizadas para ações Block - Administrador de segurança da rede do AWS WAF, AWS Firewall Manager, AWS Shield Advanced e AWS Shield

Apresentação de uma nova experiência de console para o AWS WAF

Agora você pode usar a experiência atualizada para acessar a funcionalidade do AWS WAF em qualquer lugar no console. Consulte mais detalhes em Trabalhar com a experiência atualizada do console.

Como enviar respostas personalizadas para ações Block

Essa seção explica como instruir o AWS WAF a enviar uma resposta HTTP personalizada ao cliente para as ações das regras ou para as ações padrão do pacote de proteção (ACL da Web) definidas como Block. Para obter mais informações sobre as ações de regra, consulte Como usar ações de regras no AWS WAF. Para obter mais informações sobre as ações padrão dos pacotes de proteção (ACL da Web), consulte Definir a ação padrão do pacote de proteção (ACL da Web) no AWS WAF.

Ao definir o tratamento personalizado de resposta para uma ação Block, você define o código de status, os cabeçalhos e o corpo da resposta. Para obter uma lista de códigos de status que você pode usar com o AWS WAF, consulte a seção a seguir, Códigos de status compatíveis para respostas personalizadas.

Casos de uso

Os casos de uso de respostas personalizadas incluem o seguinte:

  • Enviar um código de status não padrão de volta ao cliente.

  • Enviar cabeçalhos de resposta personalizada de volta ao cliente. É possível especificar qualquer nome de cabeçalho, exceto content-type.

  • Enviar uma página de erro estática de volta ao cliente.

  • Redirecionar o cliente para um URL diferente. Para fazer isso, você especifica um dos códigos de status de redirecionamento 3xx, como 301 (Moved Permanently) ou 302 (Found), e depois especifica um novo cabeçalho Location com o novo URL.

Interação com respostas que você define em seu recurso protegido

As respostas personalizadas que você especifica para a ação Block do AWS WAF têm precedência sobre qualquer especificação de resposta definida no seu recurso protegido.

O serviço de host para o recurso da AWS que você protege com o AWS WAF pode permitir o tratamento personalizado de respostas para solicitações da web. Os exemplos incluem:

  • Com o Amazon CloudFront, você pode personalizar a página de erro com base no código de status. Para obter mais informações, consulte Gerar respostas personalizadas a erros no Guia do desenvolvedor do Amazon CloudFront.

  • Com o Amazon API Gateway, você pode definir a resposta e o código de status do seu gateway. Para obter mais informações, consulte Respostas do API Gateway no Guia do desenvolvedor do Amazon API Gateway.

Você não pode combinar configurações de resposta personalizada do AWS WAF com configurações de resposta personalizada no recurso protegido da AWS. A especificação de resposta para qualquer solicitação individual da web vem totalmente do AWS WAF ou totalmente do recurso protegido.

Para solicitações da web bloqueadas pelo AWS WAF, veja a seguir a ordem de precedência.

  1. Resposta personalizada do AWS WAF: se a ação Block do AWS WAF tiver uma resposta personalizada ativada, o recurso protegido enviará a resposta personalizada configurada de volta ao cliente. Qualquer configuração de resposta que você possa ter definido no próprio recurso protegido não tem efeito.

  2. Resposta personalizada definida no recurso protegido: caso contrário, se o recurso protegido tiver configurações de resposta personalizada especificadas, o recurso protegido usará essas configurações para responder ao cliente.

  3. Resposta Block padrão do AWS WAF: caso contrário, o recurso protegido responderá ao cliente com a resposta Block padrão do AWS WAF 403 (Forbidden).

Para solicitações da web que o AWS WAF permite, sua configuração do recurso protegido determina a resposta que ele envia de volta ao cliente. Você não pode definir as configurações de resposta no AWS WAF para solicitações permitidas. A única personalização que você pode configurar no AWS WAF para solicitações permitidas é a inserção de cabeçalhos personalizados na solicitação original, antes de encaminhar a solicitação para o recurso protegido. Isso é descrito na seção anterior, Como inserir cabeçalhos de solicitação personalizados para ações sem bloqueio.

Cabeçalhos de resposta personalizada

É possível especificar qualquer nome de cabeçalho, exceto content-type.

Corpos de resposta personalizada

Você define o corpo de uma resposta personalizada dentro do contexto do pacote de proteção (ACL da Web) ou do grupo de regras no qual deseja usá-la. Depois de definir o corpo de uma resposta personalizada, você pode usá-lo como referência em qualquer outro item do pacote de proteção (ACL da Web) ou no grupo de regras no qual ele foi criado. Nas configurações de ação individual Block, você faz referência ao corpo personalizado que deseja usar e define o código de status e o cabeçalho da resposta personalizada.

Ao criar uma resposta personalizada no console, você pode escolher entre os corpos de resposta que já foram definidos ou criar um novo corpo. Fora do console, você define os corpos das respostas personalizadas no nível do pacote de proteção (ACL da Web) ou do grupo de regras e os referencia nas configurações de ação no escopo do pacote de proteção (ACL da Web) ou do grupo de regras. Isso é mostrado no exemplo JSON na seção a seguir.

Exemplo de resposta personalizada

O exemplo a seguir lista o JSON de um grupo de regras com configurações de resposta personalizada. O corpo da resposta personalizada é definido para todo o grupo de regras e, em seguida, referenciado por chave na ação da regra.

{ "ARN": "test_rulegroup_arn", "Capacity": 1, "CustomResponseBodies": { "CustomResponseBodyKey1": { "Content": "This is a plain text response body.", "ContentType": "TEXT_PLAIN" } }, "Description": "This is a test rule group.", "Id": "test_rulegroup_id", "Name": "TestRuleGroup", "Rules": [ { "Action": { "Block": { "CustomResponse": { "CustomResponseBodyKey": "CustomResponseBodyKey1", "ResponseCode": 404, "ResponseHeaders": [ { "Name": "BlockActionHeader1Name", "Value": "BlockActionHeader1Value" } ] } } }, "Name": "GeoMatchRule", "Priority": 1, "Statement": { "GeoMatchStatement": { "CountryCodes": [ "US" ] } }, "VisibilityConfig": { "CloudWatchMetricsEnabled": true, "MetricName": "TestRuleGroupReferenceMetric", "SampledRequestsEnabled": true } } ], "VisibilityConfig": { "CloudWatchMetricsEnabled": true, "MetricName": "TestRuleGroupMetric", "SampledRequestsEnabled": true } }