Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual - Amazon Athena

Criar uma tabela de logs do CloudTrail no Athena usando particionamento manual

É possível criar manualmente tabelas de arquivos de log do CloudTrail no console do Athena e executar consultas no Athena.

Para criar uma tabela do Athena para uma trilha do CloudTrail no console do Athena
  1. Copie e cole a instrução DDL a seguir em um editor de consultas do console do Athena e modifique-a de acordo com seus requisitos. Observe que, como os arquivos de log do CloudTrail não são um rastreamento de pilha ordenada de chamadas de API públicas, os campos dos arquivos de log não aparecem em nenhuma ordem específica.

    CREATE EXTERNAL TABLE cloudtrail_logs ( eventversion STRING, useridentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, username:STRING, onbehalfof: STRUCT< userid: STRING, identitystorearn: STRING>, sessioncontext:STRUCT< attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>, sessionissuer:STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, username:STRING>, ec2roledelivery:string, webidfederationdata: STRUCT< federatedprovider: STRING, attributes: map<string,string>> > >, eventtime STRING, eventsource STRING, eventname STRING, awsregion STRING, sourceipaddress STRING, useragent STRING, errorcode STRING, errormessage STRING, requestparameters STRING, responseelements STRING, additionaleventdata STRING, requestid STRING, eventid STRING, resources ARRAY<STRUCT< arn:STRING, accountid:STRING, type:STRING>>, eventtype STRING, apiversion STRING, readonly STRING, recipientaccountid STRING, serviceeventdetails STRING, sharedeventid STRING, vpcendpointid STRING, vpcendpointaccountid STRING, eventcategory STRING, addendum STRUCT< reason:STRING, updatedfields:STRING, originalrequestid:STRING, originaleventid:STRING>, sessioncredentialfromconsole STRING, edgedevicedetails STRING, tlsdetails STRUCT< tlsversion:STRING, ciphersuite:STRING, clientprovidedhostheader:STRING> ) PARTITIONED BY (region string, year string, month string, day string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/';
    nota

    Sugerimos usar o org.apache.hive.hcatalog.data.JsonSerDe exibido no exemplo. Embora exista um com.amazon.emr.hive.serde.CloudTrailSerde, no momento ele não processa alguns dos campos mais recentes do CloudTrail.

  2. (Opcional) Remova quaisquer campos não obrigatórios para a tabela. Se for necessário ler somente um determinado conjunto de colunas, sua definição de tabela poderá excluir as outras colunas.

  3. Modifique s3://amzn-s3-demo-bucket/AWSLogs/Account_ID/ para apontar para o bucket do Amazon S3 que contém os dados de log que você deseja consultar. O exemplo usa um valor LOCATION de logs para uma determinada conta, mas você pode usar o grau de especificidade adequado ao aplicativo. Por exemplo:

    • Para analisar dados de várias contas, você pode reverter o especificador LOCATION para indicar todos os AWSLogs usando LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/'.

    • Para analisar dados de uma data, conta e região específica, use LOCATION 's3://amzn-s3-demo-bucket/123456789012/CloudTrail/us-east-1/2016/03/14/'.

    • Para analisar dados de atividade de rede em vez de eventos de gerenciamento, substitua /CloudTrail/ na cláusula LOCATION por /CloudTrail-NetworkActivity/.

    O uso do nível mais alto na hierarquia de objetos proporciona maior flexibilidade ao consultar usando o Athena.

  4. Verifique se os campos estão listados corretamente. Para obter mais informações sobre a lista completa de campos em um registro do CloudTrail, consulte Conteúdo do registro do CloudTrail.

    A declaração de exemplo CREATE TABLE na Etapa 1 usa Hive JSON SerDe. No exemplo, os campos requestparameters, responseelements e additionaleventdata são listados como tipo STRING na consulta, mas são tipos de dados STRUCT usados em JSON. Portanto, para obter dados desses campos, use funções JSON_EXTRACT. Para ter mais informações, consulte Extrair dados JSON de strings. Para melhorias de performance, o exemplo particiona os dados por Região da AWS, ano, mês e dia.

  5. Execute a instrução CREATE TABLE no console do Athena.

  6. Use o comando ALTER TABLE ADD PARTITION a fim de carregar as partições para que você consiga consultá-las, conforme o exemplo a seguir.

    ALTER TABLE table_name ADD PARTITION (region='us-east-1', year='2019', month='02', day='01') LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/CloudTrail/us-east-1/2019/02/01/'