Athenaを利用してCloudTrailのログを検索する


概要

過去のCloudTrailログに対してAthenaを使用して解析する機会があったのでこちらの記事にまとめたいと思います。
コンソールからテーブルを作成し、クエリを実行するだけで過去のイベントが簡単に検索できます。

テーブル作成

CloudTrailにコンソール上からアクセスし「イベント履歴」ページを開きます。

「Athenaテーブル作成」ボタンをクリック。

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