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

如何让AWS S3存储桶内所有文件夹中的文件公开访问?

解决AWS S3非根目录文件无法公开访问的问题

1. 修正桶策略中的桶名

你当前桶策略里Resource字段的*my-bucket-name*是占位符,必须替换为真实的存储桶名称,不能保留星号。正确格式如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::你的真实桶名/*"
        }
    ]
}

2. 关闭S3公共访问阻止设置

AWS默认强制阻止公共访问,即使桶策略配置正确也会失效。进入存储桶的权限标签,找到“公共访问设置”,关闭以下所有选项:

  • 阻止新的公共存储桶策略
  • 阻止公共和跨账户访问(如果存储桶有公共策略)
  • 关闭所有公共ACL的公共访问
  • 阻止跨账户访问(如果存储桶有公共ACL)

3. 检查文件对象的ACL权限

若上传文件时未指定公共权限,对象本身会保持私有状态:

  • 现有文件:在S3控制台选中文件,进入“权限”标签,将对象ACL设置为“公共读取”;也可通过AWS CLI批量修改:
    aws s3 cp s3://你的桶名/tmp/ s3://你的桶名/tmp/ --recursive --acl public-read
    
  • Node.js上传新文件:在上传代码中添加ACL: 'public-read'参数,示例:
    const s3 = new AWS.S3();
    s3.putObject({
      Bucket: '你的桶名',
      Key: 'tmp/目标文件名', // 注意不要带./,S3路径前缀直接写tmp/
      Body: 文件内容,
      ACL: 'public-read'
    }, (err, data) => {
      // 处理回调逻辑
    });
    

4. 确认访问URL的正确性

S3文件的合法访问URL有两种格式,注意不要包含./:

  • 普通对象URL:https://你的桶名.s3.区域.amazonaws.com/tmp/文件名
  • 静态网站托管URL(若开启):http://你的桶名.s3-website.区域.amazonaws.com/tmp/文件名

如果你的Node.js上传时用了./tmp/作为前缀,会导致对象Key变成./tmp/文件名,此时URL需对应为https://你的桶名.s3.区域.amazonaws.com/./tmp/文件名,但更规范的做法是去掉./,直接用tmp/作为前缀。

内容的提问来源于stack exchange,提问作者Joao Fernando Fernandes Montes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:35:06