使用手動分割在 Athena 中建立 CloudTrail 日誌的資料表 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用手動分割在 Athena 中建立 CloudTrail 日誌的資料表

您可以在 Athena 主控台中手動建立 CloudTrail 日誌檔案的資料表,然後在 Athena 中執行查詢。

若要使用 Athena 主控台為 CloudTrail 線索建立 Athena 資料表
  1. 複製下列 DDL 陳述式,並將其貼到 Athena 主控台查詢編輯器,然後根據您的要求進行修改。請注意,由於 CloudTrail 日誌檔案並非公有 API 呼叫的堆疊追蹤排序,因此日誌檔案中的欄位不會以任何特定順序出現。

    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/';
    注意

    我們建議使用範例中顯示的 org.apache.hive.hcatalog.data.JsonSerDe。雖然存在 com.amazon.emr.hive.serde.CloudTrailSerde,但目前不會處理一些較新的 CloudTrail 欄位。

  2. (選用) 移除資料表不再需要的任何欄位。如果您只需要讀取特定的資料欄集,則您的資料表定義可排除其他資料欄。

  3. 修改 s3://amzn-s3-demo-bucket/AWSLogs/Account_ID/ 來指向包含您要查詢的日誌資料的 Amazon S3 儲存貯體。範例中使用特定帳戶日誌的 LOCATION 值,但您可以使用適合您應用程式的具體程度。例如:

    • 若要分析多個帳戶的資料,您可以復原 LOCATION 指標,使用 AWSLogs 來指定所有 LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/'

    • 若要分析特定日期、帳戶和區域的資料,請使用 LOCATION 's3://amzn-s3-demo-bucket/123456789012/CloudTrail/us-east-1/2016/03/14/'.

    • 若要分析網路活動資料,而不是管理事件,請將 LOCATION 子句中的 /CloudTrail/ 取代為 /CloudTrail-NetworkActivity/

    當您使用 Athena 進行查詢時,使用物件階層的最高層級可給您最大的靈活性。

  4. 確認列出的欄位正確。如需有關 CloudTrail 記錄中欄位的完整清單的詳細資訊,請參閱 CloudTrail 記錄內容

    步驟 1 中的範例 CREATE TABLE 陳述式使用 Hive JSON SerDe。在這個範例中,欄位 requestparametersresponseelementsadditionaleventdata 在查詢中列為類型 STRING,但採用 JSON 格式時為 STRUCT 資料類型。因此,若要取得這些欄位的資料,請使用 JSON_EXTRACT 函數。如需更多詳細資訊,請參閱 從字串擷取 JSON 資料。為了改善效能,本範例會依 AWS 區域、年份、月份和日來分割資料。

  5. 在 Athena 主控台執行 CREATE TABLE 陳述式。

  6. 使用 ALTER TABLE ADD PARTITION 命令載入分割區,以便進行查詢,如下列範例所示。

    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/'