がじぇ

お金と家電とプログラミングのブログ

【AWS】CloudTrailのログをAthenaで分析し、払い出したAccess Keyがどこから使用されているかを分析する

こんにちわ

がじぇったー (@hackmylife7) | Twitter


です。


少しマニアックな話になるが、CloudTrailのログを分析し、そのKeyが使用されているかどうかをAthenaで分析する方法を記載する




TL;DR(要約)

  • CloudTrailのログをAthenaで分析することにより、どのAccess Keyがいつ、どこから、誰により使われたのかを分析することができる

ユースケース

例えば、連携先システムにIAM UserにひもづくAccess Key / Secret Keyを払い出したはいいものの、強大な権限がついている権限を渡してしまい、そのKeyが連携先のシステム以外から使われていないかを確認したいケース
また、システムの乗っ取りをされた場合、どのAccess Keyが誰により使われたのかを調べたいケース

前提

CloudTrailが有効化されていること
S3オブジェクトに対するAPIアクセスもCloudTrailのログに記録されていればなお良い
参考
【新機能】CloudTrailでS3オブジェクトレベルのアクセスをロギングする | Developers.IO

実行手順

マネジメントコンソールからCloudTrailを選択
f:id:gadgeterkun:20191127234915p:plain

「イベント履歴」を選択
f:id:gadgeterkun:20191127234958p:plain

Amazon Athenaで高度なクエリを実行します」を選択
f:id:gadgeterkun:20191127235033p:plain


CloudTrailが保存されているS3バケットを選択する画面が出てくるので、
選択後、「テーブルの作成」を選択します

Athenaの画面に移動します

例えば以下のようなクエリを書くことで、そのAccess keyがいつ、どこから(どこのIPから)使用されたかがわかります

Access Keyが使われている直近10件を表示
※ limit 10を外すと全件表示されます
Access keyはIAM Userの画面から確認可能です。

SELECT *
FROM "default"."table_name"
WHERE useridentity.accesskeyid LIKE '%ここにAccess Keyを記載%' limit 10; 


以下のクエリで時期を特定期間に絞ることもできます。

SELECT * FROM "default"."table_name" where useridentity.accesskeyid like '%ここにAccess Keyを記載%'
and eventtime >= '2018-11-01T00:00:00Z'
and eventtime < '2019-11-19T00:00:00Z';


以下のクエリはsourceipaddressに絞って表示することができます。

SELECT sourceipaddress FROM "default"."table_name" where useridentity.accesskeyid like '%ここにAccess Keyを記載%'
and eventtime >= '2018-11-01T00:00:00Z'
and eventtime < '2019-11-19T00:00:00Z' GROUP BY sourceipaddress;


本手順でtableを作成することにより、以下のカラムを取得することができる。
注釈をつけたところが重要だと思う。

  • eventversion
  • useridentity
  • eventtime ※いつ実行されたか
  • eventsource ※ 何に対してアクセスされたか
  • eventname
  • awsregion
  • sourceipaddress ※どこから(どのIPから実行されたか)
  • useragent
  • errorcode
  • errormessage
  • requestparameters
  • responseelements
  • additionaleventdata
  • requestid
  • eventid
  • resources
  • eventtype
  • apiversion
  • readonly
  • recipientaccountid
  • serviceeventdetails
  • sharedeventid
  • vpcendpointid