本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以在 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
指標,使用LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/'
來指定所有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
陳述式使用 蜂巢 JSON SerDe。在範例中,欄位requestparameters
、responseelements
和additionaleventdata
會列為查詢STRING
中的類型,但 中使用的STRUCT
資料類型是 JSON。因此,若要取得這些欄位的資料,請使用JSON_EXTRACT
函數。如需詳細資訊,請參閱從字串擷取JSON資料。為了改善效能,範例會依 AWS 區域、年份、月份和日期分割資料。 -
在 Athena 主控台執行
CREATE TABLE
陳述式。 -
使用 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/
'