Uso de AWS WAF para proteger sus API de AWS AppSync - AWS AppSync GraphQL

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de AWS WAF para proteger sus API de AWS AppSync

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 (ACL web) que permiten, bloquean o monitorizan (cuentan) solicitudes web en función de las reglas y condiciones de seguridad web personalizables que defina. Al integrar la API de AWS AppSync con AWS WAF, se obtiene más control y visibilidad del tráfico HTTP aceptado por la API. Para obtener más información acerca de AWS WAF, consulte How AWS WAF Works en la Guía para desarrolladores de AWS WAF.

Puede utilizar AWS WAF para proteger su API de AppSync 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 8 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.

Para obtener más información sobre los tipos de reglas compatibles y las características de AWS WAFadicionales, consulte la Guía para desarrolladores de AWS WAF y la Referencia de la API de AWS WAF.

importante

AWS WAF es su primera línea de defensa contra vulnerabilidades de la web. Cuando AWS WAF se habilita en una API, las reglas de AWS WAF se evalúan antes que otras características de control de acceso, como la autorización de claves API, las políticas de IAM, los tokens de OIDC y los grupos de usuarios de Amazon Cognito.

Integre una API de AppSync con AWS WAF

Puede integrar una API de Appsync con AWS WAF utilizando la AWS Management Console, la AWS CLI, AWS CloudFormation o cualquier otro cliente compatible.

Para integrar una API de AWS AppSync con AWS WAF
  1. Cree una ACL web de AWS WAF. Para ver los pasos detallados para utilizar la consola de AWS WAF, consulte Crear una ACL web.

  2. Defina las reglas de la ACL web. Se definen una o varias reglas en el proceso de creación de la ACL web. Para obtener información sobre cómo estructurar las reglas, consulte Reglas de AWS WAF. Para ver ejemplos de reglas útiles que puede definir para su API de AWS AppSync, consulte Creación de reglas para una ACL web.

  3. Asocie la ACL web con una API de AWS AppSync. Puede realizar este paso en la consola de AWS WAF o en la consola de AppSync.

    • Para asociar la ACL web a una API de AWS AppSync en la consola de AWS WAF, siga las instrucciones para asociar o desasociar una ACL web con un recurso de AWS en la Guía para desarrolladores de AWS WAF.

    • Para asociar la ACL web con una API de AWS AppSync en la consola de AWS AppSync

      1. Inicie sesión en la AWS Management Console y abra la consola de AppSync.

      2. Elija la API que desee asociar a una ACL web.

      3. En el panel de navegación, seleccione Configuración.

      4. En la sección Firewall de aplicaciones web, active Habilitar AWS WAF.

      5. En la lista desplegable ACL web, elija el nombre de la ACL web que desee asociar a su API.

      6. Seleccione Guardar para asociar la ACL web con la API.

nota

Después de la creación de una ACL web en la consola de AWS WAF, la nueva ACL web puede tardar unos minutos en estar disponible. Si no ve una ACL web recién creada en el menú Firewall de aplicaciones web, espere unos minutos y vuelva a intentar los pasos para asociar la ACL web a su API.

nota

La integración de AWS WAF solo admite el evento Subscription registration message para puntos de conexión en tiempo real. AWS AppSyncresponderá con un mensaje de error en lugar de un mensaje start_ack para los Subscription registration message que bloquee AWS WAF.

Después de asociar una ACL web a una API de AWS AppSync, administrará la ACL web mediante las API de AWS WAF. No necesita volver a asociar la ACL web a su API de AWS AppSync a menos que desee asociar la API de AWS AppSync a una ACL web diferente.

Creación de reglas para una ACL web

Las reglas definen cómo inspeccionar las solicitudes web y qué hacer cuando una solicitud web coincida con los criterios de inspección. Las reglas no existen en AWS WAF de forma independiente. Puede acceder a una regla por su nombre en el grupo de reglas o en la ACL web donde está definida. Para obtener más información, consulte Reglas de AWS WAF. Los siguientes ejemplos muestran cómo definir y asociar reglas que son útiles para proteger una API de AppSync.

ejemplo Regla de ACL web para limitar el tamaño del cuerpo de la solicitud

El siguiente es un ejemplo de una regla que limita el tamaño del cuerpo de las solicitudes. Esto se introduciría en el Editor JSON de reglas al crear una ACL web en la consola de AWS WAF.

{ "Name": "BodySizeRule", "Priority": 1, "Action": { "Block": {} }, "Statement": { "SizeConstraintStatement": { "ComparisonOperator": "GE", "FieldToMatch": { "Body": {} }, "Size": 1024, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ] } }, "VisibilityConfig": { "CloudWatchMetricsEnabled": true, "MetricName": "BodySizeRule", "SampledRequestsEnabled": true } }

Después de crear la ACL web con la regla del ejemplo anterior, debe asociarla a la API de AppSync. Como alternativa al uso de AWS Management Console, puede realizar este paso en la AWS CLI ejecutando el siguiente comando.

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn

Los cambios pueden tardar unos minutos en propagarse, pero después de ejecutar este comando, las solicitudes que contengan un cuerpo superior a 1024 bytes serán rechazadas por AWS AppSync.

nota

Tras crear una nueva ACL web en la consola de AWS WAF, la ACL web puede tardar unos minutos en estar disponible para asociarse a una API. Si ejecuta el comando de la CLI y aparece un error WAFUnavailableEntityException, espere unos minutos y vuelva a intentar ejecutar el comando.

ejemplo Regla de ACL web para limitar las solicitudes desde una única dirección IP

El siguiente es un ejemplo de una regla que limita una API de AppSync a 100 solicitudes desde una sola dirección IP. Esto se introduciría en el Editor JSON de reglas al crear una ACL web con una regla basada en tasas en la consola de AWS WAF.

{ "Name": "Throttle", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "Throttle" }, "Statement": { "RateBasedStatement": { "Limit": 100, "AggregateKeyType": "IP" } } }

Después de crear la ACL web con la regla del ejemplo anterior, debe asociarla a la API de AppSync. Puede realizar este paso en la AWS CLI ejecutando el siguiente comando.

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn
ejemplo Regla de ACL web para evitar consultas de introspección __schema de GraphQL a una API

El siguiente es un ejemplo de una regla que impide las consultas de introspección __schema de GraphQL a una API. Se bloqueará cualquier cuerpo HTTP que incluya la cadena “__schema”. Esto se introduciría en el Editor JSON de reglas al crear una ACL web en la consola de AWS WAF.

{ "Name": "BodyRule", "Priority": 5, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "BodyRule" }, "Statement": { "ByteMatchStatement": { "FieldToMatch": { "Body": {} }, "PositionalConstraint": "CONTAINS", "SearchString": "__schema", "TextTransformations": [ { "Type": "NONE", "Priority": 0 } ] } } }

Después de crear la ACL web con la regla del ejemplo anterior, debe asociarla a la API de AppSync. Puede realizar este paso en la AWS CLI ejecutando el siguiente comando.

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn