S3 オブジェクトのサーバー側暗号化設定の確認

S3 オブジェクトに実際に適用される暗号化、アップロード設定、キー要件を併せて確認してください。

説明

S3 オブジェクトには、設定ファイル、バックアップ、静的アセットなどの保護すべきデータが保存されることがあります。実際に適用された暗号化方式とキーが、組織の要件に合っているか確認してください。

現在、新しい S3 オブジェクトには既定でサーバー側暗号化が適用されます。アップロード時に server_side_encryption を指定しない場合はバケットの既定の暗号化が適用されるため、このオプションの省略だけで未暗号化とは判断できません。明示的に指定する暗号化方式は、バケットの既定値と異なる場合があります。

想定される影響

KMS キーやキー管理が必要な環境では、既定の AES256 だけでは要件を満たせない場合があります。以前の未暗号化オブジェクトは、既定の設定を変えても自動的には暗号化されません。暗号化は、オブジェクトの読み取り権限や公開アクセス制御の代わりにはなりません。

対処方法

  • バケットの既定の暗号化と、実際のオブジェクトの暗号化方式・キーを併せて確認してください。
  • 組織の基準に応じて、AES256 または aws:kms と必要なキーを使用してください。KMS が必要なバケットに AES256 を明示して要件を回避しないよう、アップロードのポリシーも確認してください。
  • 既存の未暗号化オブジェクトは暗号化を適用してコピーする計画を立て、データとバージョンの保持、読み取りを検証してください。必要な KMS 権限は最小限に制限してください。

例

バケット名をグローバルに一意の値に変更し、アップロードする index.html を用意してください。アップロード時の暗号化指定とバケットの既定値を比較する例であり、カスタマーマネージド KMS キーが必要な環境の完全な例ではありません。

バケットの既定の暗号化を使用

hcl
resource "aws_s3_bucket" "artifact_bucket" {
  bucket = "examplebuckettftest"

  versioning {
    enabled = true
  }
}

resource "aws_s3_bucket_object" "artifact_file" {
  key    = "someobject"
  bucket = aws_s3_bucket.artifact_bucket.id
  source = "index.html"
}

アップロード時に暗号化を別途指定していないため、バケットの既定値が適用されます。新しいオブジェクトが平文で保存されることを意味しません。

SSE-S3 を明示

hcl
resource "aws_s3_bucket" "artifact_bucket" {
  bucket = "examplebuckettftest"

  versioning {
    enabled = true
  }
}

resource "aws_s3_bucket_object" "artifact_file" {
  key                    = "someobject"
  bucket                 = aws_s3_bucket.artifact_bucket.id
  source                 = "index.html"
  server_side_encryption = "AES256"
}

このアップロードに AES256 を明示しています。バケットの既定値が KMS でも、この要求は SSE-S3 を選ぶため、組織のキー要件に合うか確認してください。

参考資料