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 フィールドの一部を処理しません。 -
(オプション) テーブルに必要のないフィールドをすべて削除します。特定の列のセットのみを読み込む必要がある場合は、テーブル定義で他の列を除外できます。
-
クエリするログデータが含まれる Amazon S3 バケットをポイントするように
s3://amzn-s3-demo-bucket/AWSLogs/
を変更します。例では、特定のアカウントに関するログの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 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/
'