Salta al contenuto

Come posso utilizzare Athena per eseguire quey sui miei log CloudTrail e individuare le chiamate API del Supporto AWS?

5 minuti di lettura
0

Desidero eseguire query su Amazon Athena per cercare nei miei log di AWS CloudTrail le chiamate API effettuate dal Supporto AWS al mio account AWS.

Breve descrizione

Per aiutarti a risolvere il problema, il Supporto AWS potrebbe raccogliere metadati sicuri di sola lettura sulle tue risorse AWS. Il Supporto AWS utilizza un ruolo collegato al servizio AWS Identity and Access Management (AWS IAM) denominato AWSServiceRoleForSupport per raccogliere i metadati.

Per informazioni sulle chiamate API effettuate dal Supporto AWS al tuo account, utilizza Athena per eseguire query sui log CloudTrail.

Risoluzione

Utilizza la proiezione delle partizioni per creare manualmente una tabella CloudTrail

Anche quando partizioni la tabella CloudTrail per ridurre il tempo di esecuzione delle query, i log CloudTrail possono aumentare di dimensioni nel tempo. Le query eseguite su una tabella altamente partizionata richiedono tempi di pianificazione lunghi e non vengono completate rapidamente.

Per ridurre i tempi di esecuzione delle query, utilizza la proiezione delle partizioni per creare manualmente una tabella CloudTrail.

Ad esempio, la seguente istruzione CREATE TABLE utilizza automaticamente la proiezione delle partizioni sui log CloudTrail entro un determinato arco di tempo in una Regione 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}')

Nota: nelle clausole LOCATION e TBLPROPERTIES, sostituisci example-bucket con il nome del tuo bucket, account-id con l'ID del tuo account e aws-region con la tua Regione. Per projection.timestamp.range, sostituisci 2020/01/01 con la tua data di inizio.

Per eseguire la query precedente e creare una tabella dei log CloudTrail partizionata, completa i seguenti passaggi:

  1. Apri la console Athena.
  2. Seleziona Nuova query, quindi scegli la finestra di dialogo per cancellare l'esempio di query.
  3. Inserisci la query precedente, quindi scegli Esegui query.

Per ulteriori informazioni, consulta Crea la tabella per i log CloudTrail in Athena usando la proiezione delle partizioni.

Cerca nella tabella dei log CloudTrail le chiamate API del Supporto AWS

Di seguito sono riportati alcuni esempi di query che puoi utilizzare per cercare le chiamate del Supporto AWS nella tabella dei log CloudTrail durante un intervallo di tempo specificato. Gli esempi utilizzano dal 2025/01/01 al 2025/01/07 come intervallo di tempo specificato.

Nota: nei seguenti esempi di query, sostituisci default con il nome del database in cui hai creato la tabella cloudtrail_logs_pp.

Conta il numero di chiamate API del Supporto AWS

La seguente query conta il numero totale di chiamate API effettuate dal Supporto AWS al tuo account:

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

Ottieni tutte le chiamate API del Supporto AWS

La seguente query mostra tutte le chiamate API effettuate dal Supporto AWS al tuo account:

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

Conta il numero di chiamate API del Supporto AWS per nome utente e origine dell'evento

La seguente query mostra il numero totale di chiamate API per ogni nome utente e origine di eventi che il Supporto AWS ha effettuato al tuo account:

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

Ottieni gli ARN per le chiamate API effettuate dal Supporto AWS al tuo account

La seguente query mostra l'ARN per tutte le chiamate API effettuate dal Supporto AWS al tuo account:

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

Ottieni gli ID principali per le chiamate API che il Supporto AWS ha effettuato al tuo account

La seguente query mostra gli ID principali per tutte le chiamate API effettuate dal Supporto AWS al tuo account:

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

Informazioni correlate

Aggiunta e rimozione di autorizzazioni per identità IAM

Gestione dell'identità e dell'accesso in Athena

Come posso utilizzare la proiezione delle partizioni per creare tabelle CloudTrail per le query con Athena?