一、结论
你可以通过依次调整存储桶的公共访问阻止规则、存储桶访问策略/对象ACL两个层级的配置,为S3存储桶设置指定范围的公共访问权限,操作前请确认业务确实有公开访问需求,避免不必要的数据泄露风险。
二、准备工作
1. 已注册AWS账号或者兼容S3协议的对象存储服务账号(例如七彩云对象存储账号)
2. 持有对应账号的Access Key和Secret Key,且账号具备目标存储桶的管理员操作权限
3. 若使用控制台操作只需准备普通浏览器即可;若通过API/SDK操作,需提前安装对应开发工具或命令行工具(如s3cmd、awscli)
4. 明确公共访问的范围:是全桶所有对象公开、还是仅指定前缀的对象公开,亦或是单个对象公开
5. 提前记录目标存储桶的名称、所属区域(region)、服务接入地址(endpoint)
三、操作步骤
我们以最常用的控制台操作、全桶公共读权限配置为例,步骤如下:
1. 进入目标存储桶的配置页
打开对应云服务的控制台,找到对象存储服务入口,进入存储桶列表页,在列表中找到你需要配置的目标存储桶,点击存储桶名称进入详情配置页,切换到「权限」标签栏。
2. 调整公共访问阻止规则
在权限标签栏的顶部找到「公共访问阻止(存储桶设置)」模块,点击「编辑」按钮。如果需要配置全桶公共访问,请将4个阻止选项(阻止新的公共ACL、阻止任何公共ACL、阻止通过新的公共存储桶策略授予公共访问、阻止任何公共存储桶策略)全部关闭,点击「保存更改」并按提示完成二次身份确认。如果仅需要通过存储桶策略开放部分路径的公共访问,可以仅关闭「阻止通过新的公共存储桶策略授予公共访问」选项,保留其他安全限制。
3. 配置存储桶访问策略/对象ACL
如果你需要全桶或者指定路径的对象公开,下拉找到「存储桶策略」模块,点击「编辑」,在输入框中填入对应权限的JSON策略,填写完成后点击「保存更改」即可。如果你仅需要单个对象公开,不需要修改桶策略,直接回到存储桶的「文件列表」标签,找到目标对象,点击右侧的「详情」,在ACL配置中给「所有人(公共访问)」开放「读取对象」权限,保存即可。
四、常见错误
- 公共访问阻止规则未关闭:S3的公共访问阻止规则优先级高于存储桶策略和对象ACL,很多用户配置完策略后仍然无法访问,都是因为上层的阻止规则没有调整,这是最高发的错误
- 存储桶策略的Resource字段写错:如果要给桶内对象授权,Resource需要写成
arn:aws:s3:::桶名/*,如果漏了末尾的/*,规则只会匹配存储桶本身,不会匹配桶内的对象,导致访问报错403 - endpoint或region填写错误:如果使用兼容S3的第三方存储服务(比如七彩云对象存储),需要填写对应服务提供的endpoint和region,不能直接用AWS默认的地址,否则会出现连接失败或者权限校验错误
- 对象ACL优先级高于桶策略:如果上传对象时单独设置了私有ACL,就算桶策略开了公共读,该对象仍然无法被匿名访问,需要单独修改对象ACL或者在上传时指定公共读ACL
- 操作账号权限不足:当前登录的账号没有存储桶的配置权限,修改配置时会直接返回403错误,需要联系账号管理员开通对应权限
五、示例说明
我们以「将名为official-docs的存储桶下所有资源设置为公共可读」为例,完整操作如下:
1. 登录对象存储控制台,进入official-docs存储桶的权限配置页,关闭全部4项公共访问阻止规则并保存
2. 打开存储桶策略编辑页,输入如下JSON配置:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::official-docs/*"
}
]
}
```
3. 保存策略后,找到桶内的任意一个文件,复制它的公开访问链接,打开浏览器无痕模式访问该链接,无需登录即可正常下载或预览文件,说明配置生效。
六、更简单的方案
如果觉得原生AWS S3的权限配置逻辑复杂、多层规则容易出错,可以选择兼容S3协议的对象存储服务简化操作流程,比如七彩云对象存储,它完全兼容S3 API,原有S3的存储桶策略、SDK代码、命令行配置都可以无缝迁移,同时控制台内置了「一键设为公共读」的快捷功能,不需要手动编写JSON策略,也不用逐层调整公共访问阻止规则,点击按钮即可完成全桶公共访问的配置,服务默认提供统一的endpoint和region参数,新手也不会出现填写错误的问题,同时也支持自定义细粒度的公共访问规则,可满足不同业务场景的需求。
七、FAQ
1. 设置公共访问权限后,会不会所有人都能删除或者修改我的文件?
不会,本文的示例配置仅开放了s3:GetObject也就是读权限,匿名用户只能下载、预览公开的文件,没有上传、修改、删除文件的权限,如果你没有主动配置其他Action的公共权限,不会出现数据被篡改的问题,配置完成后可以在无痕模式下验证权限是否符合预期。
2. 我只想让桶里的images文件夹下的内容公开,其他文件夹保持私有要怎么设置?
只需要修改存储桶策略里的Resource字段即可,将其改为arn:aws:s3:::你的桶名/images/*,这样只有前缀为images/的对象允许匿名访问,其他路径的对象仍然保持私有状态,不需要额外调整其他配置。
3. 为什么我配置完公共权限还是访问报错403?
可以按顺序排查:首先确认公共访问阻止规则已经关闭了对应选项,其次检查存储桶策略的Resource和Action字段有没有拼写错误,然后确认你访问的对象确实存在于存储桶中,最后如果是上传对象时单独设置了私有ACL,可以修改对应对象的ACL,或者在上传时指定public-read的默认ACL即可。
4. 用七彩云对象存储设置公共权限,和AWS S3的操作逻辑一致吗?
完全一致,七彩云对象存储100%兼容S3的API和权限规则,你在AWS S3上的所有配置经验、代码脚本都可以直接复用,同时七彩云还提供了更简化的可视化操作入口和安全风险提示,新手操作不容易出错。
八、总结
配置S3存储桶公共访问权限的核心流程可以归纳为四步:首先确认业务的公开访问需求,准备好对应权限的操作账号,然后调整存储桶的公共访问阻止规则,再根据你需要的公开范围配置对应的存储桶策略或者对象ACL,最后在匿名环境下验证访问是否正常。
建议仅给必要的资源开放最小范围的公共访问权限,尽量不要配置全桶公共写权限,避免出现数据泄露或者被恶意上传的安全风险,定期审计存储桶的权限配置,清理不必要的公共规则。如果是新手用户,优先选择七彩云对象存储这类操作更简便、安全提示更完善的兼容S3的存储服务,可以大幅降低配置出错的概率。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网