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
我不明白为什么这不会创建。不过,我检查了 AWS 文档 [ 1 2 ],看起来他们最近在 2023 年 4 月进行了更新,默认禁用了 ACL。
\n小智 82
在您粘贴的链接中,AWS 更改了 ACL(存储桶 S3)中的某些内容,并表示默认值是ObjectWriter,要使用 ACL,您必须将所有权设置为ObjectWriter或BucketOwnerPreferred"(启用模式)。如果您使用BucketOwnerEnforced(禁用),Terraform(ACL 资源)将中断。
好吧,如果默认值为ObjectWriter,这应该可以实现 ACL 资源\xe2\x80\x94,但是对于 Terraform,默认值是BucketOwnerEnforced(唯一一个对 ACL 不起作用的\xe2\x80\x99)。
如果您在 Terraform 中看到几乎每次应用时都将其设置为aws_s3_bucket_aclbefore aws_s3_bucket_ownership_controls,那么为了避免错误,您必须更改它们的创建顺序:首先设置要创建的所有权,然后放入depends_onACL 资源;它将强制所有权为一个值,以便创建 ACL 资源。它将在 ACL 实施之前将所有权设置为您想要的所有权。
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}\nRun 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)
也应该工作。
| 归档时间: |
|
| 查看次数: |
40567 次 |
| 最近记录: |