バケットポリシーに変更があった事を検知するCloudWatchアラームを作成してみた
はじめに
先日執筆したブログを作成する際に、バケットポリシーに変更があった事を検知するCloudWatchアラームを作成したので、その手順を記事化しておくことにしました。
CIS AWS Foundations Benchmarkの3.8に対応したCloudWatchアラームで特定のユーザのみ検知条件から外す
やってみたこと
1. テスト用のバケットを作成
今回のテスト用に、S3で新しいバケットを作成します
バケット名は katoaki-test-bucket-policy
にしました
2. CloudTrailの証跡を作成
作成したバケットのログをCloudWatchロググループへ出力させるために、CloudTrailの設定を行います。
なお、出力するロググループはデフォルトの CloudTrail/DefaultLogGroup
にします。
- CloudTrailのダッシュボード上から「証跡の作成」を選択して新しい証跡を作成
-
証跡情報の作成、データイベント、ストレージの場所のセクションでそれぞれの値を設定して証跡を作成する(設定した箇所以外はデフォルト)
設定値
項目名 | 値(例) |
---|---|
証跡情報の作成 > 証跡名 | katoaki-test-bucket-policy-test |
データイベント > バケット名 | katoaki-test-bucket-policy |
ストレージの場所 > S3バケット | katoaki-test-bucket-policy-trail |
CloudWatch Logs | CloudTrail/DefaultLogGroup |
画面イメージ
3. ログを発生させる
テスト用バケットでバケットポリシーを変更し、ログを発生させます。
- テスト用バケットのブロックパブリックアクセスをオフにする
※この設定はパブリックアクセスを許可するものです。一時的であっても、外部からアクセスされて困るようなオブジェクトをバケット内に配置しないように注意してください。
- テスト用バケットのパケットポリシーを次のように設定する
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicRead", "Effect": "Allow", "Principal": "", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::katoaki-test-bucket-policy/" } ] }
4.メトリックフィルタの作成
- CloudTrailに設定したロググループを開いて、「メトリクスフィルターの作成」を選択します
- フィルターパターンに以下を設定します
{($.eventSource=s3.amazonaws.com) && (($.eventName=PutBucketAcl) || ($.eventName=PutBucketPolicy) || ($.eventName=PutBucketCors) || ($.eventName=PutBucketLifecycle) || ($.eventName=PutBucketReplication) || ($.eventName=DeleteBucketPolicy) || ($.eventName=DeleteBucketCors) || ($.eventName=DeleteBucketLifecycle) || ($.eventName=DeleteBucketReplication))}
- フィルター名、その他の設定値を記述して「Next」を選択します。
項目名 | 値(例) |
---|---|
フィルター名 | katoaki-test-bucket-policy-metric-filter |
メトリクス名 | S3BucketPolicyChanges |
メトリクス名前空間 | katoaki-test |
メトリクス値 | 1 |
5. SNSトピックの作成
- トピックを新規作成して、名前と表示名を設定します
項目名 | 値(例) |
---|---|
名前 | katoaki-test-bucket-policy-topic |
表示名 | katoaki-test-bucket-policy-topic |
6. CloudWatchアラームの作成
- 「アラームの作成」で新しいアラームを設定する画面へ遷移します
- 「メトリクスと条件の指定」画面で、[メトリクスの選択]-[katoaki-test]-[ディメンジョンなしのメトリクス]と辿り、「S3BucketPolicyChanges」のメトリクスにチェックを入れて「メトリクスの選択」をクリックします
メトリクスの選択後は、統計単位や期間などの設定を次の通り行います。
項目名 | 値(例) |
---|---|
統計 | 合計 |
期間 | 1分 |
アラーム条件 | 以上 |
しきい値 | 1 |
- 「アクションの設定」画面で、手順5で作成したトピックを設定します
- 「名前を説明を追加」画面でアラーム名を設定します
- 「プレビューと作成」画面で最終確認して、「次へ」を選択してアラームの作成を完了します
7. 動作確認
テスト用バケットのバケットポリシーを何度か変更して、アラームの状態が変わることを確認します。 EffectをDenyに変更したり、Resourceのパスを変更したりしてみます。 その後、作成したアラームが「アラーム」状態になることを確認します
- 「3. ログを発生させる」のセクションで設定したバケットポリシーを変更して、パブリックアクセスを拒否にする場合の設定
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicRead", "Effect": "Deny", "Principal": "", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::katoaki-test-bucket-policy/" } ] }
画面イメージ
このように「アラーム」の状態になることを確認します