S3 バケットのイベント通知設定の確認

オブジェクトイベントを利用する運用フローに合わせて S3 の通知先とイベント範囲を設定し、受信を確認してください。

説明

オブジェクトの作成や削除に応じた後続処理が必要なバケットでイベント通知が不足していると、運用の自動化やセキュリティ対応が動作しない場合があります。すべてのバケットに同じ通知が必要なわけではなく、既存の別のイベント処理経路も確認する必要があります。

S3 イベント通知は完全な監査ログの代わりにはなりません。配信は少なくとも 1 回行われるよう設計されており、受信側ではイベントの重複を考慮する必要があります。

想定される影響

  • 重要なファイルのアップロードや削除の把握が遅れる場合があります。
  • イベントに依存するセキュリティ監視や後続の自動処理が動作しない場合があります。
  • 必要なイベントの欠落や重複処理によって運用フローに問題が生じるおそれがあります。

対処方法

  • 必要なイベントの種類とオブジェクトフィルターを定め、SNS、SQS、Lambda、EventBridge などの適切な配信経路を設定してください。
  • 対象リソース、権限、適用されるリージョン要件、SNS のサブスクリプションなど実際の受信経路を確認し、該当するイベントでテストしてください。
  • バケットごとの Terraform 通知設定は一か所で管理し、既存の必要な通知先も維持してください。受信側で重複イベントを安全に処理できるようにしてください。

例

バケット名は実際に使用する値に置き換えてください。変更後のポリシーデータソースは省略しており、バケットと同じリージョンの SNS トピックに S3 が発行できるようにする必要があります。受信には SNS のサブスクリプションも必要です。空の通知設定を適用すると既存の通知設定が消える可能性があるため、全体を確認してください。

変更前

hcl
resource "aws_s3_bucket" "bucket" {
  bucket = "your-bucket-name"
}

resource "aws_s3_bucket_notification" "bucket_notification" {
  bucket = aws_s3_bucket.bucket.id
}

変更後

hcl
resource "aws_sns_topic" "topic" {
  name   = "s3-event-notification-topic"
  policy = data.aws_iam_policy_document.topic.json
}

resource "aws_s3_bucket" "bucket" {
  bucket = "your-bucket-name"
}

resource "aws_s3_bucket_notification" "bucket_notification" {
  bucket = aws_s3_bucket.bucket.id

  topic {
    topic_arn     = aws_sns_topic.topic.arn
    events        = ["s3:ObjectCreated:*"]
    filter_suffix = ".log"
  }
}

補足:

  • 変更前: 通知リソースに配信先を指定していません。
  • 変更後: 名前が .log で終わるオブジェクトの作成イベントを SNS トピックに配信します。すべてのオブジェクトや削除イベントを含む構成ではありません。

参考資料