[Terraform] 如何使用 Terraform 代码启用 Amazon S3 ACL 访问

大家好,我是加拿大办公室的TK。今年加拿大的冬天很暖和,而且在我居住在加拿大的生活中,圣诞节第一次下雨了(通常都会下雪)。
这次我想简要总结一下我在使用 Terraform 构建 AWS 服务器时遇到的错误以及我是如何解决这些错误的。
本文面向已经在使用 Terraform 的用户,因此我不会介绍工具等先决条件。
任务
在配置 CloudFront 和存储其日志的 S3 时,规划时没有出现任何错误,但在应用时出现以下错误。
│ 错误:创建 CloudFront 分发时出错:参数无效:您为 CloudFront 日志指定的 S3 存储桶未启用 ACL 访问权限:XXX-log-bucket.s3.amazonaws.com │ 状态码:400,请求 ID:XXXXXXXXXXXXXX │ │ 与 XXXXX.aws_cloudfront_distribution.cf_distribution 配合使用, │ 在 XXX/cloudfront.tf 第 XX 行,资源“aws_cloudfront_distribution”“cf_distribution”中: │ .......
似乎未启用从 CloudFront 向 S3 存储桶写入日志的 ACL 访问权限。
这是因为,从 2023 年 4 月起,Amazon S3 的新默认安全设置将启用 S3 公共访问阻止(ACL 已禁用)。
◎ 参考: https
于是,我尝试在 AWS 控制台上直接在目标 S3 存储桶上启用 ACL,果然,应用命令顺利通过,日志开始存储在存储桶中。
所以,我想用 Terraform 代码做同样的事情,但是无论我怎么查找,都找不到任何关于如何在 Terraform 中编写它的信息,当我问 ChatGPT Sensei 时,我只得到了模糊的答案,所以我不知所措。
解决方案
在研究和尝试各种方法的过程中,我查找了与上述链接中
ObjectOwnership is BucketOwnerEnforced ◎ 参考: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_ownership_controls
让我们把它添加到 S3 配置文件中。
// 日志存储桶对象所有权设置 ACL 已启用资源“aws_s3_bucket_ownership_controls”“log_ownership_controls” { bucket = aws_s3_bucket.log.id rule { object_ownership = "BucketOwnerPreferred" } }
就内容而言,除非指定规则的对象所有权,否则它将是“BucketOwnerEnforced(ACL 已禁用)”,因此这里明确指定为“BucketOwnerPreferred”。
apply 命令顺利执行,目标 S3 存储桶的 ACL 已启用,日志现在已存储在存储桶中。
以下是如何使用 Terraform 启用 AWS ACL 访问权限。
这其实很简单,但我花了好长时间才找到正确的信息,所以我希望这篇文章能对遇到同样情况的人有所帮助。
点击这里查看我们博客上关于 Terraform 的相关文章。
感谢阅读。
6