¿Cómo analizo los registros de AWS WAF en CloudWatch?
Guardo mis registros de AWS WAF en Amazon CloudWatch. Quiero analizar y filtrar estos registros.
Resolución
Para analizar y filtrar solicitudes de registro específicas en CloudWatch, utiliza Información de registros de CloudWatch o el generador de consultas de CloudWatch.
Uso de Información de registros de CloudWatch para analizar los registros de acceso de AWS WAF
Puedes usar Información de registros de CloudWatch desde la consola de CloudWatch o desde la pestaña Información de registros de CloudWatch de la consola de AWS WAF.
Desde AWS WAF
Sigue estos pasos:
- Abre la consola de AWS WAF.
- En el panel de navegación, en AWS WAF, selecciona ACL web.
- En Región, selecciona la región de AWS que contiene la lista de control de acceso web (ACL web).
Nota: Si la ACL web se ha configurado para Amazon CloudFront, selecciona Global. - Selecciona la ACL web.
- En las pestañas de la parte superior de la página, ve a Información de registros de CloudWatch.
- En el editor de consultas, introduce la consulta. Utiliza la sintaxis de consulta para diseñar las consultas. También puedes seleccionar consultas de la lista Most frequently used queries (Consultas utilizadas con más frecuencia).
- Selecciona Ejecutar consulta.
- Para ver los resultados, en el panel de navegación, selecciona Registros.
Desde CloudWatch
Sigue estos pasos:
- Abre la consola de CloudWatch.
- En el panel de navegación, en Registros, selecciona Logs Insights.
- En Seleccione grupo(s) de registro, selecciona uno o más grupos de registros de la lista para consultarlos. O bien, selecciona Examinar grupos de registro y, a continuación, selecciona la consulta.
- (Opcional) Selecciona un rango de tiempo para el periodo que deseas consultar.
- Utiliza la sintaxis de consulta para diseñar las consultas.
- Para ver los resultados, selecciona Ejecutar consulta.
Para filtrar información específica, utiliza los siguientes ejemplos de consultas:
Principales direcciones IP de los clientes
Para contar las principales direcciones IP de los clientes que realizan solicitudes a tu recurso protegido, ejecuta la siguiente consulta:
fields httpRequest.clientIp | stats count(*) as requestCount by httpRequest.clientIp | sort requestCount desc
Principales países
Para contar los principales países desde los que se envían las solicitudes a tu recurso protegido, ejecuta la siguiente consulta:
stats count(*) as RequestCount by httpRequest.country as Country | sort RequestCount desc
Principales hosts
Para contar los principales encabezados de hosts que realizan solicitudes a tu recurso protegido, ejecuta la siguiente consulta:
parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/ | stats count(*) as RequestCount by Host | sort RequestCount desc
Principales métodos
Para contar los principales métodos HTTP utilizados para realizar solicitudes a tu recurso protegido, ejecuta la siguiente consulta:
stats count(*)as RequestCount by httpRequest.httpMethod as Method | sort RequestCount desc
Principales agentes de usuario
Para contar los principales agentes de usuario que realizan solicitudes a tu recurso protegido, ejecuta la siguiente consulta:
parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/ | stats count(*) as RequestCount by UserAgent | sort RequestCount desc
Principales rutas de URI
Para obtener una lista de las rutas de URI más visitadas de tus recursos protegidos, ejecuta la siguiente consulta:
fields httpRequest.uri | stats count(*) as uriVisits by httpRequest.uri | sort uriVisits desc | limit 50
Principales reglas de terminación
Para contar las principales reglas de terminación de tus registros, ejecuta la siguiente consulta:
stats count(*) as RequestCount by terminatingRuleId | sort RequestCount desc
Filtrar solicitudes bloqueadas
Para filtrar todas las solicitudes bloqueadas y su regla de terminación, ruta de URI y dirección IP del cliente, ejecuta la siguiente consulta:
fields @timestamp, httpRequest.clientIp as ClientIP, httpRequest.uri as URI, terminatingRuleId as rule | filter action = "BLOCK" | sort @timestamp desc
Filtrar por host
Para filtrar los registros por un valor de encabezado de host específico, ejecuta la siguiente consulta:
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.uri as URI | parse @message /\{"name":"[Hh]ost\",\"value":\"(?Host[^\"]*)\"/ | filter Host = "www.example.com"
Nota: Sustituye por el nombre del host.
Filtrar por un agente de usuario específico
Para filtrar los registros por un agente de usuario específico, ejecuta la siguiente consulta:
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.httpMethod as Method,httpRequest.uri as URI | parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/ | parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/ | filter @message like "Postman" | display Rule, action, Country, ClientIP, Method, URI, Host, UserAgent | sort action, URI desc
Nota: Sustituye Postman por el agente del usuario.
Filtrar por solicitudes POST
Para filtrar por las solicitudes POST, ejecuta la siguiente consulta:
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.httpMethod as Method, httpRequest.uri as URI | parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/ | parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/ | filter httpRequest.httpMethod ="POST" | display Rule, action, Country, ClientIP, Method, URI, Host, UserAgent | sort @timestamp desc
Filtrar por país
Para filtrar las solicitudes que no se originan en un país específico, ejecuta la siguiente consulta:
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.uri as URI | parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/ | parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/ | filter Country != "US" | sort Country, action desc
Nota: Sustituye US por el código de país que quieras filtrar.
Filtrar solicitudes bloqueadas por reglas basadas en tasas
Para filtrar las solicitudes bloqueadas por una regla basada en tasas, ejecuta la siguiente consulta:
fields @timestamp, httpRequest.clientIp as ClientIP, httpRequest.uri as URI, terminatingRuleId as rule, httpRequest.country as Country | filter action = "BLOCK" | filter terminatingRuleType = "RATE_BASED" | sort @timestamp desc
Scripting entre sitios (XSS) o inyección de código SQL
Para encontrar los patrones que provocan XSS o la inyección de código SQL en la regla de terminación de una regla personalizada o un grupo de reglas administradas de AWS, ejecuta la siguiente consulta. La consulta devuelve entradas con una marca de tiempo, la dirección IP del cliente, el país de origen, los detalles de la coincidencia y el ID de la solicitud:
fields @timestamp | parse @message ',"terminatingRuleMatchDetails":[*],' as terminatingRuleMatchData | filter (terminatingRuleMatchData like /XSS/ or terminatingRuleMatchData like /SQL/) | display @timestamp, httpRequest.clientIp, httpRequest.country, terminatingRuleMatchData, httpRequest.requestId
Filtrar las solicitudes contadas por una regla específica en un grupo de reglas
Para filtrar las solicitudes que se cuentan según una regla específica en un grupo de reglas y que, luego, finalizan con la acción predeterminada, ejecuta la siguiente consulta:
fields @timestamp | filter (@message like 'excludedRules":[{"exclusionType":"EXCLUDED_AS_COUNT","ruleId":"NoUserAgent_HEADER"}]}' and @message like 'terminatingRuleId":"Default_Action"') | parse @message '"ruleId":*}]}' as ruleMatchDetails | display @timestamp, httpRequest.clientIp, httpRequest.country, ruleMatchDetails, httpRequest.requestId
Nota: Sustituye ruleID por el ID de tu regla.
Filtrar las solicitudes con un CAPTCHA que no es válido
Para filtrar las 100 solicitudes principales con un CAPTCHA que no es válido, ejecuta la siguiente consulta. Esta consulta devuelve la hora en que se realizó la solicitud, la dirección IP, el ID de la solicitud, el código de respuesta y el mensaje completo:
fields @timestamp, httpRequest.clientIp, httpRequest.requestId, captchaResponse.failureReason, @message | filter captchaResponse.failureReason ='TOKEN_MISSING' | sort @timestamp desc | limit 100
Nota: Sustituye 100 por el número de solicitudes por las que deseas filtrar.
Uso del generador de consultas de CloudWatch para analizar los registros de acceso de AWS WAF
Para usar la IA generativa para analizar los registros de acceso, ejecuta el generador de consultas en CloudWatch.
Contenido relevante
- preguntada hace 21 díaslg...
- Como solucionar el error: Supplied Policy document is breaching Cloudwatch Logs policy length limit.Respuesta aceptadapreguntada hace 7 díaslg...
- preguntada hace 10 díaslg...
- preguntada hace un meslg...
- preguntada hace un meslg...
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 7 meses
- OFICIAL DE AWSActualizada hace 7 meses