Consulta de los registros de acceso en las tablas de S3
Al habilitar la integración de Tablas de Amazon S3, los Registros de Amazon CloudWatch entregan los registros de acceso al servidor en formato Apache Iceberg al bucket de tabla administrado por aws-cloudwatch. Como los datos están en formato Iceberg, puede consultarlos con cualquier herramienta compatible con Apache Iceberg, entre las que se incluyen:
-
Amazon Athena: ejecute consultas SQL directamente desde la consola de Athena mediante el catálogo de tablas de S3.
-
Estudio unificado de Amazon SageMaker: utilice el editor SQL integrado para consultar los datos de registro junto con otras cargas de trabajo de análisis.
-
Amazon Redshift: consulte tablas de Iceberg a través de Redshift Spectrum o mediante una integración directa.
-
Apache Spark en Amazon EMR: utilice Spark SQL o la API de DataFrame con el conector de Iceberg.
-
Herramientas de código abierto: cualquier herramienta que sea compatible con el catálogo REST de Apache Iceberg, como Trino, DuckDB o PyIceberg.
nota
Para consultar los registros de forma interactiva en información de Registros de CloudWatch (sin SQL), consulte Consulta de registros con información de Registros de CloudWatch.
Requisitos previos
Antes de poder consultar los registros de acceso en las tablas de S3, debe completar lo siguiente:
-
Habilite la integración de tablas de S3. Consulte Habilitación de la integración de tablas de S3 (opcional).
-
Habilite la integración de tablas de S3 con servicios de análisis. En la consola de Amazon S3, vaya a Buckets de tablas y elija Habilitar integración. Esto crea el catálogo federado
s3tablescatalogen Catálogo de datos y hace que las tablas sean visibles para los servicios de análisis. De forma predeterminada, el acceso se controla mediante los permisos de IAM. Puede usar opcionalmente AWS Lake Formation para el control de acceso detallado. Para obtener más información, consulte Integración de tablas de S3 con servicios de análisis de AWS. -
Espere a que se rellenen los datos. Los datos suelen aparecer una hora después de la primera entrega a Registros de CloudWatch.
Conexión a Amazon Athena
-
Abra la consola de Athena en https://console.aws.amazon.com/athena/
. -
En el editor de consultas, seleccione el catálogo de Tablas de Amazon S3 en el menú desplegable de origen de datos.
-
Las tablas de registro aparecen en la lista de bases de datos en el espacio de nombres de
logs.
El nombre de la tabla para los registros de acceso al servidor es amazon_s3__server_access. La referencia de la tabla totalmente cualificada es:
"s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access"
Análisis del tráfico
ejemplo Volumen de solicitudes a lo largo del tiempo
SELECT date_trunc('minute', request_time) AS interval, COUNT(*) AS requests FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY date_trunc('minute', request_time) ORDER BY interval ASC;
ejemplo Solicitud de una combinación por tipo de operación
SELECT operation, COUNT(*) AS cnt FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY operation ORDER BY cnt DESC;
ejemplo Tráfico por bucket
SELECT bucket_arn, COUNT(*) AS requests, SUM(bytes_sent_size) AS bytes_out FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY bucket_arn ORDER BY requests DESC;
Solución de errores
ejemplo Desglose de tasas de error
SELECT http_status, error_code, operation, COUNT(*) AS error_count FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE http_status >= 400 GROUP BY http_status, error_code, operation ORDER BY error_count DESC;
ejemplo Solicitudes 403 Access Denied
SELECT key_name, remote_ip, requester, COUNT(*) AS denied_count FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE http_status = 403 GROUP BY key_name, remote_ip, requester ORDER BY denied_count DESC;
ejemplo Solicitudes 404 Not Found
SELECT key_name, error_code, remote_ip, COUNT(*) AS miss_count FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE http_status = 404 GROUP BY key_name, error_code, remote_ip ORDER BY miss_count DESC;
ejemplo Eventos 503 SlowDown (limitación)
SELECT key_name, remote_ip, COUNT(*) AS throttle_count FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE http_status = 503 GROUP BY key_name, remote_ip ORDER BY throttle_count DESC;
Patrones de acceso
ejemplo Tráfico por IP de origen
SELECT remote_ip, COUNT(*) AS total_requests, SUM(CASE WHEN http_status >= 400 THEN 1 ELSE 0 END) AS errors, SUM(bytes_sent_size) AS bytes_transferred FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY remote_ip ORDER BY total_requests DESC;
ejemplo Operaciones por solicitante
SELECT requester, operation, COUNT(*) AS requests FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY requester, operation ORDER BY requests DESC;
ejemplo Claves más consultadas
SELECT key_name, COUNT(*) AS access_count, SUM(bytes_sent_size) AS bytes_out FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation IN ('REST.GET.OBJECT', 'REST.PUT.OBJECT') GROUP BY key_name ORDER BY access_count DESC LIMIT 10;
Análisis de la latencia
ejemplo Latencia por tipo de operación
SELECT operation, AVG(total_duration) AS avg_ms, APPROX_PERCENTILE(total_duration, 0.5) AS p50_ms, APPROX_PERCENTILE(total_duration, 0.95) AS p95_ms, MAX(total_duration) AS max_ms, COUNT(*) AS requests FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation IN ('REST.GET.OBJECT', 'REST.PUT.OBJECT') GROUP BY operation;
ejemplo Teclas más lentas por latencia de p95
SELECT key_name, AVG(total_duration) AS avg_ms, APPROX_PERCENTILE(total_duration, 0.95) AS p95_ms, COUNT(*) AS requests FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation = 'REST.GET.OBJECT' GROUP BY key_name ORDER BY p95_ms DESC LIMIT 10;
ejemplo Latencia a lo largo del tiempo
SELECT date_trunc('minute', request_time) AS interval, AVG(total_duration) AS avg_ms, APPROX_PERCENTILE(total_duration, 0.95) AS p95_ms FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation IN ('REST.GET.OBJECT', 'REST.PUT.OBJECT') GROUP BY date_trunc('minute', request_time) ORDER BY interval ASC;
Atribución de costos
ejemplo Transferencia de datos por operación
SELECT operation, SUM(bytes_sent_size) AS total_bytes_out, SUM(object_size) AS total_object_bytes, COUNT(*) AS request_count FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation IN ('REST.GET.OBJECT', 'REST.PUT.OBJECT', 'REST.DELETE.OBJECT') GROUP BY operation ORDER BY total_bytes_out DESC;
ejemplo Los objetos más grandes que se están sirviendo
SELECT key_name, MAX(object_size) AS max_size, AVG(object_size) AS avg_size, COUNT(*) AS reads FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE operation = 'REST.GET.OBJECT' AND bytes_sent_size > 0 GROUP BY key_name ORDER BY max_size DESC LIMIT 10;
Análisis de seguridad
ejemplo IP con altas tasas de error
SELECT remote_ip, COUNT(*) AS total, SUM(CASE WHEN http_status >= 400 THEN 1 ELSE 0 END) AS errors FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY remote_ip HAVING SUM(CASE WHEN http_status >= 400 THEN 1 ELSE 0 END) > 10 ORDER BY errors DESC;
ejemplo Intentos de acceso erróneos por clave
SELECT remote_ip, key_name, operation, http_status, COUNT(*) AS attempts FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" WHERE http_status >= 400 GROUP BY remote_ip, key_name, operation, http_status ORDER BY attempts DESC LIMIT 20;
ejemplo Distribución de versiones de TLS
SELECT tls_version, COUNT(*) AS cnt FROM "s3tablescatalog/aws-cloudwatch"."logs"."amazon_s3__server_access" GROUP BY tls_version ORDER BY cnt DESC;
Uso de agentes de IA para consultar los registros de acceso al servidor de Amazon S3
Los agentes de IA compatibles con MCP pueden detectar las tablas de S3 que contienen los registros de acceso al servidor de Amazon S3, generar consultas SQL y analizar los resultados. Como los registros de acceso al servidor de Amazon S3 se exportan como tablas de Iceberg en el bucket de tablas de aws-cloudwatch, los agentes pueden consultarlos en el mismo catálogo de tablas de S3 que utiliza con Amazon Athena, Amazon EMR, Amazon Redshift o cualquier herramienta compatible con Iceberg.
El kit de herramientas para agentes de AWSaws-cloudwatch. Para usarla, descargue la habilidad del repositorio en GitHub y agréguela al directorio de habilidades del agente.
Por ejemplo, puede pedir a un agente que muestre las 10 direcciones IP de origen principales por número de solicitudes en los registros de acceso al servidor de S3 de las últimas 24 horas. El agente usa la habilidad para localizar la tabla de registro de acceso y ejecutar la consulta en Athena.