Consulta de registros de AWS CloudFront y WAF con AWS Athena – Parte II
Entonces, en la sección anterior, se discutió hasta el punto en que se crea una base de datos en Athena. Continuaremos nuestra discusión sobre la creación de tablas AWS Athena para CloudFront y WAF, y formas sencillas de consultar las tablas creadas.
Como siguiente paso, podemos crear una tabla para los registros de CloudFront. Usaremos la consulta proporcionada en la documentación de AWS directamente para crear esta tabla. La URL de la documentación se ha agregado en el enlace de referencia [1] para leer más.
Aquí, puede cambiar el nombre de la base de datos y la tabla de acuerdo con la base de datos creada anteriormente y la convención de nomenclatura vigente para sus proyectos. Como ejemplo, default.cloudfront_logs se puede cambiar a cf_logs.newproject_cloudfront_logs
Aparte de eso, es necesario actualizar la ubicación del bucket de S3 donde se almacenan los registros de CloudFront en la sección de ubicación,
LOCATION ‘s3://CloudFront_bucket_name/CloudFront/’
CREATE EXTERNAL TABLE IF NOT EXISTS default.cloudfront_logs ( `date` DATE, time STRING, location STRING, bytes BIGINT, request_ip STRING, method STRING, host STRING, uri STRING, status INT, referrer STRING, user_agent STRING, query_string STRING, cookie STRING, result_type STRING, request_id STRING, host_header STRING, request_protocol STRING, request_bytes BIGINT, time_taken FLOAT, xforwarded_for STRING, ssl_protocol STRING, ssl_cipher STRING, response_result_type STRING, http_version STRING, fle_status STRING, fle_encrypted_fields INT, c_port INT, time_to_first_byte FLOAT, x_edge_detailed_result_type STRING, sc_content_type STRING, sc_content_len BIGINT, sc_range_start BIGINT, sc_range_end BIGINT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION 's3://CloudFront_bucket_name/CloudFront/' TBLPROPERTIES ( 'skip.header.line.count'='2' )
La siguiente imagen muestra una tabla de muestra creada usando la consulta anterior en la base de datos predeterminada,
Sigamos adelante y creemos una tabla para los registros WAF. Aquí también, usaremos la consulta proporcionada en la documentación de AWS con los cambios en los atributos requeridos. La URL de la documentación se ha agregado en el enlace de referencia [2] para leer más.
Aquí, puede cambiar el nombre de la base de datos y la tabla de acuerdo con la base de datos creada anteriormente y la convención de nomenclatura vigente para sus proyectos. Como ejemplo, waf_logs se puede cambiar a newproject_waf_logs
Aparte de eso, es necesario actualizar la ubicación del depósito S3 donde se almacenan los registros WAF en la sección de ubicación,
LOCATION ‘s3://waflog_bucket_name/waflogs/’
CREATE EXTERNAL TABLE `waf_logs`( `timestamp` bigint, `formatversion` int, `webaclid` string, `terminatingruleid` string, `terminatingruletype` string, `action` string, `terminatingrulematchdetails` array< struct< conditiontype:string, location:string, matcheddata:array<string> > >, `httpsourcename` string, `httpsourceid` string, `rulegrouplist` array< struct< rulegroupid:string, terminatingrule:struct< ruleid:string, action:string, rulematchdetails:string >, nonterminatingmatchingrules:array< struct< ruleid:string, action:string, rulematchdetails:array< struct< conditiontype:string, location:string, matcheddata:array<string> > > > >, excludedrules:array< struct< ruleid:string, exclusiontype:string > > > >, `ratebasedrulelist` array< struct< ratebasedruleid:string, limitkey:string, maxrateallowed:int > >, `nonterminatingmatchingrules` array< struct< ruleid:string, action:string > >, `requestheadersinserted` string, `responsecodesent` string, `httprequest` struct< clientip:string, country:string, headers:array< struct< name:string, value:string > >, uri:string, args:string, httpversion:string, httpmethod:string, requestid:string >, `labels` array< struct< name:string > > ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'paths'='action,formatVersion,httpRequest,httpSourceId,httpSourceName,labels,nonTerminatingMatchingRules,rateBasedRuleList,requestHeadersInserted,responseCodeSent,ruleGroupList,terminatingRuleId,terminatingRuleMatchDetails,terminatingRuleType,timestamp,webaclId') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://athenawaflogs/WebACL/'
La siguiente imagen muestra una tabla de muestra creada usando la consulta anterior en la base de datos predeterminada,
Ahora, las tablas de Athena se han creado para CloudFront y WAF, pasemos a la parte de consultas. En la primera sección, hemos creado un bucket de S3 para guardar los resultados de la consulta junto con la creación del espacio de trabajo. Si no creó el depósito de S3, es necesario crear el depósito y configurarlo en consecuencia antes de ejecutar las consultas.
Ejecutar una consulta simple en las tablas de CloudFront y WAF recién creadas simplemente se vería como a continuación,
SELECT * FROM "default"."newproject_cloudfront_logs" LIMIT 5SELECT * FROM "default"."newproject_waf_logs" LIMIT 5
Analicemos un caso de uso más práctico en el que tiene una distribución de CloudFront y aparece la siguiente pantalla de error. Debe verificar los registros WAF utilizando las tablas de Athena creadas para una mayor investigación,
Aquí, puede ver que hay una cadena llamada ID de solicitud, y esta es una única que se puede usar para consultar los registros WAF para un registro específico. La siguiente consulta se puede utilizar para recuperar el registro específico que provocó el error anterior,
SELECT * FROM "default"."newproject_waf_logs" WHERE httprequest.requestid = 'AF4z0A4j7WQSBxYOBERq1RiJalZKCenyR197pVMd5vD7aD-tnn9hxQ=='
Hay muchas más formas de personalizar y consultar registros de CloudFront y WAF a través de Athena. Las consultas anteriores son solo las consultas más simples que se muestran con fines de referencia. Puede encontrar más información en la documentación de AWS, así como en otros recursos disponibles. Además, no es necesario seguir estos pasos en el mismo orden, ya que puede haber diferentes métodos con mejoras adicionales que siempre puede probar una vez que esté familiarizado con las bases de datos, las tablas y las consultas de AWS Athena.