S3サーバーアクセスログ設定の確認

S3バケットへのリクエストを調査できるようアクセスログを管理してください。

説明

サーバーアクセスログは、S3バケットとオブジェクトへのリクエスト情報を収集し、運用分析やセキュリティ調査に役立ちます。機密データ、バックアップ、アプリケーション資産を保存するバケットでは、必要なアクセス記録を確保してください。

配信はベストエフォートです。すべてのリクエストの即時記録や完全な監査履歴は保証されないため、監査が必要なオブジェクト操作についてはCloudTrailデータイベントも検討してください。

想定される影響

  • 必要なアクセス記録がないと、バケットへのリクエスト履歴を調査しにくくなります。
  • 削除、ダウンロード、不審なアクセスの原因調査に時間がかかるおそれがあります。

対処方法

  • aws_s3_bucket_loggingでサーバーアクセスログを設定し、配信を確認してください。
  • 同じアカウントとリージョンにある別の保存先バケットを使い、配信権限と保持期間を管理してください。
  • 保存先のACLが無効な場合はバケットポリシーで配信を許可し、機密ログの読み取り・削除権限を制限してください。

例

以下は、AWSプロバイダー3.xのインラインloggingとversioningの構文を使った例です。保存先のlogsバケットと配信権限は別途用意してください。mfa_delete = trueは既存のAWSの状態を反映する値であり、このコードだけでMFA Deleteが有効になるわけではありません。現在の構成では個別のロギングリソースを使ってください。

変更前

hcl
resource "aws_s3_bucket" "example" {
  bucket = "my-tf-test-bucket"
  acl    = "private"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }

  versioning {
    mfa_delete = true
  }
}

変更後

hcl
resource "aws_s3_bucket" "example" {
  bucket = "my-tf-test-bucket"
  acl    = "private"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }

  logging {
    target_bucket = "logs"
  }

  versioning {
    mfa_delete = true
  }
}

説明:

変更後は、サーバーアクセスログを保存先バケットに配信するよう設定します。実際に受信されることと、必要な監査範囲を満たすことを確認してください。

参考資料