You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform为私有AWS S3 Bucket对象配置公开读取权限?

解决S3 Bucket公开访问文件的问题

你的配置已经放开了桶级的公共访问限制,但文件仍无法公开访问,主要可能是缺少桶级的访问策略,或者上传的对象本身没有配置公共读权限。以下是具体的修复步骤:

1. 添加桶级公共访问策略

AWS官方现在更推荐用桶策略替代ACL来管理公共访问,在你的Terraform代码中加入以下资源:

resource "aws_s3_bucket_policy" "s3_public_policy" {
  bucket = aws_s3_bucket.s3.id
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect    = "Allow"
        Principal = "*"
        Action    = ["s3:GetObject"]
        Resource  = "${aws_s3_bucket.s3.arn}/*"
      }
    ]
  })
  
  depends_on = [aws_s3_bucket_public_access_block.s3_public_access]
}

这个策略会明确授权所有用户(*代表任意身份)读取桶内的所有对象(Resource指定为桶ARN加/*,覆盖所有子对象)。

2. 确保对象的公共读权限

如果是通过Terraform上传文件,需要给每个对象显式设置public-read的ACL:

resource "aws_s3_object" "sample_file" {
  bucket = aws_s3_bucket.s3.id
  key    = "test-file.txt"
  source = "./local-test-file.txt"
  acl    = "public-read"
  
  depends_on = [aws_s3_bucket_acl.s3_acl, aws_s3_bucket_policy.s3_public_policy]
}

如果是手动上传或用其他工具上传,必须在上传时指定公共读权限,否则对象会继承默认的私有权限,即使桶策略允许访问也无法生效。

3. 检查账户级公共访问设置

确认你的AWS账户没有启用账户级S3公共访问阻止,这个全局设置会覆盖桶级的配置。可以在AWS控制台的S3服务页面,进入「公共访问设置」检查是否有全局阻止项。

4. 验证配置

部署更新后的Terraform代码后,通过以下步骤验证:

  • 登录AWS控制台,查看目标桶的「权限」标签,确认桶策略已正确应用
  • 查看桶内对象的权限,确认对象ACL为「公共读」
  • 复制对象的公开URL,在匿名浏览器窗口打开,确认可以正常访问

内容的提问来源于stack exchange,提问作者AhmadSONJI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:17:43