Ir para o conteúdo

Como uso o Athena para consultar meus logs do CloudTrail para chamadas de API do AWS Support?

5 minuto de leitura
0

Quero executar consultas do Amazon Athena para pesquisar meus logs do AWS CloudTrail em busca de chamadas de API que o AWS Support fez para minha conta da AWS.

Breve descrição

Para ajudar você a resolver seu problema, o AWS Support pode reunir metadados seguros somente para leitura sobre seus recursos da AWS. O AWS Support usa um perfil vinculado ao serviço do AWS Identity and Access Management (AWS IAM) chamado AWSServiceRoleForSupport para coletar os metadados.

Para encontrar informações sobre as chamadas de API que o AWS Support faz para sua conta, use o Athena para consultar seus logs do CloudTrail.

Resolução

Use a projeção de partição para criar manualmente uma tabela do CloudTrail

Mesmo quando você particiona a tabela do CloudTrail para reduzir o runtime das consultas, os logs do CloudTrail podem aumentar de tamanho com o tempo. Consultas executadas em uma tabela altamente particionada têm um tempo de planejamento alto e não são concluídas rapidamente.

Para reduzir os runtimes das consultas, use a projeção de partição para criar manualmente uma tabela do CloudTrail.

Por exemplo, a seguinte instrução CREATE TABLE usa automaticamente a projeção de partição nos logs do CloudTrail dentro de um período de tempo especificado em uma região da AWS:

CREATE EXTERNAL TABLE cloudtrail_logs_pp(  
    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,  
    readonly STRING,  
    resources ARRAY<STRUCT<  
        arn: STRING,  
        accountid: STRING,  
        type: STRING>>,  
    eventtype STRING,  
    apiversion 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 (  
   `timestamp` 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://example-bucket/AWSLogs/account-id/CloudTrail/aws-region'  
TBLPROPERTIES (  
  'projection.enabled'='true',   
  'projection.timestamp.format'='yyyy/MM/dd',   
  'projection.timestamp.interval'='1',   
  'projection.timestamp.interval.unit'='DAYS',   
  'projection.timestamp.range'='2020/01/01,NOW',   
  'projection.timestamp.type'='date',   
  'storage.location.template'='s3://example-bucket/AWSLogs/account-id/CloudTrail/aws-region/${timestamp}')

Observação: Nas cláusulas LOCATION e TBLPROPERTIES, substitua example-bucket pelo nome do bucket, account-id pelo ID da sua conta e aws-region pela sua região. Para projection.timestamp.range, substitua 2020/01/01 pela sua data de início.

Para executar a consulta anterior e criar uma tabela de logs particionada do CloudTrail, conclua as seguintes etapas:

  1. Abra o console do Athena.
  2. Escolha Nova consulta e, em seguida, escolha a caixa de diálogo para apagar a consulta de exemplo.
  3. Insira a consulta anterior e escolha Executar consulta.

Para obter mais informações, consulte Criar a tabela para os logs do CloudTrail no Athena usando a projeção de partição.

Pesquisar na tabela de logs do CloudTrail as chamadas de API do AWS Support

A seguir estão exemplos de consultas que é possível usar para pesquisar chamadas do AWS Support na tabela de logs do CloudTrail durante um intervalo especificado. Os exemplos usam 2025/01/01 a 2025/01/07 como o intervalo especificado.

Observação: Nos exemplos de consultas a seguir, substitua default pelo nome do banco de dados em que você criou a tabela cloudtrail_logs_pp.

Conte o número de chamadas de API do AWS Support

A consulta a seguir conta o número total de chamadas de API que o AWS Support fez para sua conta:

SELECT COUNT(*)  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND sourceipaddress = 'support.amazonaws.com'

Receba todas as chamadas de API do AWS Support

A consulta a seguir mostra todas as chamadas de API que o AWS Support fez para sua conta:

SELECT *  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND sourceipaddress = 'support.amazonaws.com'  
 LIMIT 10

Conte o número de chamadas de API do AWS Support por nome de usuário e origem do evento

A consulta a seguir mostra o número total de chamadas de API para cada nome de usuário e origem de evento que o AWS Support fez em sua conta:

SELECT useridentity.sessioncontext.sessionissuer.username,  
       eventsource,  
       COUNT(*) AS number_of_event  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND sourceipaddress = 'support.amazonaws.com'  
 GROUP BY useridentity.sessioncontext.sessionissuer.username,  
       eventsource  
 ORDER BY number_of_event DESC

Obtenha os ARNs das chamadas de API que o AWS Support fez para sua conta

A consulta a seguir mostra o ARN de todas as chamadas de API que o AWS Support fez para a sua conta:

SELECT useridentity.arn  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND regexp_like(useridentity.arn, 'AWSServiceRoleForSupport')  
 LIMIT 10

Obtenha os IDs das entidades principais das chamadas de API que o AWS Support fez para a sua conta

A consulta a seguir mostra os IDs das entidades principais de todas as chamadas de API que o AWS Support fez para a sua conta:

SELECT useridentity.principalid  
  FROM "default"."cloudtrail_logs_pp"  
WHERE timestamp <= '2025/01/07'  
      AND timestamp > '2025/01/01'  
      AND regexp_like(useridentity.arn, 'AWSServiceRoleForSupport')  
LIMIT 10

Informações relacionadas

Adicionar e remover permissões de identidade do IAM

Gerenciamento de identidade e acesso no Athena

Como posso usar a projeção de partição para criar tabelas do CloudTrail para consultas do Athena?

AWS OFICIALAtualizada há um ano