Athena no almacena registros por sí mismo. Consulta archivos de registros en S3, como CloudTrail, VPC Flow Logs, registros de balanceador de carga y registros de WAF, a través de tablas que defines. Los resultados normales de la consulta se guardan como CSV en tu bucket de resultados. Para obtener JSON en su lugar, envuelve la consulta en UNLOAD … WITH (format = ‘JSON’): Athena escribe JSON delimitado por nuevas líneas en un prefijo de S3, y lo descargas.
Muchos equipos de AWS mantienen meses de registros en S3 y los consultan con Athena en lugar de enviar todo a un SIEM. Prime Core tiene más de 24,000 reglas de detección únicas, mapeadas a 676 técnicas de MITRE ATT&CK. A continuación se muestra cómo obtener una porción, sanearla e investigarla gratuitamente en LogTotal.
Antes de empezar
Permisos. Necesitas ejecutar consultas de Athena (athena:StartQueryExecution y relacionadas), leer las definiciones de tablas en Glue, leer el bucket de origen y escribir a un bucket de exportación. Agrega kms:Decrypt si los registros están cifrados con KMS.
Conoce la tabla y sus particiones. Una tabla de CloudTrail generalmente se particiona por región y fecha, ya sea con proyección de particiones o con particiones que has añadido. Athena cobra por los datos escaneados, así que filtra en las particiones cada vez. Una consulta sin ellas puede escanear años de registros.
Un grupo de trabajo. Athena ejecuta consultas en un grupo de trabajo con una ubicación de resultados. UNLOAD escribe a su propio destino, pero el grupo de trabajo todavía necesita ser configurado.
Exportar con UNLOAD
UNLOAD (
SELECT *
FROM cloudtrail_logs
WHERE region = 'eu-west-1'
AND day = '2026/10/19'
AND useridentity.arn LIKE '%suspicious-user%'
)
TO 's3://my-athena-exports/ct-1019/'
WITH (format = 'JSON', compression = 'NONE')
Adapta las columnas de partición (region, day) a la definición de tu tabla. El prefijo de destino debe estar vacío.
Desde la línea de comandos:
QID=$(aws athena start-query-execution –work-group primary
–query-string «$(cat unload.sql)»
–query ‘QueryExecutionId’ –output text)
# espera hasta que SUCCEEDED
until [ «$(aws athena get-query-execution –query-execution-id «$QID»
–query ‘QueryExecution.Status.State’ –output text)» = «SUCCEEDED» ]; do sleep 5; done
aws s3 cp s3://my-athena-exports/ct-1019/ ./ct-1019/ –recursive
zcat -f ./ct-1019/* > ct_1019.jsonl
zcat -f maneja tanto la salida comprimida como sin comprimir, en caso de que la compresión se deje en el valor predeterminado. Si la consulta falla, el bucle de espera nunca termina. Verifica también por FAILED si guionizas esto regularmente.
Por qué no get-query-results? Funciona, pero devuelve filas como listas de cadenas, 1,000 por página, que luego debes ensamblar nuevamente en objetos. UNLOAD te da JSON limpio en un solo paso.
Sube, sana y revisa en LogTotal
- Subir. Abrir logtotal.com y arrastra el archivo .jsonl.
- Sanear.
- Revisar.
Cuando algo sale mal
| Síntoma | Causa probable | Fix |
|---|---|---|
| La consulta escanea terabytes | Sin filtro de partición | Filtra en las columnas de partición |
| Error sobre la ubicación de salida | El prefijo de destino no está vacío | Usa un nuevo prefijo |
| Acceso Denegado | Faltan permisos de S3, Glue o KMS | Revisa cada uno; KMS es el sospechoso habitual |
| Cero filas | Particiones no cargadas o el formato de partición incorrecto | Revisa la proyección de particiones o ejecuta MSCK REPAIR TABLE |
| Los archivos de salida no se abren como texto | Compresión GZIP | Usa zcat, o configura compression = ‘NONE’ |
FAQ
¿Es lo mismo que Amazon Security Lake?
Security Lake también usa Athena, pero con sus propias tablas OCSF y permisos de Lake Formation.
¿Puedo exportar archivos CloudTrail en bruto en su lugar?
Sí. Si solo necesitas días completos, copiar los archivos desde S3 es más sencillo. Athena justifica su uso cuando necesitas filtrar.