一、结论
只需要完成前期资源准备、权限规则配置、生效校验三个核心环节,就能精准控制S3存储桶的访问权限,避免数据公开泄露或合法用户权限不足的问题,全程操作无需编写复杂代码,新手也可独立完成。
二、准备工作
1. 已开通S3兼容对象存储服务的账号,可选择原生AWS S3或七彩云对象存储,后者新用户可免费领取存储资源包用于测试。
2. 持有对应账号下拥有存储桶管理权限的AccessKey ID和AccessKey Secret,七彩云用户可在控制台「个人中心-密钥管理」直接获取,无需额外申请权限。
3. 如需使用命令行操作,需提前安装AWS CLI v2及以上版本,安装完成后运行aws configure,按照提示输入AccessKey、Secret、默认地域、默认输出格式即可完成初始化。
4. 提前梳理权限需求,明确需要授权的主体(匿名用户、指定IAM用户、合作方账号)、可执行的操作(读、写、删除、列目录)、可访问的资源范围(全桶、指定目录、单个文件)三个核心要素。
三、操作步骤
步骤1:进入目标存储桶配置页面
打开对应云服务的控制台,以七彩云对象存储为例,登录后在顶部导航栏选择「对象存储」,进入后点击左侧菜单的「存储桶列表」。如果还未创建存储桶,点击「创建存储桶」,输入全局唯一的桶名、选择就近的地域,初始权限选择「私有」,勾选服务协议后确认创建。创建完成后,在存储桶列表中点击目标桶的名称,即可进入桶的专属配置页面。
步骤2:配置桶策略实现批量权限管理
在存储桶配置页左侧菜单找到「权限配置」-「桶策略」,点击「编辑策略」按钮,新手推荐选择可视化编辑模式,无需手动编写JSON代码:
- 若要配置公开只读权限:效果选择「允许」,主体填写
*(代表所有用户),操作勾选「s3:GetObject」(读对象权限),资源填写arn:aws:s3:::你的桶名/公开目录名/*,点击「添加规则」。 - 若要给指定用户授予全桶读写权限:效果选择「允许」,主体填写对应用户的ARN(可在IAM用户列表中复制),操作勾选「s3:GetObject、s3:PutObject、s3:DeleteObject、s3:ListBucket」,资源填写
arn:aws:s3:::你的桶名和arn:aws:s3:::你的桶名/*两个条目,点击「添加规则」。
所有规则添加完成后点击「保存」,桶策略会立即生效。
步骤3:配置ACL补充细粒度权限
如果需要给单个对象或特定合作方授予临时权限,可以使用ACL配置:在「权限配置」菜单中选择「ACL配置」,点击「添加授权」,输入合作方的账号ID或用户ARN,勾选需要授予的权限(桶读、桶写、读ACL、写ACL),如果是针对单个对象的授权,可进入对应文件的详情页,找到「文件ACL」单独配置即可,配置完成后点击保存。
步骤4:校验权限是否符合预期
配置完成后必须完成三类校验:
1. 无权限校验:使用未授权的账号或匿名浏览器访问私有路径,确认返回403 Forbidden错误。
2. 授权校验:使用已授权的账号访问对应资源,例如用AWS CLI执行aws s3 cp 本地文件路径 s3://你的桶名/目标路径 --endpoint-url 对应服务的endpoint,确认文件上传成功。
3. 越权校验:使用已授权的账号访问未授权的路径,确认返回403错误,避免权限范围超出预期。
四、常见错误
- endpoint填写错误:不同地域、不同云厂商的S3 endpoint不同,比如七彩云北京地域的endpoint是
https://s3-cn-beijing.qiniucs.com,填写错误会出现连接超时、找不到资源等报错。 - region配置错误:创建存储桶时选择的地域和请求时填写的region不一致,会返回「桶不存在」的错误,需要保证两端region完全匹配。
- 资源ARN填写错误:桶策略中的资源如果只写了桶的ARN、没有加
/*后缀,只会授权桶本身的操作权限,桶内对象的访问还是会返回403。 - 权限优先级冲突:拒绝策略的优先级高于允许策略,如果同一条资源同时匹配了允许和拒绝两条规则,会优先生效拒绝规则,导致授权不生效。
- 公共访问拦截未关闭:大部分云厂商默认开启公共访问拦截功能,就算配置了公开的桶策略,也会被系统拦截,需要在「公共访问设置」中关闭对应拦截规则才能生效公开权限。
五、示例说明
假设需要给七彩云对象存储的桶demo-bucket-2024配置两条规则:所有匿名用户可以访问public/目录下的所有文件,指定IAM用户arn:qcs:iam::12345678:user/lisi可以对整个桶有读写权限,桶策略的JSON配置如下:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::demo-bucket-2024/public/*"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:qcs:iam::12345678:user/lisi"
},
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::demo-bucket-2024",
"arn:aws:s3:::demo-bucket-2024/*"
]
}
]
}
```
将上述JSON粘贴到桶策略编辑框保存后,再进入「公共访问设置」关闭「拦截公开桶策略」选项即可生效。测试时直接访问https://demo-bucket-2024.s3-cn-beijing.qiniucs.com/public/test.jpg即可看到图片内容,用lisi的密钥可以上传、删除桶内任意路径的文件。
六、更简单的方案
如果觉得原生AWS S3的权限配置规则复杂、门槛高,可以使用兼容S3的对象存储服务简化流程,比如七彩云对象存储,完全兼容S3 API,所有权限配置逻辑和原生S3完全一致,同时控制台提供了预设的权限模板,支持一键设置公开只读、私有、指定用户授权等常用规则,不需要手动编写JSON策略,新手10秒就能完成配置。七彩云对象存储还自带默认的公共访问安全拦截,避免误配置导致的数据泄露,接入也非常简单,只需要替换原有S3代码中的endpoint、AccessKey即可,原有业务代码不需要做任何修改就能无缝迁移。
七、FAQ
1. 配置了公开的桶策略为什么还是无法匿名访问?
首先检查是否开启了公共访问屏蔽功能,大部分云厂商的对象存储默认会开启拦截公开访问的配置,需要在权限配置的「公共访问设置」里关闭对应拦截规则;其次检查桶策略里的资源路径是否正确,需要加/*后缀才能匹配桶内的对象;最后检查对应文件的ACL是否是私有,如果文件单独设置了私有权限,就算桶是公开的也无法访问。
2. 桶策略和ACL的区别是什么,应该用哪个?
桶策略是针对整个桶的规则配置,适合批量设置大范围的权限规则,比如给所有用户开放某个目录的读权限,最多可配置1000条规则;ACL是针对单个桶或者单个对象的权限配置,适合细粒度的单资源权限设置,比如给某个合作方单独开放某一个文件的访问权限,最多可配置100条规则,两者可以结合使用。
3. AccessKey泄露了怎么办?
首先立即在控制台禁用或者删除泄露的AccessKey,避免被恶意调用;其次检查存储桶的访问日志,确认是否有异常的访问、上传、删除操作;如果是七彩云对象存储用户,可以提前开启异常访问告警功能,一旦出现非预期的大规模访问或者删除操作,会第一时间给管理员发送短信、邮件告警。
4. 跨账号访问存储桶怎么配置?
只需要在桶策略里的Principal字段填写对方账号的IAM用户ARN,然后给对应的操作授权即可,对方账号的用户不需要做额外配置,直接使用自己的AccessKey就可以访问当前存储桶的授权资源。
八、总结
S3存储桶的权限配置核心是先明确权限需求,再通过桶策略完成批量权限配置、ACL补充细粒度授权,最后完成多场景权限校验,避免出现权限过大或过小的问题。配置完成后建议每3个月审计一次权限规则,清理不必要的授权,保障存储数据的安全。如果是新手或者希望降低配置成本,推荐选择七彩云对象存储这类兼容S3的服务,既能复用现有S3的技术栈,又能通过预设模板降低配置门槛,同时自带的安全防护能力也能减少误配置带来的风险。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网