尝试在 AWS 中创建存储桶 ACL 时出现错误 AccessControlListNotSupported

mam*_*rer 59 amazon-s3 amazon-web-services terraform

最近我尝试aws_s3_bucket_acl使用 Terraform 部署资源,并收到错误:

\n
\n

错误:为存储桶名称创建 S3 存储桶 ACL 时出错:AccessControlListNotSupported:存储桶不允许 ACL \xe2\x94\x82 状态代码:400

\n
\n

我不明白为什么这不会创建。不过,我检查了 AWS 文档 [ 1 2 ],看起来他们最近在 2023 年 4 月进行了更新,默认禁用了 ACL。

\n

小智 82

问题

\n

在您粘贴的链接中,AWS 更改了 ACL(存储桶 S3)中的某些内容,并表示默认值是ObjectWriter,要使用 ACL,您必须将所有权设置为ObjectWriterBucketOwnerPreferred"(启用模式)。如果您使用BucketOwnerEnforced(禁用),Terraform(ACL 资源)将中断。

\n

好吧,如果默认值为ObjectWriter,这应该可以实现 ACL 资源\xe2\x80\x94,但是对于 Terraform,默认值是BucketOwnerEnforced(唯一一个对 ACL 不起作用的\xe2\x80\x99)。

\n

解决方案

\n

如果您在 Terraform 中看到几乎每次应用时都将其设置为aws_s3_bucket_aclbefore aws_s3_bucket_ownership_controls,那么为了避免错误,您必须更改它们的创建顺序:首先设置要创建的所有权,然后放入depends_onACL 资源;它将强制所有权为一个值,以便创建 ACL 资源。它将在 ACL 实施之前将所有权设置为您想要的所有权。

\n

例子

\n
resource "aws_s3_bucket_acl" "s3_bucket_acl" {\n  bucket = aws_s3_bucket.bucket-one-two.id\n  acl    = "private"\n  depends_on = [aws_s3_bucket_ownership_controls.s3_bucket_acl_ownership]\n}\n\n# Resource to avoid error "AccessControlListNotSupported: The bucket does not allow ACLs"\nresource "aws_s3_bucket_ownership_controls" "s3_bucket_acl_ownership" {\n  bucket = aws_s3_bucket.bucket-one-two.id\n  rule {\n    object_ownership = "ObjectWriter"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n


Rex*_*ang 12

我们通过添加s3_bucket_ownership_controls资源绕过了这个问题。

此外,如果您碰巧使用terraform-aws-modules/s3-bucket/aws模块,只需使用:

# S3 Bucket Ownership Controls
# https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_ownership_controls
control_object_ownership = true
object_ownership         = "BucketOwnerPreferred"
Run Code Online (Sandbox Code Playgroud)

也应该工作。

  • 如果您已经有一个现有的存储桶,并且您的 Terraform 仍然抱怨无法创建 ACL(“错误:为 <bucket-name> 创建 S3 存储桶 ACL 时出错:AccessControlListNotSupported:存储桶不允许 ACL”),则需要运行`terraform apply` 两次,因为它仅识别第二次运行中的存储桶所有权设置。 (10认同)
  • @chronicc。在[3.10.1版本]中解决了(https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/blob/master/CHANGELOG.md#3101-2023-04-28:~ :text=2023%2D04%2D28\)-,Bug%20Fixes,-Fixed%20Bucket%20Policy) (4认同)

小智 5

您有 2 个选择:

  1. 添加aws_s3_bucket_ownership_controls区块
  2. 按照 AWS 的建议,将 acl 替换为存储桶策略

桶政策