

# Exemplo de consultas de log do CloudTrail
<a name="query-examples-cloudtrail-logs"></a>

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](https://aws.amazon.com/blogs/big-data/aws-cloudtrail-and-amazon-athena-dive-deep-to-analyze-security-compliance-and-operational-activity/).

## Consulta de campos aninhados nos logs do CloudTrail
<a name="cloudtrail-logs-nested-fields"></a>

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 [replace](https://prestodb.io/docs/current/functions/string.html#replace) remove a substring inicial `arn: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](filtering-arrays.md).

## Dicas para consultar logs do CloudTrail
<a name="tips-for-querying-cloudtrail-logs"></a>

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](create-cloudtrail-table.md). 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 obter mais informações, consulte [Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual](create-cloudtrail-table.md).

  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](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html). 

  Se a consulta incluir campos em formatos JSON, como `STRUCT`, extraia dados de JSON. Para obter mais informações, consulte [Extrair dados JSON de strings](extracting-data-from-JSON.md). 

  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.