Para los últimos 90 días de eventos de gestión, use la consola de CloudTrail (Historial de eventos → Descargar eventos → JSON) o aws cloudtrail lookup-events. Para eventos más antiguos, o para eventos de datos como lecturas de objetos S3, lea los archivos de registro de su rastro en S3. Se encuentran bajo s3://<bucket>/AWSLogs/<account-id>/CloudTrail/<region>/YYYY/MM/DD/.
CloudTrail es el registro de auditoría de su plano de control de AWS: cada inicio de sesión en la consola, cada llamada a la API, cada asunción de rol. En un incidente en la nube, es lo primero que todos piden. Prime Core tiene 262 reglas de detección para CloudTrail, mapeadas a 177 técnicas MITRE ATT&CK. Entre ellas: uso indebido de cuentas en la nube (T1078.004), atacantes apagando el registro en la nube (T1562.008) y robo de datos de almacenamiento en la nube (T1530).
Antes de comenzar
El historial de eventos y los rastros son cosas diferentes. El historial de eventos siempre está activado y es gratuito. Mantiene 90 días de eventos de gestión, por región. Un rastro es algo que se configura: escribe en S3, guarda registros tanto tiempo como desee, y puede incluir eventos de datos. Verifique lo que tiene:
aws cloudtrail describe-trails
aws cloudtrail get-trail-status --name <trail-name>
IsLogging: false en un rastro que debería estar funcionando es un hallazgo en sí mismo.
Las regiones importan. El historial de eventos es por región, y los eventos de servicios globales como IAM suelen encontrarse en us-east-1. Si busca una llamada CreateUser en eu-west-1, no la encontrará.
Permisos. cloudtrail:LookupEvents para el historial de eventos. Para archivos de rastro, s3:ListBucket y s3:GetObject en el bucket, además de kms:Decrypt si el rastro está cifrado con una clave KMS.
Opción 1: Descarga desde la consola
Abra CloudTrail, vaya a Historial de eventos, establezca el rango de tiempo y cualquier filtro (nombre del evento, usuario, recurso), luego elija Descargar eventos → JSON. La descarga respeta sus filtros, así que verifíquelos primero. Cubre solo la región actual.
Opción 2: lookup-events desde la CLI
aws cloudtrail lookup-events --region us-east-1
--start-time 2026-10-19T00:00:00Z --end-time 2026-10-20T00:00:00Z
--output json > ct_use1_1019.json
Dos cosas para saber. Primero, cada resultado envuelve el evento real como un string en CloudTrailEvent. Desenvuélvalo en un evento limpio por línea:
jq -c '.Events[].CloudTrailEvent | fromjson' ct_use1_1019.json > ct_use1_1019.jsonl
Segundo, lookup-events tiene un límite de tasa por cuenta y región, y solo acepta un filtro –lookup-attributes por llamada. Ventanas de tiempo amplias toman tiempo, así que reduzca donde pueda. Para cubrir todas las regiones, haga un bucle sobre aws ec2 describe-regions –query ‘Regions[].RegionName’ –output text.
Opción 3: Archivos de rastro desde S3
Esta es la ruta para el historial más allá de 90 días y para eventos de datos:
aws s3 cp s3://my-trail-bucket/AWSLogs/123456789012/CloudTrail/eu-west-1/2026/10/19/ ./ct/ --recursive
gunzip ./ct/*.json.gz
jq -c '.Records[]' ./ct/*.json > ct_euw1_1019.jsonl
Cada archivo contiene un array Records, y la línea jq los aplana todos en un evento por línea. Los rastros de organización agregan el ID de la organización a la ruta: AWSLogs/<org-id>/<account-id>/CloudTrail/…. Si utiliza CloudTrail Lake, puede ejecutar SQL sobre sus eventos y guardar los resultados en su lugar.
Qué buscar
| Evento | Por qué importa |
|---|---|
| Inicio de sesión en consola | Verifique additionalEventData.MFAUsed, fallos e IPs de origen que no reconozca |
| CreateUser, CreateAccessKey, AttachUserPolicy | Nuevas identidades y claves: persistencia clásica y escalada de privilegios |
| StopLogging, DeleteTrail, PutEventSelectors | Alguien reduciendo lo que CloudTrail ve |
| Asumir rol desde fuentes extrañas | Movimiento lateral entre roles y cuentas |
| Ráfagas de errorCode: AccessDenied | Reconocimiento con credenciales robadas |
| GetSecretValue, ráfagas de GetObject | Acceso a datos; GetObject aparece solo si los eventos de datos S3 están activados |
Cargar, sanitizar y revisar en LogTotal
- Cargar. Abrir logtotal.com y soltar el .jsonl (o archivo .json).
- Sanitizar. [what gets masked: account IDs, ARNs, IPs, access key IDs, usernames]. Look it over before you continue.
- Revisar.
Cuando algo sale mal
| Síntoma | Causa probable | Fix |
|---|---|---|
| lookup-events no devuelve nada | Región equivocada; los eventos de IAM suelen estar en us-east-1 | Consultar us-east-1, o hacer un bucle por todas las regiones |
| Nada anterior a 90 días | Retención del historial de eventos | Use los archivos de rastro en S3 |
| No hay eventos GetObject | Los eventos de datos S3 no están habilitados en el rastro | Esperado; actívelos para el futuro |
| AccessDenied leyendo archivos de rastro | Falta kms:Decrypt, o la política del bucket | Corrija IAM o la política del bucket |
| ThrottlingException | límite de tasa de lookup-events | Ventanas más pequeñas; deje que la CLI reintente |
FAQ
¿El historial de eventos incluye eventos de datos?
No. Solo eventos de gestión. Los eventos de datos existen solo si se configuró un rastro o almacén de eventos para registrarlos.
¿Con qué rapidez aparecen los eventos?
Usualmente dentro de minutos de la llamada a la API. Los archivos de rastro en S3 llegan en lotes, por lo que un evento muy reciente puede no estar aún en un archivo.