Uso de AWS WAF para proteger sus API - Amazon API Gateway

Uso de AWS WAF para proteger sus API

AWS WAF es un firewall de aplicaciones web que ayuda a proteger las aplicaciones web y las API de ataques. Le permite configurar un conjunto de reglas denominadas lista de control de acceso web (Web ACL) que permiten, bloquean o cuentan solicitudes web en función de las reglas y condiciones de seguridad web personalizables que defina. Para obtener más información, consulte Funcionamiento de AWS WAF.

Puede utilizar AWS WAF para proteger a la API de REST de API Gateway de vulnerabilidades web comunes, como ataques de inyección de código SQL y scripting entre sitios (XSS). Esto podría afectar a la disponibilidad y el rendimiento de la API, comprometer la seguridad o consumir recursos excesivos. Por ejemplo, puede crear reglas para permitir o bloquear solicitudes de rangos de direcciones IP especificados, solicitudes de bloques CIDR, solicitudes que se originan en un país o región específico, solicitudes que contengan código SQL malintencionado o solicitudes que contengan secuencias de comandos malintencionadas.

También puede crear reglas que busquen una cadena o un patrón de expresión regular en encabezados HTTP, métodos, cadenas de consulta, URI y el cuerpo de la solicitud (limitado a los primeros 64 KB). Además, puede crear reglas para bloquear ataques de agentes de usuario específicos, bots malintencionados y scrapers de contenido. Por ejemplo, puede utilizar reglas basadas en la frecuencia para especificar el número de solicitudes web permitidas por IP de cliente en un periodo de 5 minutos actualizado constantemente.

importante

AWS WAF es su primera línea de defensa contra vulnerabilidades de la web. Cuando AWS WAF está habilitado en una API, se evalúan las reglas de AWS WAF antes que otras características del control de acceso, como, por ejemplo, las políticas de recursos, las políticas de IAM, los autorizadores de Lambda y los autorizadores de Amazon Cognito. Por ejemplo, si AWS WAF bloquea el acceso de un bloque de CIDR permitido por una política de recursos, AWS WAF tiene prioridad y no se evalúa la política de recursos.

Para habilitar AWS WAF para su API, debe hacer lo siguiente:

  1. Utilice la consola de AWS WAF, el AWS SDK o la CLI para crear una ACL web que contenga la combinación deseada de reglas administradas de AWS WAF y sus propias reglas personalizadas. Para obtener más información, consulte Getting Started with AWS WAF y Web access control lists (web ACLs).

    importante

    API Gateway requiere una ACL web de AWS WAFV2 para una aplicación regional o una ACL web de AWS WAF Classic Regional.

  2. Asociar la ACL web de AWS WAF a una etapa de API. Puede hacerlo utilizando la consola de AWS WAF, el SDK de AWS, la CLI o la consola de API Gateway.

Asociación de una ACL web de AWS WAF a una etapa de la API de API Gateway mediante la consola de API Gateway

Si desea utilizar la consola de API Gateway para asociar una ACL web de AWS WAF a una etapa de la API de API Gateway existente, siga estos pasos:

  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Seleccione una API existente o cree una nueva.

  3. En el panel de navegación principal, elija Etapas y, a continuación, elija una etapa.

  4. En la sección Detalles de la etapa, elija Editar.

  5. En Web Application Firewall (AWS WAF), seleccione la ACL web.

    Si utiliza AWS WAFV2, seleccione una ACL web de AWS WAFV2 para una aplicación regional. La ACL web y todos los recursos de AWS WAFV2 que utilice deben estar ubicados en la misma región que la API.

    Si utiliza AWS WAF Classic Regional, seleccione una ACL web regional.

  6. Elija Guardar cambios.

Asociación de una ACL web de AWS WAF a una etapa de la API de API Gateway mediante la AWS CLI

Si desea utilizar la AWS CLI para asociar una ACL web de AWS WAFV2 para una aplicación regional a una etapa de la API de API Gateway existente, llame al comando associate-web-acl, como se muestra en el siguiente ejemplo:

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

Si desea utilizar la AWS CLI para asociar una ACL web de AWS WAF Classic Regional a una etapa de la API de API Gateway existente, llame al comando associate-web-acl, como se muestra en el siguiente ejemplo:

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

Asociación de una ACL web de AWS WAF a una etapa de API mediante la API de REST de AWS WAF

Si desea utilizar la API de REST de AWS WAFV2 para asociar una ACL web de AWS WAFV2 para una aplicación regional a una etapa de la API de API Gateway existente, use el comando AssociateWebACL, como se muestra en el siguiente ejemplo:

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' )

Si desea utilizar la API de REST de AWS WAF para asociar una ACL web de AWS WAF Classic Regional a una etapa de la API de API Gateway existente, use el comando AssociateWebACL, como se muestra en el siguiente ejemplo:

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' )