CloudTrailとCloudWatchを使って、IAMポリシーが変更された場合に通知されるようにしてみた

IAMポリシー以外にも様々な操作の監視/通知ができます
2020.07.15

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

コンサル部@大阪オフィスのYui(@MayForBlue)です。

AWSアカウント内のAPI操作のイベントログを自動的に記録する CloudTrail と ログを一元管理できる CloudWatch を使って、アカウント内のIAMポリシーが変更された場合にメール通知されるようにしてみました。

はじめに

前提条件

ロギング対象の CloudTrail 証跡情報が存在すること

参考にしたページ

Amazon CloudWatch Logs を使用して CloudTrail のログファイルをモニタリングする

手順

CloudTrail のログが CloudWatch Logs に保存されるようにする

CloudTrail から 簡単な操作をすることで CloudWatch Logs にログを保存することができます。

まず、CloudTrail の証跡情報の一覧から対象の証跡をクリックします。

詳細設定画面の CloudWatch Logs の「設定」をクリックします。

ロググループの名前を入力し(ここではデフォルトのままとしました)、「次へ」をクリックします。

CloudTrail から CloudWatch Logs にログを書き込むためのIAMロールを設定します。
IAMロールに新しいIAMロールの作成、ロール名を入力し(ここではデフォルトのままとしました)、「許可」をクリックします。

ここで証跡情報の詳細画面に戻ると「ロールポリシーが検証できません」と表示されてしまうので、ロググループ、IAMロールの設定はそのままで「次へ」をクリックします。

ロールの変更でIAMロールに先ほど作成したIAMロールを選択し、ポリシー名に対象のポリシーを選択して「許可」をクリックします。

証跡情報の詳細画面より、CloudWatch Logs の設定ができていることが確認できます。

ロググループのメトリクスフィルターを設定する

CloudWatch Logs で IAMポリシーの変更のログを検出するためのメトリクスフィルターを設定します。

CloudWatch Logs から、先ほど作成したロググループをクリックします。

詳細画面のメトリクスフィルターのタブより、「メトリクスフィルターを作成」をクリックします。

フィルタパターンに以下を設定し、「Next」をクリックします。
{($.eventName=DeleteGroupPolicy)||($.eventName=DeleteRolePolicy)||($.eventName=DeleteUserPolicy)||($.eventName=PutGroupPolicy)||($.eventName=PutRolePolicy)||($.eventName=PutUserPolicy)||($.eventName=CreatePolicy)||($.eventName=DeletePolicy)||($.eventName=CreatePolicyVersion)||($.eventName=DeletePolicyVersion)||($.eventName=AttachRolePolicy)||($.eventName=DetachRolePolicy)||($.eventName=AttachUserPolicy)||($.eventName=DetachUserPolicy)||($.eventName=AttachGroupPolicy)||($.eventName=DetachGroupPolicy)}

それぞれ以下を入力し、「Next」をクリックします。

  • フィルター名:IAMPolicyChanges
  • メトリクス名前空間:CloudTrailMetrics
  • メトリクス名:IAMPolicyEventCount
  • メトリクス値:1
  • デフォルト値:0

確認して問題なければ「メトリクスフィルターを作成」をクリックします。

アラームを作成する

ロググループの詳細画面のメトリクスフィルターのタブより先ほど作成したメトリクスフィルターを選択し、「アラームを作成」をクリックします。

アラーム条件を設定します。
ここでは統計を最大、しきい値を0欠落データを適性として処理を選択し、その他はデフォルトとしました。
「次へ」をクリックします。

通知先に適当なSNSトピックを選択し、「次へ」をクリックします。

アラーム名に適当な名前を入力し、「次へ」をクリックします。

内容を確認し、問題なければ「アラームの作成」をクリックします。

動作確認

テスト用のIAMポリシーを削除して、アラームが発火するか確認してみました。

IAMポリシー削除から数分後、SNS経由でメール通知が届きました。

CloudWatch Alarm の画面でもアラーム状態になっていることが確認できました。

さいごに

CloudTrail と CloudWatch を組み合わせることで、今回やってみたIAMポリシーの変更以外にも様々な操作を監視/通知することができます。
CloudTrailのドキュメントにも例としてS3バケットの操作やコンソールサインイン失敗の操作の通知の設定方法が提示されています。
CloudTrail イベント用の CloudWatch アラームの作成例
興味のある方はぜひやってみてください。

以上、コンサル部@大阪オフィスのYui(@MayForBlue)でしたっ(`・ω・´)