En esta publicación, aprenderá los conceptos básicos del firewall de aplicaciones web (WAF) de AWS y escribirá código CDK para proteger un servicio de REST API Gateway. Habilitaremos las métricas de WAF, agregaremos reglas administradas a la ACL y habilitaremos el inicio de sesión en un grupo de registros de Cloudwatch.
Esta es la segunda de tres publicaciones de la serie WAF.
En laprimerapublicación , proporcioné consejos y trucos para usar AWS WAF para un servicio SaaS listo para producción.
En la tercera publicación, revisaremos AWS Firewall Manager y cómo permite a una organización administrar las ACL de AWS Application Web Firewall a escala.
Tabla de contenido
Introducción al firewall de aplicaciones web (WAF) de AWS
AWS WAF es un firewall de aplicaciones web que le permite supervisar o bloquear las solicitudes HTTP(S) reenviadas a los recursos de su aplicación web protegida. Puede proteger los siguientes tipos de recursos:
Distribución de Amazon CloudFront
API REST de Amazon API Gateway
Balanceador de carga de aplicaciones
API GraphQL de AWS AppSync
Grupo de usuarios de Amazon Cognito
Servicio AWS App Runner
Instancia de acceso verificado de AWS
Como puede ver en la lista anterior, AWS WAF puede proteger sus servicios basados en contenedores y sin servidor. En laprimera publicación de la serie, hablé sobre las amenazas de las que WAF lo protege .
Para entender cómo WAF proporciona una capa adicional de seguridad, primero debemos entender cómo funciona. Veamos cómo podemos configurar WAF para proteger nuestro servicio SaaS.
ACL y reglas
Para utilizar WAF con sus recursos de AWS (como se define anteriormente), cree una lista de control de acceso (ACL) de WAF, defina sus reglas y asocie la ACL con el recurso que desea proteger.
Los recursos asociados reenvían las solicitudes entrantes a AWS WAF para que la ACL web las inspeccione. En la ACL web, se crean reglas para definir los patrones de tráfico que se deben buscar en las solicitudes y para especificar las acciones que se deben tomar en las solicitudes coincidentes. - AWS
Cada regla tiene una acción que se ejecuta cuando se cumple. Las opciones de acción incluyen lo siguiente:
Permitir que las solicitudes vayan al recurso protegido para su procesamiento y respuesta.
Bloquear las solicitudes.
Cuente las solicitudes.
Ejecute CAPTCHA o verificaciones de desafío contra solicitudes para verificar usuarios humanos y el uso estándar del navegador.
AWS ofrece reglas administradas listas para usar y le recomiendo que las use tanto como sea posible. Estas reglas, que AWS actualiza constantemente, son fáciles de usar y no hay motivo para reinventar la rueda. Sin embargo, a veces necesitamos usar reglas personalizadas.
Una regla puede tener varias condiciones con un 'y', 'o' o 'no' entre ellas. Una condición puede usar una expresión regular para hacer coincidir el encabezado HTTP, un elemento basado en la tasa, bloquear el tráfico que se origina en países específicos o incluso un conjunto de IP (por ejemplo, bloquear el tráfico que no se origina en los rangos de IP de su VPN de trabajo). WAF también tiene la opción de alterar los encabezados (transformarlos) antes de examinarlos. Tiene muchas opciones personalizadas; solo tenga en cuenta que cuanto más avanzada y personalizada sea, más WCU utilizará (consulte la sección WCU ).
Otra noción importante que hay que recordar es que las reglas tienen prioridad . WAF examina el tráfico desde la prioridad más alta hasta la más baja y, cuando una regla coincide con sus condiciones, realiza la acción definida, sea cual sea.
El registro también es un aspecto esencial de la depuración de WAF. En esta publicación, abordaré el registro en un grupo de registros de CW, pero hay otras dos opciones; las cubrí con mis recomendaciones en laprimera publicación .
Por último, puedes habilitar las métricas de CloudWatch para tus reglas WAF. Te sugiero que las habilites, ya que brindan información valiosa sobre si marcan una diferencia (¡conoce qué y por qué estás pagando!). Para obtener más información, consulta la documentación de AWS .
Ahora que tenemos los conceptos básicos, pasemos al código CDK.
Ejemplo de arquitectura de servicio sin servidor
El servicio "pedidos" permite a los usuarios pedir productos. Utilizaremos mi proyecto de plantilla Serverless de código abierto: AWS Lambda Handler Cookbook .
Este repositorio proporciona una plantilla de servicio sin servidor, de código abierto, que funciona y se puede implementar con una función de AWS Lambda y código Python de AWS CDK, todas las mejores prácticas y un flujo de trabajo de CI/CD completo. ¡Puede iniciar un servicio sin servidor en 3 clics!
Ahora, protejamos nuestra API Gateway de DDoS y otros ataques o interrupciones.
Agreguemos una ACL de AWS WAF a la combinación y asociémosla con nuestra API Gateway:
API Gateway pasará el tráfico a nuestra ACL de AWS WAF para su inspección. La ACL intentará hacer coincidir el tráfico con su lista de reglas (ordenadas por prioridad) y ejecutará la acción de la primera regla que coincida.
Código CDK de AWS
Para obtener el código CDK de API Gateway, haga clic aquí .
Para obtener el código WAF completo haga clic aquí .
Revisemos el código CDK de WAF a continuación. Queremos crear una nueva ACL de WAF con tres reglas administradas por AWS y habilitar métricas y registros:
En la línea 10 obtenemos la construcción de API Gateway que deseamos asociar con nuestra ACL de WAF.
En las líneas 14 a 88, definimos la ACL de WAF, habilitamos las métricas de CW y definimos la lista de reglas de la ACL.
Entre las líneas 23 y 88, definimos las reglas con una prioridad, declaraciones y una configuración de visibilidad que incluye métricas de CloudWatch para un monitoreo y control integral.
En la línea 91 asociamos nuestro servicio API Gateway a la ACL.
En las líneas 94 a 128, agregamos la configuración de registro. Creamos el grupo de registros, permitimos que WAF cree flujos de registros dentro de él y habilitamos las configuraciones de registro.
Después de la implementación, obtenemos las reglas administradas de AWS que definimos ordenadas por su prioridad:
y esta configuración de registro:
¡Eso es todo!
Consulte las funciones de registro avanzadas de WAF, como filtros o campos redactados, en la documentación oficial .