Athenaいらず！？AWS CloudTrailのログを「Stratoshark」で分析してみた

## はじめに
Twitterで見つけた「Stratoshark」というソフトウェアが気になって調べてみたところ、どうやらCloudTrailのログも分析できるらしいので、とりあえず試してみました。本記事では、その手順を紹介します。

https://x.com/sysdig/status/1882150585165857015

## 3行まとめ

- フィルタを利用することで、マネジメントコンソールの「イベント履歴」に比べて柔軟にイベントを追うことができる。
- Readonlyの権限で柔軟に検索できるので、Athenaでテーブル作成するよりハードルが低い。
- Wiresharkを使い慣れている人はうれしいかも。

## Stratosharkについて
### Stratosharkってなに？

2025年1月22日、ベルギーのブリュッセルで開催されたFOSDEM 2025にて、SysdigからStratosharkの公式発表が行われました。
StratosharkはWiresharkの兄弟アプリケーションで、システムコールやログメッセージを分析するためのツールとして開発されました。

https://stratoshark.org

https://sysdig.jp/press-releases/sysdig-unveils-stratoshark-extending-wireshark-to-cloud/

### なにができる？

Linuxシステムのシステムコールをキャプチャし、分析するためのソフトウェアです。
また、プラグインを利用してCloudTrailのログを閲覧することもできるそうです。

下の画像のようにWiresharkライクな画面でCloudTrailのログをフィルタ、閲覧できます。
ただし、Wiresharkのようにリアルタイムでログをキャプチャするのではなく、読み込んだ時点でのログを静的に閲覧できるようです。


![2025-01-26_22h28_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/28c07fb2-020f-668f-dd07-5b0b89e43bfc.png)

### どうやる？

Stratsharkから、アクセスキーを使用してS3バケットに接続します。

## 前提

- AWSアカウントでCloudTrailの証跡が設定されていること。
- 証跡のログがS3バケットに出力されていること。

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html

- S3のバケットポリシーは、下記の公式ドキュメントのものが設定されているとします。任意のバケットポリシーを設定している場合は、後述するIAMがDenyされていないことを確認してください。

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/create-s3-bucket-policy-for-cloudtrail.html


## CloudTrailのログを分析するために必要なもの

### IAMのアクセスキー
証跡が保存されているS3バケットを読み取る際、IAMのアクセスキーを利用します。

- アクセスキーID
- シークレットアクセスキー

```md:例
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey

※セキュリティ的にアクセスキーはなるべく発行しない方がいいよね？とかその辺の話は一旦棚に上げます

### IAMの権限

上記のIAMから、証跡が保存されているS3バケットを読み取れる権限が必要です。
- s3:GetObject: 対象オブジェクトを取得（ダウンロード）できる権限
- s3:ListBucket: バケット内のオブジェクト一覧を取得できる権限



```json:例
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": "*"
        }
    ]
}
```

※AWSマネージドポリシーの`AmazonS3ReadOnlyAccess`をIAMにアタッチする方法でも問題ありません。

## 手順

### Stratosharkをインストールする

この記事では、Windowsにインストールします。

[公式サイト](https://stratoshark.org)にアクセスし、下記のリンクからインストーラーをダウンロードし、実行します。

![2025-01-25_20h59_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/902e5ab1-9a50-e7d8-4767-1221a9aab5ba.png)


### S3バケットと認証情報を設定する
ここでは、証跡が保存されているS3バケットの指定とクレデンシャルの設定をします。

インストールが完了し、Stratosharkを起動すると下記の画面になります。
ここで、`Falco plugion: cloudtrail`　の左にある歯車アイコンをクリックします。

![2025-01-24_21h12_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/693adc8b-dc6a-5a7c-9e05-4877acd52ddc.png)

歯車アイコンをクリックすると、設定画面が開きます。
ここにS3バケットや、クレデンシャルを設定していきます。
設定する項目は、下記の2つです。

- Log data URL
- Shared AWS Credentials File

![2025-01-24_23h32_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/a2ae9ce8-9cfc-6e4e-265d-0691f2e4ec03.png)

#### Log data URL

ここには、下記の形式でS3バケットを指定します。
`s3://{BUCKET-NAME}/AWSLogs/{アカウントID}/CloudTrail/{リージョン名}/`

どうやら`s3://{BUCKET-NAME}/`だけだとエラーで接続できなかったので、下記のように指定してください。

