Direkt zum Inhalt

Wie verwende ich Athena, um meine CloudTrail-Protokolle nach AWS Support-API-Aufrufen abzufragen?

Lesedauer: 4 Minute
0

Ich möchte Amazon Athena-Abfragen ausführen, um meine AWS CloudTrail-Protokolle nach API-Aufrufen zu durchsuchen, die AWS Support an mein AWS-Konto getätigt hat.

Kurzbeschreibung

Um dir bei der Lösung deines Problems zu helfen, erfasst der AWS-Support möglicherweise sichere, schreibgeschützte Metadaten über deine AWS-Ressourcen. AWS Support verwendet eine mit dem AWS Identity and Access Management (IAM)-Service verknüpfte Rolle namens AWSServiceRoleForSupport, um die Metadaten zu erfassen.

Um Informationen zu den API-Aufrufen zu finden, die AWS Support an dein Konto tätigt, verwende Athena, um deine CloudTrail-Protokolle abzufragen.

Lösung

Verwende die Partitionsprojektion, um manuell eine CloudTrail-Tabelle zu erstellen

Selbst wenn du die CloudTrail-Tabelle partitionierst, um die Abfragelaufzeit zu reduzieren, können CloudTrail-Protokolle im Laufe der Zeit an Größe zunehmen. Abfragen, die du für eine stark partitionierte Tabelle ausführst, haben eine hohe Planungszeit und werden nicht schnell abgeschlossen.

Um die Abfragelaufzeiten zu reduzieren, verwende die Partitionsprojektion, um manuell eine CloudTrail-Tabelle zu erstellen.

Die folgende CREATE TABLE-Anweisung verwendet beispielsweise automatisch die Partitionsprojektion für CloudTrail-Logs innerhalb eines bestimmten Zeitraums in einer AWS-Region:

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}')

Hinweis: Ersetze in den Klauseln LOCATION und TBLPROPERTIES example-bucket durch deinen Bucket-Namen, account-id durch deine Konto-ID und aws-region durch deine Region. Ersetze für projection.timestamp.range 2020/01/01 durch dein Startdatum.

Gehe wie folgt vor, um die vorherige Abfrage auszuführen und eine partitionierte CloudTrail-Protokolltabelle zu erstellen:

  1. Öffne die Athena-Konsole.
  2. Wähle Neue Abfrage aus und wähle dann das Dialogfeld aus, um die Beispielabfrage zu löschen.
  3. Gib die vorhergehende Abfrage ein und wähle dann Abfrage ausführen aus.

Weitere Informationen findest du unter Tabelle für CloudTrail-Protokolle in Athena mithilfe der Partitionsprojektion erstellen.

Durchsuche die CloudTrail-Protokolltabelle nach AWS Support-API-Aufrufen

Im Folgenden findest du Beispielabfragen, mit denen du in der CloudTrail-Protokolltabelle nach AWS Support-Aurufen während eines bestimmten Zeitraums suchen kannst. In den Beispielen wird der Zeitraum 2025/01/01 bis 2025/01/07 als spezifizierter Zeitraum verwendet.

Hinweis: Ersetze in den folgenden Beispielabfragen default durch den Namen der Datenbank, in der du die Tabelle cloudtrail_logs_pp erstellt hast.

Zähle die Anzahl der AWS Support-API-Aufrufe

Die folgende Abfrage zählt die Gesamtzahl der API-Aufrufe, die AWS Support für dein Konto getätigt hat:

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

Rufe alle AWS-Support-API-Aufrufe ab

Die folgende Abfrage zeigt alle API-Aufrufe, die AWS Support an dein Konto getätigt hat:

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

Zähle die Anzahl der AWS Support-API-Aufrufe nach Benutzername und Ereignisquelle

Die folgende Abfrage zeigt die Gesamtzahl der API-Aufrufe für jeden Benutzernamen und jede Ereignisquelle, die AWS Support für dein Konto getätigt hat:

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

Rufe die ARNs für API-Aufrufe ab, die AWS Support für dein Konto getätigt hat

Die folgende Abfrage zeigt den ARN für alle API-Aufrufe, die AWS Support an dein Konto getätigt hat:

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

Rufe die Prinzipal-IDs für API-Aufrufe ab, die AWS Support für dein Konto getätigt hat

Die folgende Abfrage zeigt die Prinzipal-IDs für alle API-Aufrufe, die AWS Support an dein Konto getätigt hat:

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

Ähnliche Informationen

Hinzufügen und Entfernen von IAM-Identitätsberechtigungen

Identitäts- und Zugangsmanagement in Athena

Wie kann ich die Partitionsprojektion verwenden, um CloudTrail-Tabellen für Athena-Abfragen zu erstellen?

AWS OFFICIALAktualisiert vor einem Jahr