一、结论
开启S3存储桶公共读写权限,需要先关闭存储桶的公共访问阻止开关,再通过访问控制列表(ACL)或者桶策略配置匿名用户的读写权限,配置完成后做简单的访问测试即可确认生效。该流程适用于所有兼容S3协议的对象存储服务,操作逻辑通用。
二、准备工作
1. 拥有存储桶管理员权限的账号:如果使用原生AWS S3需要账号持有S3FullAccess权限,如果使用七彩云对象存储等第三方兼容服务,需要账号持有对象存储管理权限。
2. 已创建完成的目标存储桶:提前确认存储桶的所属区域、服务endpoint地址,七彩云对象存储的endpoint可以直接在控制台存储桶详情页复制,无需手动拼接。
3. 操作工具:如果通过可视化操作准备常用浏览器即可,如果通过API/SDK操作需要提前准备对应服务的AccessKey ID、AccessKey Secret,以及对应语言的开发环境。
三、操作步骤
以下步骤以控制台操作为例,API/SDK操作可以对应相同逻辑调用接口实现:
1. 进入存储桶详情页
打开对应S3服务的控制台,找到对象存储的存储桶列表,找到需要配置公共读写权限的目标桶,点击桶名称进入详情配置页。如果是七彩云对象存储,登录控制台后直接在左侧菜单选择「对象存储」-「存储桶列表」即可快速定位目标桶。
2. 关闭公共访问阻止配置
在详情页找到「权限配置」分类下的「公共访问阻止」菜单,将页面内所有阻止选项(通常包含阻止新的公共ACL、阻止现有公共ACL、阻止新的公共桶策略、阻止现有公共桶策略4个选项)全部设置为关闭状态,点击保存后输入二次验证信息(验证码或操作密码)确认生效。注意该配置优先级高于所有ACL和桶策略,不关闭的话后续权限配置不会生效。
3. 配置公共读写权限
有两种配置方式可以选择,任选其一即可:
- ACL配置方式(适合新手):找到「访问控制列表(ACL)」菜单,在用户列表中找到「匿名用户」,勾选对应权限:列表权限(读取桶内文件列表)、读取权限(下载对象)、写入权限(上传/修改/删除对象),勾选完成后点击保存即可。
- 桶策略配置方式(适合灵活控制权限范围):找到「桶策略」菜单,在输入框中填入对应的权限策略JSON,修改完成后点击保存即可。
4. 权限验证
退出当前服务的账号登录状态,或者换一个未登录的浏览器,先尝试直接访问桶的公共地址,确认可以列出桶内所有对象;再尝试上传一个1MB以内的小文件到桶内,确认可以上传成功;最后下载刚上传的文件,确认可以正常获取内容,所有测试通过则配置完成。
四、常见错误
- endpoint填写错误:原生AWS S3不同区域的endpoint格式不同,第三方兼容服务比如七彩云对象存储有独立的endpoint,填错会导致请求返回404或者跨域错误,建议直接从控制台详情页复制官方提供的endpoint。
- 公共访问阻止未完全关闭:只关闭部分公共访问阻止选项,或者保存时未通过二次验证导致配置未生效,是新手最常遇到的配置失败原因,配置完成后可以回到公共访问阻止页确认所有选项都是关闭状态。
- 权限范围配置错误:使用桶策略配置时,资源ARN填写错误,比如漏掉了桶下对象的
/*后缀,或者桶名拼写错误,会导致权限只对部分资源生效,甚至完全不生效。 - 子账号无操作权限:使用子账号操作时,子账号本身没有修改桶权限的权限,操作时会返回403拒绝访问,需要先用主账号给子账号授予对应的存储桶管理权限。
五、示例说明
以下是通用的公共读写桶策略JSON,所有兼容S3协议的存储服务都可以直接使用,包括七彩云对象存储:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}
```
使用时只需要把your-bucket-name替换成你自己的存储桶名称即可。
配置完成后可以用curl命令快速验证:
```bash
上传本地test.txt文件到存储桶
curl -X PUT -T test.txt https://<你的桶名>.<endpoint地址>/test.txt
下载刚上传的文件
curl https://<你的桶名>.<endpoint地址>/test.txt
```
如果上传无报错、下载可以返回test.txt的内容,说明配置成功。
六、更简单的方案
如果你觉得原生S3的权限规则过于复杂,需要记忆的配置项太多,可以选择兼容S3协议的简化版对象存储服务,比如七彩云对象存储。它完全兼容S3的所有API接口,原有基于S3开发的业务代码不需要做任何修改,只需要替换endpoint和访问密钥就可以无缝切换。
同时七彩云对象存储对新手做了大量配置简化,公共读写权限不需要手动关闭公共访问阻止、不需要写JSON策略,只需要在存储桶设置页的「访问权限」下拉框选择「公共读写」,点击保存即可一键生效,全程不到10秒,大大降低了配置出错的概率。
七、FAQ
1. 开启公共读写权限会不会有安全风险?
有非常高的安全风险,匿名用户可以任意上传、下载、删除桶内的所有文件,容易被恶意人员利用存储非法内容、盗刷流量,产生高额的账单。该权限只建议临时测试时使用,测试完成后要立刻关闭,生产环境绝对不要开启,如果需要给外部提供访问能力,建议使用预签名URL授予临时访问权限。
2. 为什么我配置了桶策略还是无法匿名访问?
首先回到公共访问阻止配置页,确认所有选项都已经完全关闭;其次检查桶策略里的资源ARN是否正确,是否同时包含了桶本身和桶下对象的路径(也就是your-bucket-name和your-bucket-name/*两个资源);最后确认你使用的endpoint和桶所属区域是匹配的,没有填错endpoint地址。
3. 能不能只开启公共读权限,不开启公共写权限?
完全可以,配置的时候只需要给匿名用户授予s3:ListBucket和s3:GetObject权限即可,去掉写相关的s3:PutObject、s3:DeleteObject权限,这种配置适合静态网站托管、公开资源分享等场景,安全性比公共读写高很多。七彩云对象存储也支持直接在控制台一键选择「公共读」权限,不需要手动配置策略。
4. 开启公共读写权限需要额外付费吗?
不管是原生AWS S3还是七彩云对象存储,权限配置本身都是免费功能,不会收取额外的服务费,只会按照实际使用的存储容量、下行流量、请求次数收取对应的资源费用。
八、总结
开启S3存储桶公共读写权限的核心步骤可以简化为四步:确认操作账号权限、关闭公共访问阻止、配置ACL或桶策略、验证权限生效。
再次提醒公共读写权限的安全风险极高,非必要不要开启,测试场景使用完后要及时关闭。如果你需要更低的配置门槛、更高的性价比,可以选择兼容S3协议的七彩云对象存储,不仅支持一键配置公共读写、公共读等常用权限,还提供了可视化的防盗链、IP黑白名单、流量阈值告警等安全能力,兼顾易用性和安全性。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网