Bucket作成時のACLエラー

Terraform で環境構築時に下記エラーが発生
ACL周りのデフォルト動作が変更となったようなので、少しメモ

Error: error creating S3 bucket ACL for sample-bucket: AccessControlListNotSupported: The bucket does not allow ACLs
      status code: 400, request id: xxxxxxxxxxxxxxxx, host id: xxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxx/xxxxxxx/xxxxxxxxxxxxxxxxxxxxxx

  with module.s3.aws_s3_bucket_acl.sample,
  on ../../module_aws/s3/main.tf line 13, in resource "aws_s3_bucket_acl" "sample":
  13: resource "aws_s3_bucket_acl" "sample" {

S3作成時のデフォルトの設定の変更

  • 2023年4月より新規S3バケットは、デフォルトでパブリック・アクセスブロック有効化、ACL無効化
  • ACLは利用しないことが推奨される
  • s3オブジェクトのACL有効・無効設定は aws_s3_bucket_ownership_controls で設定する
    resource "aws_s3_bucket_ownership_controls" "sample" {
      bucket = aws_s3_bucket.sample.bucket
    
      rule {
        object_ownership = "BucketOwnerEnforced"
      }
    }
  • object_ownership に設定できるのは以下
    • ObjectWriter: 所有者はアップローダ
    • BucketOwnerPreferred: バケット所有アカウントを指定可能(bucket-owner-full-control)
    • BucketOwnerEnforced: バケット所有アカウント強制
  • BucketOwnerEnforced ではACL併用できない

S3 ポリシー適用時のエラー

S3 policy: AccessDenied: Access Denied
  • 一部ディレクトリのみ公開したい場合など、ACLを指定する場合は、ObjectWriter & ACL設定 & ポリシーにはアカウントを指定する

    Principalが指定されていないとパブリック扱いになるため、明示的にアカウント情報を指定した。

Refs