如何使用 Athena 查詢 CloudTrail 日誌中的 AWS Support API 呼叫?

3 分的閱讀內容
0

我想執行 Amazon Athena 查詢來搜尋 AWS CloudTrail 日誌,以尋找 AWS Support 對我的 AWS 帳戶進行的 API 呼叫。

簡短說明

為了協助您解決問題,AWS Support 可能會收集有關您 AWS 資源的安全唯讀中繼資料。AWS Support 使用名為 AWSServiceRoleForSupport 的 AWS Identity and Access Management (IAM) 服務連結角色來收集中繼資料。

若要尋找 AWS Support 對您帳戶發出的 API 呼叫相關資訊,請使用 Athena 查詢 CloudTrail 日誌

解決方法

使用分區投影手動建立 CloudTrail 資料表

即使您對 CloudTrail 資料表進行分割以減少查詢執行時間,CloudTrail 日誌的大小也會隨著時間而增加。針對高度分割資料表執行查詢的規劃時間較長,並且無法快速完成。

為了減少查詢執行時間,請使用分區投影手動建立 CloudTrail 資料表。

例如,以下 CREATE TABLE 陳述式會自動在一個 AWS 區域內的指定時間段內對 CloudTrail 日誌使用分區投影:

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

注意:LOCATIONTBLPROPERTIES 子句中,將 example-bucket 替換為您的儲存貯體名稱,將 account-id 替換為您的帳戶 ID,並將 aws-region 替換為您的區域。對於 projection.timestamp.range,將 2020/01/01 替換為您的開始日期。

若要執行上述查詢並建立分割 CloudTrail 日誌資料表,請完成下列步驟:

  1. 開啟 Athena 主控台
  2. 選擇 New query (新查詢),然後選擇對話方塊以清除查詢範例。
  3. 輸入上述查詢,然後選擇 Run Query (執行查詢)。

如需詳細資訊,請參閱使用分區投影,在 Athena 中為 CloudTrail 日誌建立資料表

在 CloudTrail 日誌資料表中搜尋 AWS Support API 呼叫

以下是可用於在指定時間範圍內,在 CloudTrail 日誌資料表中搜尋 AWS Support 呼叫的查詢範例。範例使用 2025/01/012025/01/07 作為指定的時間範圍。

注意: 在下列範例查詢中,將 default (預設) 值替換為您建立 cloudtrail_logs_pp 資料表的資料庫名稱。

計算 AWS Support API 呼叫次數

以下查詢計算 AWS Support 對您的帳戶發出的 API 呼叫總數:

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

取得所有 AWS Support API 呼叫

以下查詢顯示 AWS Support 對您帳戶進行的所有 API 呼叫:

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

以使用者名稱和事件來源計算 AWS Support API 呼叫次數

以下查詢顯示 AWS Support 對您帳戶進行的每個使用者名稱和事件來源的 API 呼叫總數:

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

取得 AWS Support 對您帳戶進行 API 呼叫的 ARN

以下查詢顯示 AWS Support 對您帳戶進行所有 API 呼叫的 ARN:

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

取得 AWS Support 對您帳戶進行 API 呼叫的主體 ID

以下查詢顯示 AWS Support 對您帳戶發出所有 API 呼叫的主體 ID:

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

相關資訊

新增和移除 IAM 身分權限

Athena 中的身分和存取管理

如何使用分區投影來為 Athena 查詢建立 CloudTrail 資料表?

AWS 官方
AWS 官方已更新 2 個月前