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が指定されていないとパブリック扱いになるため、明示的にアカウント情報を指定した。