O exemplo a seguir mostra a parte de uma consulta que retorna todas as solicitações anônimas (não assinadas) da tabela criada para os logs de eventos do CloudTrail. Essa consulta seleciona as solicitações em que useridentity.accountid
são anônimos e useridentity.arn
não é especificado:
SELECT *
FROM cloudtrail_logs
WHERE
eventsource = 's3.amazonaws.com' AND
eventname in ('GetObject') AND
useridentity.accountid = 'anonymous' AND
useridentity.arn IS NULL AND
requestparameters LIKE '%[your bucket name ]%';
Para obter mais informações, consulte a publicação no Blog de Big Data da AWS, Análise de segurança, conformidade e atividades operacionais usando o AWS CloudTrail e o Amazon Athena
Consulta de campos aninhados nos logs do CloudTrail
Como os campos userIdentity
e resources
são tipos de dados aninhados, é necessário um tratamento especial para consultá-los.
O objeto userIdentity
consiste em tipos STRUCT
aninhados. É possível consultá-los usando um ponto para separar os campos, como no seguinte exemplo:
SELECT
eventsource,
eventname,
useridentity.sessioncontext.attributes.creationdate,
useridentity.sessioncontext.sessionissuer.arn
FROM cloudtrail_logs
WHERE useridentity.sessioncontext.sessionissuer.arn IS NOT NULL
ORDER BY eventsource, eventname
LIMIT 10
O campo resources
é um array de objetos STRUCT
. Para esses arrays, use CROSS JOIN UNNEST
para remover o aninhamento do array de modo que você possa consultar seus objetos.
O exemplo a seguir retorna todas as linhas em que o ARN do recurso termina com example/datafile.txt
. Para legibilidade, a função replacearn:aws:s3:::
do ARN.
SELECT
awsregion,
replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as s3_resource,
eventname,
eventtime,
useragent
FROM cloudtrail_logs t
CROSS JOIN UNNEST(t.resources) unnested (resources_entry)
WHERE unnested.resources_entry.ARN LIKE '%example/datafile.txt'
ORDER BY eventtime
Veja a seguir exemplos de consultas de eventos DeleteBucket
. A consulta extrai do objeto resources
o nome do bucket e o ID da conta à qual o bucket pertence.
SELECT
awsregion,
replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as deleted_bucket,
eventtime AS time_deleted,
useridentity.username,
unnested.resources_entry.accountid as bucket_acct_id
FROM cloudtrail_logs t
CROSS JOIN UNNEST(t.resources) unnested (resources_entry)
WHERE eventname = 'DeleteBucket'
ORDER BY eventtime
Para obter mais informações sobre como remover o aninhamento, consulte Filtrar matrizes.
Dicas para consultar logs do CloudTrail
Considere o seguinte ao explorar dados do log do CloudTrail:
-
Antes de consultar os logs, verifique se a tabela de logs tem a mesma aparência da tabela em Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual. Se não for a primeira tabela, exclua a tabela existente usando o seguinte comando:
DROP TABLE cloudtrail_logs
. -
Depois de ignorar a tabela existente, recrie-a. Para ter mais informações, consulte Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual.
Verifique se os campos na consulta do Athena estão listados corretamente. Para obter informações sobre a lista completa de campos em um registro do CloudTrail, consulte Conteúdo do registro do CloudTrail.
Se a consulta incluir campos em formatos JSON, como
STRUCT
, extraia dados de JSON. Para ter mais informações, consulte Extrair dados JSON de strings.Algumas sugestões para realizar consultas em sua tabela do CloudTrail:
-
Comece observando quais usuários do chamaram quais operações da API e de quais endereços IP de origem.
-
Use a consulta SQL básica a seguir como o modelo. Cole a consulta no console do Athena e execute-a.
SELECT useridentity.arn, eventname, sourceipaddress, eventtime FROM cloudtrail_logs LIMIT 100;
-
Modifique a consulta para explorar ainda mais seus dados.
-
Para melhorar a performance, inclua a cláusula
LIMIT
para retornar um subconjunto especificado de linhas.