【AWS】CloudTrailのログをAthenaで分析し、払い出したAccess Keyがどこから使用されているかを分析する
こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。
少しマニアックな話になるが、CloudTrailのログを分析し、そのKeyが使用されているかどうかをAthenaで分析する方法を記載する
ユースケース
例えば、連携先システムにIAM UserにひもづくAccess Key / Secret Keyを払い出したはいいものの、強大な権限がついている権限を渡してしまい、そのKeyが連携先のシステム以外から使われていないかを確認したいケース
また、システムの乗っ取りをされた場合、どのAccess Keyが誰により使われたのかを調べたいケース
前提
CloudTrailが有効化されていること
S3オブジェクトに対するAPIアクセスもCloudTrailのログに記録されていればなお良い
参考
【新機能】CloudTrailでS3オブジェクトレベルのアクセスをロギングする | Developers.IO
実行手順
マネジメントコンソールからCloudTrailを選択
「イベント履歴」を選択
「Amazon Athenaで高度なクエリを実行します」を選択
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