Athena não armazena logs por si só. Ela consulta arquivos de log no S3, como CloudTrail, VPC Flow Logs, logs de balanceadores de carga e WAF, por meio de tabelas que você define. Os resultados normais das consultas são salvos como CSV no seu bucket de resultados. Para obter JSON em vez disso, envolva a consulta em UNLOAD … WITH (format = ‘JSON’): Athena escreve JSON delimitado por novas linhas em um prefixo do S3, e você faz o download.
Muitas equipes da AWS mantêm meses de logs no S3 e os consultam com o Athena, em vez de enviar tudo para um SIEM. A Prime Core tem mais de 24.000 regras de detecção exclusivas, mapeadas para 676 técnicas do MITRE ATT&CK. Abaixo está como obter um recorte, sanitizá-lo e investigá-lo gratuitamente no LogTotal.
Antes de começar
Permissões. Você precisa executar consultas no Athena (athena:StartQueryExecution e relacionadas), ler as definições de tabelas no Glue, ler o bucket de origem e escrever em um bucket de exportação. Adicione kms:Decrypt se os logs estiverem criptografados com KMS.
Saiba a tabela e suas partições. Uma tabela CloudTrail é geralmente particionada por região e data, seja com projeção de partição ou com partições que você adicionou. O Athena cobra por dados digitalizados, então filtre em partições todas as vezes. Uma consulta sem elas pode digitalizar anos de logs.
Um grupo de trabalho. Athena executa consultas em um grupo de trabalho com uma localização de resultados. UNLOAD escreve para seu próprio destino, mas o grupo de trabalho ainda precisa ser configurado.
Exportar com UNLOAD
UNLOAD (
SELECT *
FROM cloudtrail_logs
WHERE region = 'eu-west-1'
AND day = '2026/10/19'
AND useridentity.arn LIKE '%suspicious-user%'
)
PARA 's3://my-athena-exports/ct-1019/'
COM (format = 'JSON', compression = 'NONE')
Adapte as colunas de partição (região, dia) à definição da sua tabela. O prefixo de destino deve estar vazio.
Da linha de comando:
QID=$(aws athena start-query-execution –work-group primary
–query-string “$(cat unload.sql)”
–query ‘QueryExecutionId’ –output text)
# aguarde até 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 lida tanto com saída compactada quanto não compactada, caso a compressão tenha sido deixada no padrão. Se a consulta falhar, o loop de espera nunca termina. Verifique FAILED também se você fizer script disso regularmente.
Por que não get-query-results? Funciona, mas retorna linhas como listas de strings, 1.000 por página, que você precisa então recompor em objetos. UNLOAD fornece JSON limpo em um único passo.
Carregue, sanitize e revise no LogTotal
- Upload. Abra logtotal.com e solte o arquivo .jsonl.
- Sanitizar.
- Revisar.
Quando dá errado
| Sintoma | Causa provável | Fix |
|---|---|---|
| Consulta varre terabytes | Nenhum filtro de partição | Filtre nas colunas de partição |
| Erro sobre a localização de saída | O prefixo de destino não está vazio | Use um novo prefixo |
| Acesso negado | Permissão S3, Glue ou KMS ausente | Verifique cada um; KMS é o suspeito habitual |
| Zero linhas | Partições não carregadas, ou formato de partição errado | Verifique a projeção de partição ou execute MSCK REPAIR TABLE |
| Os arquivos de saída não abrem como texto | Compressão GZIP | Use zcat, ou defina compressão = ‘NONE’ |
FAQ
Isso é o mesmo que Amazon Security Lake?
Security Lake também usa o Athena, mas com suas próprias tabelas OCSF e permissões do Lake Formation.
Posso exportar arquivos brutos do CloudTrail?
Sim. Se você só precisa de dias inteiros, copiar os arquivos do S3 é mais simples. O Athena mostra seu valor quando você precisa filtrar.