

# Consulta de los registros de acceso en las tablas de S3
<a name="sal-cw-querying-s3tables"></a>

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](sal-cw-querying-insights.md).

## Requisitos previos
<a name="sal-cw-s3tables-prerequisites"></a>

Antes de poder consultar los registros de acceso en las tablas de S3, debe completar lo siguiente:

1. **Habilite la integración de tablas de S3.** Consulte [Habilitación de la integración de tablas de S3 (opcional)](sal-cw-enabling.md#sal-cw-tables-integration).

1. **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 `s3tablescatalog` en 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html).

1. **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
<a name="sal-cw-s3tables-athena-setup"></a>

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/).

1. En el editor de consultas, seleccione el catálogo de **Tablas de Amazon S3** en el menú desplegable de origen de datos.

1. 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
<a name="sal-cw-s3tables-traffic"></a>

**Example 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;
```

**Example 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;
```

**Example 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
<a name="sal-cw-s3tables-errors"></a>

**Example 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;
```

**Example 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;
```

**Example 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;
```

**Example 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
<a name="sal-cw-s3tables-access"></a>

**Example 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;
```

**Example 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;
```

**Example 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
<a name="sal-cw-s3tables-latency"></a>

**Example 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;
```

**Example 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;
```

**Example 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
<a name="sal-cw-s3tables-cost"></a>

**Example 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;
```

**Example 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
<a name="sal-cw-s3tables-security"></a>

**Example 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;
```

**Example 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;
```

**Example 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
<a name="sal-cw-s3tables-ai-agents"></a>

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 AWS](https://github.com/aws/agent-toolkit-for-aws) proporciona habilidades que proporcionan a los agentes procedimientos validados para trabajar con datos de AWS. La habilidad [Consulta de tablas del sistema de Registros de CloudWatch](https://github.com/aws/agent-toolkit-for-aws/tree/main/skills/specialized-skills/system-table-skills/querying-aws-cloudwatch) ejecuta consultas SQL sobre los datos de Registros de CloudWatch exportados a tablas de S3, incluidos los registros de acceso al servidor de Amazon S3 en el bucket de tablas de `aws-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.