Athena не зберігає логи сама. Вона запитує лог-файли в S3, такі як CloudTrail, VPC Flow Logs, логи балансувальника навантаження та WAF, через таблиці, які ви визначаєте. Результати звичайних запитів зберігаються як CSV у вашому результуючому бакеті. Щоб отримати JSON, використовуйте запит у UNLOAD … WITH (format = ‘JSON’): Athena записує JSON, розділений новими рядками, у префікс S3, і ви його завантажуєте.
Багато команд AWS зберігають місяці логів у S3 та запитують їх за допомогою Athena, а не переводять все до SIEM. Prime Core має більше ніж 24 000 унікальних правил виявлення, які відповідають 676 технікам MITRE ATT&CK. Нижче наведено, як отримати зріз, очистити його та провести безкоштовне розслідування в LogTotal.
Перш ніж ви почнете
Дозволи. Вам потрібно запускати запити Athena (athena:StartQueryExecution та інші), читати визначення таблиць у Glue, читати початковий бакет та записувати в експортувальний бакет. Додайте kms:Decrypt, якщо логи зашифровані за допомогою KMS.
Знати таблицю та її розділення. Таблиця CloudTrail зазвичай розділена за регіонами та датами, або із проекцією розділів, або з розділами, які ви додали. Athena стягує плату за обсяг відсканованих даних, тому кожного разу фільтруйте за розділами. Запит без них може відсканувати логів за багато років.
Робоча група. Athena запускає запити у робочій групі з результатами локалізації. UNLOAD записує до своєї цільової точки, але робоча група все ще повинна бути налаштована.
Експорт з 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')
Адаптуйте стовпці розділів (region, day) до визначення вашої таблиці. Цільовий префікс повинен бути порожнім.
З командного рядка:
QID=$(aws athena start-query-execution –work-group primary
–query-string “$(cat unload.sql)”
–query ‘QueryExecutionId’ –output text)
# чекати до 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 обробляє як стиснуті, так і не стиснуті виходи, на випадок, якщо стискування залишилось за замовчуванням. Якщо запит завершується невдало, цикл очікування ніколи не завершиться. Перевірте на FAILED також, якщо ви регулярно запускаєте цей скрипт.
Чому не get-query-results? Це працює, але повертає рядки у вигляді списків рядків, 1 000 на сторінку, які потім ви повинні об’єднати назад в об’єкти. UNLOAD дає вам чистий JSON за один крок.
Завантажте, очистіть та перегляньте в LogTotal
- Завантажте. Відкрийте logtotal.com і скиньте файл .jsonl.
- Очистіть.
- Перегляньте.
Коли все йде не так
| Симптом | Ймовірна причина | Fix |
|---|---|---|
| Запит сканує терабайти | Немає фільтру розділів | Фільтруйте за стовпцями розділів |
| Помилка про місце виведення | Предзаповнений цільовий префікс | Використовуйте новий префікс |
| Доступ заборонено | Відсутні дозволи S3, Glue або KMS | Перевірте кожен із них; KMS зазвичай підозрілий |
| Нуль рядків | Розділи не завантажені, або хибний формат розділів | Перевірте проекцію розділів або запустіть MSCK REPAIR TABLE |
| Файли виведення не відкриваються як текст | Стиснення GZIP | Використовуйте zcat або встановіть compression = ‘NONE’ |
FAQ
Чи це те саме, що Amazon Security Lake?
Security Lake також використовує Athena, але з власними OCSF таблицями та дозволами Lake Formation.
Чи можу я експортувати сирі файли CloudTrail замість цього?
Так. Якщо вам потрібні лише цілі дні, простіше скопіювати файли з S3. Athena окупається, коли вам потрібно фільтрувати.