概要
過去のCloudTrailログに対してAthenaを使用して解析する機会があったのでこちらの記事にまとめたいと思います。
コンソールからテーブルを作成し、クエリを実行するだけで過去のイベントが簡単に検索できます。
テーブル作成
CloudTrailにコンソール上からアクセスし「イベント履歴」ページを開きます。
Athenaテーブル作成ページが表示されるので
ログ保存バケットを選択し、右下の「テーブル作成」をクリック。
CREATE EXTERNAL TABLE table_name (
eventVersion STRING,
userIdentity STRUCT<
type: STRING,
principalId: STRING,
arn: STRING,
accountId: STRING,
invokedBy: STRING,
accessKeyId: STRING,
userName: STRING,
sessionContext: STRUCT<
attributes: STRUCT<
mfaAuthenticated: STRING,
creationDate: STRING>,
sessionIssuer: STRUCT<
type: STRING,
principalId: STRING,
arn: STRING,
accountId: STRING,
userName: 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
)
COMMENT 'CloudTrail table for cloudtrail-bucket bucket'
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://cloudtrail-bucket/AWSLogs/XXXXXXXXXXXX/CloudTrail/'
TBLPROPERTIES ('classification'='cloudtrail')
※こちらのクエリを直接Athenaに貼り付けても、テーブルの作成はできます。
CREATE EXTERNAL TABLE にテーブルネーム
LOCATION S3に保管しているCloudTrailログのパスを指定
クエリ実行
Athenaを開き、テーブルが作成されているのを確認。
クエリを実行しカラム解析を行う。
よく使うカラム
useridentity
eventtime
eventsource
eventname
awsregion
useragent
requestparameters
カラムの詳細については公式ページの「CloudTrailレコードの詳細」を参考にしてください
https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html
クエリ実行例
SELECT "useridentity","eventtime","eventsource","eventname","awsregion","useragent"
,"requestparameters"
FROM "テーブル名"
WHERE eventName ='CreateStuck(検索したいAPI名)'AND
awsregion ='ap-northeast-1'(検索したいリージョン)AND
eventTime > '2020-12-01T00:00:00Z(検索したい期間)';
上記の例でクエリを実行すると、12月00日以降、東京リージョンで作成されたCloudFromationのスタック作成イベントを検索します。
まとめ
過去のCloudTrailログを検索するのにAthenaはとても便利です。
まずは中身の内容について知ることでより検索の精度が上がると思うのでまずはSELECTで”*”をかけてみて全カラムの内容を確認してみると良いと思います。
参照ページ
AWS CloudTrail ログのクエリ
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/cloudtrail-logs.html