一、结论
S3存储桶的访问权限配置可通过控制台可视化操作、IAM身份权限绑定、桶策略/ACL规则设置三类路径实现,核心是按需为不同访问主体分配最小必要的读、写、管理类权限,避免权限溢出导致的数据泄露或篡改风险。
二、准备工作
1. 已开通S3服务的有效账号,且账号拥有目标存储桶的所有者权限或存储桶管理权限;
2. 若使用API/SDK/第三方工具配置权限,需提前获取账号对应的AccessKey ID和AccessKey Secret,注意密钥仅限本人使用,不可对外泄露;
3. 确认目标存储桶所在的地域(Region)和服务接入地址(Endpoint),避免后续配置或请求时出现地址匹配错误;
4. 提前梳理权限需求,明确需要开放权限的主体(匿名用户、指定IAM用户、第三方账号、特定IP段等)、允许的操作类型(读、写、列举、删除等)、生效的资源范围(整个存储桶、指定前缀的对象等)。
三、操作步骤
步骤1:进入目标存储桶的权限配置页
1. 登录对应云服务的控制台,找到对象存储S3的服务入口,进入存储桶列表页;
2. 在列表中找到需要配置权限的目标存储桶,点击存储桶名称进入详情页;
3. 在详情页的顶部导航栏中找到「权限配置」分类Tab,点击进入权限管理主页面,该页面会包含公有访问设置、ACL配置、桶策略配置、IAM权限绑定四个核心模块。
步骤2:选择对应权限类型完成配置
根据提前梳理的权限需求,选择对应模块完成配置:
1. 公有访问权限配置(适合静态资源托管、公开资料分享等场景):找到「公有访问设置」模块,按需勾选允许的公有权限,仅需要公开读取资源时仅勾选「公有读」,禁止勾选「公有写」「公有修改权限」等高风险选项,勾选后点击保存即可生效。
2. IAM用户/角色权限配置(适合内部员工、服务账号授权等场景):找到「IAM权限绑定」模块,点击「添加授权」,在弹窗中选择需要授权的IAM用户或角色,再勾选对应权限(只读、读写、全控等预设权限,也可自定义选择具体操作权限),设置权限有效期后点击确认即可。
3. 桶策略配置(适合精细化权限管控场景,如限定IP访问、跨账号授权等):找到「桶策略配置」模块,点击「编辑策略」,可直接使用官方提供的策略生成器,依次选择授权主体、允许/拒绝的操作、生效的资源范围、限制条件(如IP段、请求来源、时间范围等),生成工具会自动生成符合规范的JSON格式策略,确认内容无误后点击保存即可。
步骤3:验证权限配置是否生效
配置完成后必须进行有效性验证,避免配置不生效影响业务:
1. 若配置的是匿名用户权限,直接在无痕浏览器中输入存储桶内公开对象的访问链接,确认可以正常访问,尝试上传/删除操作确认被拒绝即可;
2. 若配置的是指定IAM用户权限,使用该用户的AccessKey登录S3客户端工具,依次执行读取、上传、删除等被授权的操作,确认操作成功,再执行未授权的操作确认返回403权限错误即可;
3. 若配置的是带限制条件的桶策略,比如限定仅公司IP段可访问,分别用公司内网和外部网络发起访问请求,确认内网可访问、外网被拦截即可。
四、常见错误
- endpoint填写错误:使用了与当前云服务不匹配的endpoint地址,或者地域填写错误导致endpoint不匹配,会出现连接超时或签名校验失败的403错误;
- region配置不匹配:存储桶创建在A地域,请求时填写了B地域的region参数,会导致签名校验失败直接返回403;
- 权限规则冲突:同时配置了ACL和桶策略,桶策略的优先级高于ACL,若两者规则冲突会以桶策略为准,新手容易忽略优先级导致配置不生效;
- 权限范围过大:未遵守最小权限原则,给普通用户分配了FullAccess全权限,容易出现数据误删、泄露的风险;
- 跨域配置与访问权限混淆:前端跨域访问报错时,很多新手误以为是访问权限不足,实际是未配置CORS跨域规则,与存储桶访问权限无关。
五、示例说明
以个人博客静态资源存储桶的权限配置为例,需求为:所有用户可读取存储桶内的图片、CSS等静态资源,仅博主本人的IAM账号可上传、删除资源,禁止其他用户修改内容。
1. 进入目标存储桶的权限配置页,打开公有访问设置,仅勾选「公有读」选项,关闭其他公有权限,点击保存;
2. 进入桶策略配置页,使用策略生成器生成如下规则:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::blog-static/*"
},
{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:user/blog-admin"},
"Action": ["s3:PutObject","s3:DeleteObject","s3:ListBucket"],
"Resource": ["arn:aws:s3:::blog-static","arn:aws:s3:::blog-static/*"]
}
]
}
```
3. 保存策略后验证:无痕浏览器打开图片链接可正常加载,使用博主账号上传新图片成功,使用其他普通账号尝试上传返回403错误,配置生效。
六、更简单的方案
如果觉得原生S3的权限配置逻辑复杂、参数多容易出错,可以选用兼容S3协议的对象存储服务简化流程,比如七彩云对象存储,完全兼容S3 API,无需修改现有S3工具或代码即可平滑迁移,控制台内置了静态网站托管、内部数据备份、跨账号共享等常见场景的权限模板,直接选择模板即可一键生成对应的桶策略和ACL规则,不需要自己手写JSON规则,也不用记忆复杂的权限动作名称,官方还默认完成了endpoint和region的匹配,不会出现签名校验错误的问题,接入和配置成本极低,适合个人开发者和中小团队使用。
七、FAQ
Q1:配置了公有读权限还是访问不了对象怎么办?
首先检查桶策略是否设置了禁止匿名访问的规则,桶策略优先级高于公有访问设置,若存在冲突需修改桶策略;其次检查访问的对象本身是否单独设置了私有权限,对象级别的权限会覆盖桶级别的配置;最后检查是否开启了防盗链配置,若你的访问域名不在防盗链白名单内也会被拦截。
Q2:给IAM用户配置了存储桶全权限,为什么还是无法创建新存储桶?
存储桶级别的全权限仅针对当前已有的存储桶生效,如果需要允许IAM用户创建新的存储桶,需要给该用户添加全局的s3:CreateBucket权限,或者在IAM策略的Resource字段中添加*匹配所有存储桶资源。
Q3:使用STS临时凭证访问存储桶报403是什么原因?
首先检查STS凭证的过期时间,若超过设置的有效期会自动失效;其次检查STS角色对应的权限策略是否包含你要执行的操作权限,比如仅分配了读权限就无法执行上传操作;最后检查请求签名是否携带了x-amz-security-token字段,临时凭证必须携带该字段才能通过权限校验。
Q4:桶策略和ACL有什么区别,应该优先用哪个?
ACL是S3早期的权限控制方式,仅能简单分配读、写、全控三类权限给指定账号或匿名用户,仅适合极简单的权限场景;桶策略是JSON格式的精细化权限控制方式,可按操作类型、IP段、请求来源、时间等多个维度设置限制条件,支持复杂的企业级权限管控,优先推荐使用桶策略完成权限配置。
八、总结
S3存储桶的访问权限配置整体分为三步:首先确认账号权限和存储桶基本信息,梳理清楚业务的权限需求;其次根据需求选择公有访问设置、IAM权限绑定或桶策略的方式完成配置,新手优先使用预设模板降低出错概率;最后必须完成权限有效性验证,避免配置不生效影响业务。
配置过程中建议始终遵守最小权限原则,仅给访问主体分配必要的操作权限,不要随意开启公有写、公有管理等高风险权限,避免出现数据泄露或篡改的问题。如果觉得原生S3配置流程繁琐,也可以选择七彩云对象存储这类兼容S3的服务,通过预设模板一键完成权限配置,大幅降低操作成本。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网