継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

DuckDB で CloudTrail のログにクエリしてみる

タダです.

前回 DuckDB CLI をセットアップしました.今回は CloudTrail ログを分析してみます.

sadayoshi-tada.hatenablog.com

S3 に入っているログからテーブルを作る

こちらの記事を参照させていただいてテーブルを作ってみました.

D CREATE TABLE trail_log_20170424 AS
    WITH raw_data AS (
        SELECT *
        FROM read_json(
            's3://[CloudTrail ログパス]',
            maximum_depth=2
        )
    )
    SELECT unnest(Records) AS Event
    FROM raw_data;
D show tables;
┌─────────────────────────────┐
│            name             │
│           varchar           │
├─────────────────────────────┤
│ trail_log_20170427          │
└─────────────────────────────┘

より分析をしやすいようにフィールドを追加したテーブルを用意したらだいぶ見通しが良くなりました.

select * from trail_log_detailed_20170424 limit 10;
┌──────────────┬──────────────────────┬────────────────────┬─────────────────┬────────────────┬───┬─────────────────┬────────────────────┬───────────────┬────────────┬─────────────┬──────────────────────┐
│ eventVersion │      eventTime       │    eventSource     │    eventName    │   awsRegion    │ … │ managementEvent │ recipientAccountId │ eventCategory │ tlsVersion │ cipherSuite │ clientProvidedHost…  │
│   varchar    │       varchar        │      varchar       │     varchar     │    varchar     │   │     varchar     │      varchar       │    varchar    │  varchar   │   varchar   │       varchar        │
├──────────────┼──────────────────────┼────────────────────┼─────────────────┼────────────────┼───┼─────────────────┼────────────────────┼───────────────┼────────────┼─────────────┼──────────────────────┤
│ 1.04         │ 2017-04-27T00:16:43Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.04         │ 2017-04-27T00:20:31Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.05         │ 2017-04-27T00:20:30Z │ sts.amazonaws.com  │ AssumeRole      │ us-east-1      │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.04         │ 2017-04-27T00:21:02Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.04         │ 2017-04-27T00:26:26Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.05         │ 2017-04-27T00:26:25Z │ sts.amazonaws.com  │ AssumeRole      │ us-east-1      │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.05         │ 2017-04-27T00:26:25Z │ sts.amazonaws.com  │ AssumeRole      │ us-east-1      │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.05         │ 2017-04-27T00:28:33Z │ sts.amazonaws.com  │ AssumeRole      │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.05         │ 2017-04-27T00:30:38Z │ sts.amazonaws.com  │ AssumeRole      │ us-east-1      │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.05         │ 2017-04-27T00:33:55Z │ sts.amazonaws.com  │ AssumeRole      │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
├──────────────┴──────────────────────┴────────────────────┴─────────────────┴────────────────┴───┴─────────────────┴────────────────────┴───────────────┴────────────┴─────────────┴──────────────────────┤
│ 10 rows                                                                                                                                                                            33 columns (11 shown) │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

この中から CreateLogStream のイベントだけ抽出してみます.2017年4月24日のログからは7件見つかりました.古いログすぎてフィールドが一致してなさそうなのですが,CloudTrail のログをスポットで分析する時にどういう操作をしたらいいのかのイメージが付きました.記事を参照させていただき,ありがとうございました!

D select * from trail_log_detailed_20170424 where eventName='CreateLogStream';
┌──────────────┬──────────────────────┬────────────────────┬─────────────────┬────────────────┬───┬─────────────────┬────────────────────┬───────────────┬────────────┬─────────────┬──────────────────────┐
│ eventVersion │      eventTime       │    eventSource     │    eventName    │   awsRegion    │ … │ managementEvent │ recipientAccountId │ eventCategory │ tlsVersion │ cipherSuite │ clientProvidedHost…  │
│   varchar    │       varchar        │      varchar       │     varchar     │    varchar     │   │     varchar     │      varchar       │    varchar    │  varchar   │   varchar   │       varchar        │
├──────────────┼──────────────────────┼────────────────────┼─────────────────┼────────────────┼───┼─────────────────┼────────────────────┼───────────────┼────────────┼─────────────┼──────────────────────┤
│ 1.04         │ 2017-04-27T00:16:43Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.04         │ 2017-04-27T00:20:31Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.04         │ 2017-04-27T00:21:02Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.04         │ 2017-04-27T00:26:26Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.04         │ 2017-04-27T01:17:15Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.04         │ 2017-04-27T03:18:56Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
│ 1.04         │ 2017-04-27T04:29:09Z │ logs.amazonaws.com │ CreateLogStream │ ap-northeast-1 │ … │                 │ 1234567891011       │               │            │             │                      │
├──────────────┴──────────────────────┴────────────────────┴─────────────────┴────────────────┴───┴─────────────────┴────────────────────┴───────────────┴────────────┴─────────────┴──────────────────────┤
│ 7 rows                                                                                                                                                                             33 columns (11 shown) │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

まとめ

DuckDB で S3 にある CloudTrail のログを分析するのを試してみました.次は ALB のログを試してみたいです.