
AWS_CloudTrailとCloudWatchで特定のAPIを見つけ出す #455
AWSアカウントの内部で特定のアクセスキーが使われている箇所を探し出す必要があり、その手順を習ったので整理しておきます。
大きく以下の手順で探索しました。
CloudTrailのイベント履歴で探す
CloudTrailで証跡を作成してCloudWatchに転送する
CloudWatchでアクセスキーを使用したAPIコールを検索する
それぞれ見ていきます。
CloudTrailのイベント履歴で探す
まず、AWSリソースに対するAPIコールを確認するため、CloudTrailのイベント履歴を確認します。
今回はアクセスキーの使用を探索したいので、ルックアップ属性は「AWS アクセスキー」を選択し、検索をかけます。

しかしこれでは見つかりませんでした。
CloudTrailはデフォルトでAWSアカウントに対するAPIコールを記録しますが、Lambda関数などが叩いたAPIリクエストなど、特定のリソースに対する詳細な操作を記録するには証跡を作成する必要があります。これには追加の設定が必要です。
CloudTrailで証跡を作成してCloudWatchに転送する
CloudTrailで証跡を作成すると、AWSアカウント内の全てのAPIコールを記録することができます。サイドバーから飛んで「証跡の作成」から必要事項を入力していきます。

CloudWatchに転送する設定は以下のようになっています。有効にして、ロググループを指定するだけでOKです。

APIコールは以下の「管理イベント」で設定できます。証跡が1つであれば、APIアクティビティは無料で記録できます(参考: 料金表)。

管理イベントの他にも「データイベント」の記録を取るように設定することも可能で、これをやるとS3への書き込みなど、非常に細かいレベルでログを残すことも可能です。
ただもちろんお金が必要なので、今回は使用していません。
証跡が作成されたら、後は一旦放置してログが溜まっていくのを待ちます。
CloudWatchでアクセスキーを使用したAPIコールを検索する
一定期間のログが取れたら、いよいよCloudWatchで検索していきます。
「ログのインサイト」を開き、ロググループでフィルタリングのうえ、クエリに「filter @message like 'アクセスキー'」を追加して実行します。

これはログの「message」部分にAPIの情報が含まれており、そこにアクセスキー情報が入っているだろうと予測できるためです。
この方法で検索をかけると、無事に該当のAPIを見つけ出すことができました。
ここまでお読みいただきありがとうございました