Для останніх 90 днів подій управління використовуйте консоль CloudTrail (Історія подій → Завантажити події → JSON) або aws cloudtrail lookup-events. Для старіших подій або подій даних, таких як S3 object reads, переглядайте файли журналу вашого треку в S3. Вони розміщуються під s3://<bucket>/AWSLogs/<account-id>/CloudTrail/<region>/YYYY/MM/DD/.
CloudTrail є аудиторським журналом вашої контрольної площини AWS: кожен вхід до консолі, кожен виклик API, кожне прийняття ролі. У разі інциденту в хмарі це перше, що всі запитують. Prime Core має 262 правила детекції для CloudTrail, відповідно до 177 технік MITRE ATT&CK. Серед них: зловживання хмарними обліковими записами (T1078.004), вимикання журналювання в хмарі (T1562.008) та крадіжка даних з хмарного сховища (T1530).
Перед тим, як почати
Історія подій і треки – це різні речі. Історія подій завжди включена і безкоштовна. Вона зберігає 90 днів подій управління, по кожному регіону. Трек – це те, що ви налаштовуєте: він пише в S3, зберігає журнали стільки, скільки ви хочете, і може включати події даних. Перевірте, що у вас є:
aws cloudtrail describe-trails
aws cloudtrail get-trail-status --name <trail-name>
IsLogging: false на треку, який повинен бути запущений, є само по собі виявленням.
Регіони мають значення. Історія подій є по регіонах, і події з глобальних сервісів, таких як IAM, зазвичай розміщуються в us-east-1. Якщо ви шукаєте виклик CreateUser в eu-west-1, ви його не знайдете.
Дозволи. cloudtrail:LookupEvents для історії подій. Для файлів треку – s3:ListBucket та s3:GetObject на бакеті, плюс kms:Decrypt, якщо трек зашифровано з допомогою ключа KMS.
Опція 1: Завантаження з консолі
Відкрийте CloudTrail, перейдіть до Історія подій, встановіть діапазон часу та будь-які фільтри (ім’я події, користувач, ресурс), потім оберіть Завантажити події → JSON. Завантаження поважає ваші фільтри, тому перевірте їх спочатку. Воно охоплює лише поточний регіон.
Опція 2: lookup-events з 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
Дві речі, які потрібно знати. По-перше, кожен результат обгортає фактичну подію як JSON строку у CloudTrailEvent. Розгорніть її у одну чисту подію на рядок:
jq -c '.Events[].CloudTrailEvent | fromjson' ct_use1_1019.json > ct_use1_1019.jsonl
По-друге, lookup-events має обмеження швидкості на рахунок і регіон, і він приймає лише один –lookup-attributes фільтр на виклик. Широкі часові вікна займають деякий час, тому звузьте їх, де можна. Для охоплення кожного регіону пройдіть по aws ec2 describe-regions –query ‘Regions[].RegionName’ –output text.
Опція 3: Файли треку з S3
Це шлях для історії понад 90 днів і подій даних:
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
Кожен файл містить масив Records, і рядок jq сплющує всі з них в одну подію на рядок. Організаційні треки додають ідентифікатор організації на шлях: AWSLogs/<org-id>/<account-id>/CloudTrail/…. Якщо ви використовуєте CloudTrail Lake, ви можете виконувати SQL над вашими подіями і зберегти результати замість цього.
Що шукати
| Подія | Чому це важливо |
|---|---|
| ConsoleLogin | Перевірте additionalEventData.MFAUsed, невдачі та IP-адреси джерел, які ви не впізнаєте |
| CreateUser, CreateAccessKey, AttachUserPolicy | Нові ідентичності та ключі: класична стійкість і підвищення привілеїв |
| StopLogging, DeleteTrail, PutEventSelectors | Хтось зменшує те, що видно в CloudTrail |
| AssumeRole з нечітких джерел | Бічний рух між ролями та обліковими записами |
| Сплески errorCode: AccessDenied | Розвідка з викраденими обліковими даними |
| GetSecretValue, GetObject сплески | Доступ до даних; GetObject з’являється лише якщо події даних S3 увімкнені |
Завантажити, очистити та перевірити в LogTotal
- Завантаження. Відкрити logtotal.com та скиньте .jsonl (або .json файл).
- Очистити. [what gets masked: account IDs, ARNs, IPs, access key IDs, usernames]. Look it over before you continue.
- Перевірте.
Коли щось йде не так
| Симптом | Ймовірна причина | Fix |
|---|---|---|
| lookup-events повертає нічого | Неправильний регіон; події IAM зазвичай знаходяться в us-east-1 | Запит до us-east-1, або пройдіть по всіх регіонах |
| Немає нічого старше 90 днів | Збереження історії подій | Використовуйте файли треку в S3 |
| Немає подій GetObject | Події даних S3 не увімкнені на треку | Очікувано; увімкніть їх на майбутнє |
| AccessDenied при читанні файлів треку | Відсутній kms:Decrypt, або політика бакету | Виправте IAM або політику бакету |
| ThrottlingException | обмеження швидкості lookup-events | Менші вікна; дайте CLI повторно спробувати |
FAQ
Чи включає історія подій події даних?
Ні. Тільки події управління. Події даних існують лише якщо трек чи сховище подій було налаштоване для їх запису.
Як швидко з’являються події?
Зазвичай протягом кількох хвилин після виклику API. Файли треку в S3 приходять партіями, тому дуже недавня подія може ще не бути у файлі