本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用手動分割在 Athena 中建立 CloudTrail 日誌的資料表
您可以在 Athena 主控台中手動建立 CloudTrail 日誌檔案的資料表,然後在 Athena 中執行查詢。
若要使用 Athena 主控台為 CloudTrail 線索建立 Athena 資料表
-
複製下列 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 欄位。 -
(選用) 移除資料表不再需要的任何欄位。如果您只需要讀取特定的資料欄集,則您的資料表定義可排除其他資料欄。
-
修改
s3://amzn-s3-demo-bucket/AWSLogs/來指向包含您要查詢的日誌資料的 Amazon S3 儲存貯體。範例中使用特定帳戶日誌的Account_ID/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 進行查詢時,使用物件階層的最高層級可給您最大的靈活性。
-
-
確認列出的欄位正確。如需有關 CloudTrail 記錄中欄位的完整清單的詳細資訊,請參閱 CloudTrail 記錄內容。
步驟 1 中的範例
CREATE TABLE陳述式使用 Hive JSON SerDe。在這個範例中,欄位requestparameters、responseelements和additionaleventdata在查詢中列為類型STRING,但採用 JSON 格式時為STRUCT資料類型。因此,若要取得這些欄位的資料,請使用JSON_EXTRACT函數。如需更多詳細資訊,請參閱 從字串擷取 JSON 資料。為了改善效能,本範例會依 AWS 區域、年份、月份和日來分割資料。 -
在 Athena 主控台執行
CREATE TABLE陳述式。 -
使用 ALTER TABLE ADD PARTITION 命令載入分割區,以便進行查詢,如下列範例所示。
ALTER TABLEtable_nameADD 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/'