- 例
    - `s3://example-bucket/AWSLogs/123456789012/CloudTrail/ap-northeast-1/`
    - `s3://example-bucket/AWSLogs/123456789012/CloudTrail/ap-northeast-1/2025/`
    - `s3://example-bucket/AWSLogs/123456789012/CloudTrail/ap-northeast-1/2025/01/24/`


1行目の例は全期間のログを読み込むので、表示までかなり時間がかかります。
日付に見当がついている場合は、2-3行目のように該当の日付まで含めると表示するまでの読み込みが早くなります。

#### Shared AWS Credentials File

ここにはクレデンシャルが記載されているファイルのパスを記載します。

##### AWS CLIがインストール済みの場合

既にAWS CLIがインストールしてあり、初期設定を済ませている場合は、credentialsファイルがあるのでそれをそのまま使うこともできます。

特にインストールパスをいじっていない場合は、下記をエクスプローラーに打ち込むと保存されている場所がわかるはずです。

`%USERPROFILE%\.aws`

![2025-01-26_23h46_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/4fb5c06d-8cc1-8932-152b-7d831572801a.png)

私の環境だと、下記のようになります。

`C:\Users\user\.aws\credentials`

##### AWS CLIをインストールしていない場合

AWS CLIをインストールしていない方は、ファイルを手で作ります。

まず、クレデンシャルを記載したファイルを用意します。
テキストエディタに、下記の形式でアクセスキーを記載してください。

```md:credentials
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

次に、ローカルのどこでもいいので保存します。
ファイル名はおそらくなんでもいいですが、ここでは「credentials」としておきます。拡張子もつけていません。

保存したらファイルパスを記載します。
私は下記に保存したのでそれを記載します。

`C:\Users\user\Documents\work\credentials`

項目が記載できたら、「開始」をクリックします。

![2025-01-24_22h44_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/f11ad8a0-bbf5-5cea-909e-eafce397ce66.png)

ログが多い場合は数十秒くらいかかるかもしれないので気長に待ちます。

しばらくすると下記のような画面になります。

![2025-01-26_22h28_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/af66182f-b1b2-5d68-7a4d-e170c5352f9f.png)

デフォルトでは時間が見にくいので、ウインドウ上部のメニューバーから
View > Time Desplay Format > Date and Time of Day
に変更すると、見やすくなります。

![2025-01-24_22h18_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/2bb68e7a-7efc-6c92-fd0b-951e0cd2e302.png)

### フィルタの方法

フィルタに使用できるフィールドは下記のREADMEの「supported-fields」の項目を参照してください。
※他にもWiresharkでおなじみの「frame.time」なども使えるようですのでいろいろ試してみてください

https://github.com/falcosecurity/plugins/blob/main/plugins/cloudtrail/README.md#supported-fields

例えば

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/0755d1a3-7a0b-354a-66b2-8d7de728dbc8.png)

`ct.name`
の項目のDESCRIPTIONをみると
`(eventName in the json)`
と記載がありますが、これは下記の公式ドキュメントのレコードの「eventName」と対応していることを意味します。

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html

つまり、CloudTrailのeventNameが「UpdateInstanceInformation」のログをフィルタしたい場合は下記のように入力します。

```text:フィルタ例
ct.name == "UpdateInstanceInformation"
```

![2025-01-27_00h39_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/00a02eaa-42d4-e901-6f5d-1e6b9f6763a5.png)

他にも、特定の期間を指定してフィルタしたい場合は下記のようにします。
`2025/1/26 23:00:00 - 2025/1/26 23:30:00`
をフィルタする例です。

```text:フィルタ例
(frame.time >= "2025-01-26T23:00:00" ) && (frame.time <= "2025-01-26T23:30:00")
```

また、レコードをクリックして、気になるフィールドをフィルタ欄にドラッグ＆ドロップしてもフィルタすることができるので、うまく活用してください。

![2025-01-27_01h01_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993322/2a6808ee-07f3-d26a-0c0a-93068ca4bad2.png)

フィルタがされている状態で、他のフィールドをドラッグ＆ドロップし、AND や ORで指定することも可能です。

## まとめ

本記事では、Stratosharkを用いてCloudTrailのログを分析する方法を紹介しました。

Athenaで慣れている人はAthenaの方がいいかもしれませんが、いつも「イベント履歴」から検索をしていた人はぜひ使ってみてください。