[小ネタ] Sumo LogicでCloudTrailのログからAWSアカウントIDを取得する #sumologic

ログ中にないパラメータをファイル名から取得してみました。
2020.05.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

背景

Sumo LogicでCloudTrailの監視をしていると、たまに「このログ、どのAWSアカウントから出たものだろう?」と思うことがあります。

というのも、そもそもCloudTrailのログには、「どのAWSアカウントIDで発生したログか」という情報がフィールドとして存在しないためです。

userIdentity.accountId として記録されている情報はあくまで「操作したユーザの情報」であるため、日常的は問題ない場面も多そうですが、AWSの仕組み上別のAWSアカウントに権限を移譲できるため、完全ではありません。

そもそも全てのログにこの情報が記録されるわけでもないので、まるっと見たい時にはちょっと使いづらいです。

じゃあどうするか、と考えてみたところ、簡単な方法がみつかりました。
ログファイル名(S3オブジェクトファイル名)からパースすれば良さそうです。

解説

上述したAWSドキュメントにあるように、CloudTrailのログは下記のフォーマットのオブジェクト名をもっています。

AccountID_CloudTrail_RegionName_YYYYMMDDTHHmmZ_UniqueString.FileNameFormat

実際にはこれに、デフォルトのプレフィクスが追加されるため、バケット名を除けば例えば以下のような感じになります。

prefix_name/AWSLogs/Account ID/CloudTrail/region/YYYY/MM/DD/AccountID_CloudTrail_RegionName_YYYYMMDDTHHmmZ_UniqueString.FileNameFormat.json.gz

Sumo Logic上ではこのファイル名を _sourceName として取得できるため、ここからパースすればAWSアカウント名が取得できますね。

Built-in Metadata - Sumo Logic

  • _sourceName
    • The name of the log file, determined by the path you entered when you configured the Source.

取得には parse 句を使い、 _sourceName からパターンマッチで取得するのが手軽と思います。

| parse field=_sourceName "AWSLogs/*/CloudTrail" as aws_account_id

実際に検索してみたところ、こんな感じになります。

まとめ

ログ中にないパラメータを、ファイル名から取得してみました。
Sumo Logicでは、必ずしもログ本文中やソースカテゴリにない情報をもとにドリルダウンが可能なので、参考にしてみて下さい。