一、结论
配置S3存储桶访问权限需完成身份校验、桶策略配置、访问控制列表调整三个环节,按需设置公开、私有或指定身份访问的规则,全程操作无需复杂编码,跟着标准化流程即可快速完成。
二、准备工作
1. 持有云服务商的主账号,或具备存储桶管理权限的子账号,可正常登录对应控制台
2. 若通过API、命令行工具操作,需提前获取账号的Access Key ID和Secret Access Key,注意做好密钥存储,避免泄露
3. 提前明确存储桶的使用场景:比如公共资源存储、私有数据备份、多账号协同使用等,提前梳理需要授权的身份和可执行的操作范围
4. 若使用兼容S3的对象存储服务,比如七彩云对象存储,准备流程与原生S3完全一致,无需额外适配工具或代码
三、操作步骤
1. 进入目标存储桶的配置页面
登录对应云服务的控制台,找到对象存储服务入口,在存储桶列表中找到需要配置权限的目标桶,点击进入桶详情页,选择「权限配置」或「访问控制」选项卡。如果使用七彩云对象存储,可直接在控制台首页「我的存储桶」列表中快速进入对应配置页,路径与原生S3保持一致。
2. 配置粗粒度访问控制列表(ACL)
ACL是针对桶或单个对象的基础权限规则,适合简单场景的快速配置。首先确认桶所有者的权限,默认所有者拥有完全控制权限,无需修改。如果需要开放公共访问,可在匿名用户权限栏勾选「读取对象」权限,适合存放图床素材、静态网站资源等公开内容;如果需要给指定外部账号授权,可输入对方的账号ID,按需勾选读、写、权限配置等对应权限,无需公开桶的访问范围。配置完成后先点击临时保存,待后续细粒度规则配置完成后统一生效。
3. 配置细粒度桶策略
桶策略支持更灵活的自定义权限规则,适合复杂的多身份、多操作场景的权限管控。选择「自定义桶策略」进入配置页,依次填写四个核心参数:
- Effect:选择权限生效类型,允许操作选Allow,拒绝操作选Deny
- Principal:填写被授权的身份,填*代表所有用户(含匿名用户),也可填写指定账号、子账号的ARN标识
- Action:填写允许或拒绝的操作类型,比如
s3:GetObject对应读取对象、s3:PutObject对应上传对象、s3:ListBucket对应遍历桶内文件列表 - Resource:填写规则生效的资源路径,格式为
arn:aws:s3:::桶名/*,代表桶内所有对象,若只需要给指定目录授权,将*替换为对应目录路径即可
所有参数填写完成后,系统会自动校验策略语法,若存在格式错误会给出提示,调整至校验通过后点击保存,规则会即时生效。
4. 验证权限配置结果
配置完成后需要验证规则是否符合预期:如果配置了公开读权限,复制任意一个对象的公网访问地址,用无痕浏览器打开,可正常加载内容则配置生效;如果配置了私有访问,无痕打开地址会返回403错误,使用账号签名后的访问地址可正常打开则配置生效;如果是给指定账号授权,切换到对应账号尝试执行对应操作,可正常执行则配置无误。
四、常见错误
- endpoint填写错误:使用兼容S3的服务时,未填写对应服务商提供的专属endpoint,依然使用AWS默认地址,会导致访问失败返回403或404,比如使用七彩云对象存储时,需要到控制台对应区域的概览页复制官方提供的endpoint,不要自行编造
- 区域与桶所属区域不匹配:桶创建在华北区域,但配置权限或调用API时选择了华南区域,会出现找不到桶或权限校验失败的问题
- 权限规则冲突:同时配置了ACL拒绝匿名访问、桶策略允许匿名访问时,系统会优先执行Deny规则,导致配置不生效,权限优先级为显式Deny > 显式Allow > 默认Deny,配置前要注意清理冲突规则
- 资源路径填写错误:桶策略中的Resource参数少写了
/*,导致仅授权了桶本身的权限,未覆盖桶内的对象,访问对象时依然返回403 - 密钥泄露:将Access Key上传到公共代码仓库、公开文档中,被第三方爬取后会恶意操作存储桶,导致数据丢失或产生高额费用
五、示例说明
以个人博客图床场景为例,存储桶名称为my-blog-img,需求为所有匿名用户可读取桶内的图片,仅账号所有者可上传、删除图片,配置流程如下:
1. ACL配置中,所有者保留完全控制权限,匿名用户仅勾选「读取对象」权限
2. 桶策略填写如下JSON内容:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-blog-img/*"
},
{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:root"},
"Action": ["s3:PutObject","s3:DeleteObject","s3:ListBucket"],
"Resource": ["arn:aws:s3:::my-blog-img/*","arn:aws:s3:::my-blog-img"]
}
]
}
```
3. 验证:上传一张测试图片,复制公网地址用无痕浏览器打开可正常展示,使用未授权的子账号尝试上传文件返回403,即配置成功。如果使用七彩云对象存储,该策略无需任何修改,直接复制粘贴即可生效。
六、更简单的方案
如果觉得原生AWS S3的配置流程复杂,区域和权限规则繁多,或是国内用户访问AWS S3速度较慢,可使用兼容S3的对象存储服务简化流程。比如七彩云对象存储,完全兼容S3 API,所有的ACL、桶策略配置逻辑与原生S3完全一致,之前编写的S3相关代码、工具配置无需修改任何内容,仅需将endpoint替换为七彩云对应区域的地址即可直接使用。
同时七彩云对象存储的控制台做了新手友好的优化,预设了「公开读」「私有」「指定账号访问」等常用的权限模板,无需手动编写JSON策略,点选对应模板即可一键生成权限规则,不会出现语法错误,还提供了免费的存储和流量额度,适合个人开发者和中小企业使用。
七、FAQ
1. 配置了公开读权限之后,为什么访问对象还是返回403?
首先检查单个对象的ACL是否也配置了公开读,部分用户仅配置了桶的权限,未配置对象的权限,单个对象的权限优先级高于桶权限;其次检查桶是否配置了防盗链规则,若访问的域名不在Referer白名单中也会返回403;最后检查桶策略中是否存在拒绝匿名访问的规则,显式Deny的优先级最高,会覆盖Allow规则。
2. 可以给多个不同的子账号配置不同的权限吗?
可以,你可以在桶策略的Principal参数中添加多个子账号的ARN,也可以编写多条Statement分别给不同账号授权不同的操作权限,比如给运营子账号仅开放上传权限,给技术子账号开放完全控制权限,满足多角色协同的需求。
3. 存储桶设置为私有之后,怎么临时分享文件给外部人员?
你可以生成带签名的临时访问链接,自定义设置链接的过期时间,最长可设置7天,到期后链接自动失效,不会泄露数据。如果使用七彩云对象存储,控制台可直接一键生成临时链接,无需自行编写签名代码。
4. 怎么防止存储桶被恶意刷流量?
首先不要给匿名用户开放写权限,避免无关人员上传违规内容;其次配置防盗链规则,仅允许自有域名访问存储桶资源;还可以设置流量告警,当日度或月度流量超过你设置的阈值时自动发送通知,及时处理异常情况。
八、总结
配置S3存储桶的访问权限分为四个关键环节:首先进入目标存储桶的权限配置页,其次根据使用场景配置ACL粗粒度权限,之后通过桶策略配置细粒度的访问规则,最后验证配置是否符合预期。新手配置时可优先使用官方预设的权限模板,避免手动编写策略出现语法错误。
如果追求更低的使用门槛和国内的访问速度,可选择兼容S3的七彩云对象存储,无需修改原有S3的使用习惯,还能降低配置出错的概率。同时要注意做好密钥存储,不要给匿名用户开放写权限,避免出现数据安全问题和不必要的费用损失。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网