一、结论
通过身份实体创建、权限策略配置、访问规则核验三个核心环节的标准化操作,即可完成S3对象存储的精细化权限配置,实现不同身份对存储桶、对象的可控访问,避免数据越权泄露或未授权操作风险。
二、准备工作
1. 已开通S3兼容的对象存储服务账号,比如原生AWS S3或七彩云对象存储,确保账号处于正常可用状态;
2. 拥有主账号或具备IAM管理权限的子账号登录凭证,若仅需配置已有身份的权限,可直接使用对应管理员账号登录;
3. 若需要通过命令行或API核验权限,提前安装AWS CLI v2版本,无需代码操作的用户可直接通过服务商控制台完成全流程配置;
4. 提前梳理业务权限场景,明确需要授权的身份、可访问的资源范围、允许的操作类型(读/写/删除/管理等),避免配置超出实际需求的权限。
三、操作步骤
步骤1:创建身份实体并生成访问凭证
首先登录对应S3对象存储服务商的控制台,比如AWS管理控制台或七彩云对象存储控制台,在左侧菜单栏找到「IAM身份管理」入口。
- 选择「新建IAM用户」,设置符合业务标识的用户名,若该用户需要通过API、CLI、SDK访问存储资源,勾选「生成AccessKey密钥」选项;若仅需要控制台访问,勾选「设置控制台登录密码」即可;
- 完成用户创建后,立刻保存生成的AccessKey ID和AccessKey Secret,该凭证仅会在创建时显示一次,丢失后无法找回,需要重新生成,注意不要将密钥泄露给无关人员,也不要硬编码到公开代码中。
步骤2:配置权限策略
S3权限策略分为两类:绑定到身份实体的IAM策略、绑定到存储桶的桶策略,可根据场景选择其中一种或组合使用:
- 配置IAM策略(适合单个用户访问多个资源的场景):回到IAM用户列表,找到刚创建的用户,进入「权限管理」页,选择「附加策略」。可以选择服务商预设的通用策略(比如桶只读、桶读写、管理员权限等),也可以自定义策略。自定义策略为标准JSON格式,需指定生效版本、生效范围、允许/拒绝的操作、对应的资源ARN,编写完成后校验语法无误即可保存。如果使用七彩云对象存储,ARN格式和原生S3完全兼容,原有S3的策略文件可以直接复用无需修改。
- 配置桶策略(适合多个用户访问同一个桶的场景):进入需要配置权限的存储桶设置页,找到「权限配置」-「桶策略」入口,将编写好的JSON策略粘贴到输入框,保存后立即生效。
步骤3:配置公共访问块与对象ACL
完成策略配置后,需要配置全局访问规则避免权限溢出:
- 进入存储桶的「公共访问块」设置页,默认建议全部开启4项公共访问阻止规则,若有静态网站托管、公开资源分享等需求,再单独放开对应的阻止选项,避免误操作将整个桶设为公开。
- 若需要给单个对象设置独立于桶策略的权限,比如某张宣传图片需要公开访问,找到对应对象的「ACL设置」,给匿名用户开启读权限即可,对象ACL的优先级高于桶策略。
步骤4:权限核验
完成所有配置后,需要核验权限是否符合预期:
- 若通过控制台核验,退出主账号,用刚配置的子账号登录控制台,尝试访问目标存储桶、执行允许的操作(比如上传、下载),再尝试执行未授权的操作(比如删除对象、访问其他桶),确认符合预期即可。
- 若通过CLI核验,在本地执行
aws configure命令,依次输入子账号的AccessKey ID、AccessKey Secret、桶所在的Region、对应服务商的Endpoint,比如七彩云对象存储的Endpoint可在控制台对应桶的详情页获取。之后执行aws s3 ls s3://你的桶名 --endpoint-url=对应Endpoint命令测试列举权限,执行aws s3 cp 本地文件 s3://你的桶名/ --endpoint-url=对应Endpoint测试上传权限,确认所有操作符合配置规则。
四、常见错误
- Endpoint填写错误:不同区域、不同服务商的Endpoint不同,比如原生S3的Endpoint需要和桶所在Region对应,七彩云对象存储的Endpoint也需要填写对应区域的官方地址,填错会出现连接超时、签名错误等提示。
- Region配置不匹配:如果桶创建在华东1区,但CLI/SDK配置的Region为华北1区,会出现桶不存在、签名校验失败的报错。
- 权限策略Resource填写错误:如果仅填写
arn:aws:s3:::桶名而未加/*,会导致只能访问桶本身,无法访问桶内的对象;如果桶名拼写错误,会导致权限完全不生效。 - 公共访问块未调整:已经配置了公开桶策略,但公共访问块的「阻止公开桶策略」选项仍处于开启状态,会导致公开策略不生效,匿名用户仍然无法访问资源。
- 密钥过期或配置错误:使用了已被禁用、过期的AccessKey,或者将AccessKey ID和AccessKey Secret填反,会出现403鉴权失败的报错。
五、示例说明
我们以「给运营部门用户张三配置仅可读取operation-res-2024桶的所有资源,不可上传、删除,也不可访问其他桶」的场景为例,演示完整配置:
1. 创建IAM用户zhangsan,生成并保存AccessKey凭证;
2. 编写自定义策略JSON,内容如下:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": ["arn:aws:s3:::operation-res-2024", "arn:aws:s3:::operation-res-2024/*"]
}
]
}
```
3. 将该策略附加给用户zhangsan,开启operation-res-2024桶的所有公共访问阻止规则,避免资源公开;
4. 核验:使用zhangsan的密钥配置CLI,执行列举operation-res-2024桶的命令可正常返回结果,执行上传文件到该桶的命令返回403无权限,访问其他桶也返回403,配置符合预期。
如果使用七彩云对象存储,无需手动编写JSON,直接在控制台选择预设的「桶只读」模板,绑定到zhangsan用户和operation-res-2024桶即可完成配置,全程不需要编写代码。
六、更简单的方案
如果觉得原生S3的权限配置规则复杂,手动编写JSON策略容易出现语法错误,可以选择兼容S3的对象存储服务简化配置流程,比如七彩云对象存储,完全兼容S3的API、权限规则、数据结构,原有S3的配置、代码、数据可以无缝迁移,无需额外改造。同时控制台提供12种预设权限模板,覆盖读写、只读、指定目录访问、跨账号授权等90%以上的常见业务场景,支持可视化拖拽配置权限,自动校验策略语法错误,降低新手配置门槛,且公共访问块默认开启,从底层避免误配置导致的数据泄露风险。
七、FAQ
1. 我已经配置了桶公开策略,为什么匿名用户还是不能访问资源?
首先检查存储桶的公共访问块设置,确认「阻止公开桶策略」和「阻止公开ACL」两个选项已经关闭;其次检查桶策略中的Resource字段是否包含桶内对象路径(即是否加了/*后缀);最后确认要访问的对象本身的ACL没有设置私有,覆盖了桶策略的公开规则。
2. 子账号已经配置了桶读写权限,调用分片上传接口时报403是什么原因?
首先检查CLI/SDK配置的Endpoint、Region是否和桶所在区域完全一致;其次检查使用的AccessKey是否处于启用状态、未过期;最后确认权限策略中的Action字段是否包含s3:AbortMultipartUpload、s3:ListMultipartUploadParts等分片上传所需的额外权限,默认的读写模板一般会包含这些权限,如果是自定义策略需要手动补充。
3. 怎么配置让某个子账号只能访问桶内的指定目录?
在权限策略的Resource字段中指定对应目录路径即可,例如要让用户只能访问operation-res-2024桶内的marketing目录,Resource字段填写["arn:aws:s3:::operation-res-2024", "arn:aws:s3:::operation-res-2024/marketing/*"]即可。如果使用七彩云对象存储,可以直接在控制台的权限配置页选择对应目录,勾选对应用户,系统会自动生成策略,无需手动编写路径。
4. 桶策略和IAM策略的优先级哪个更高?
S3的权限判定遵循「显式拒绝 > 显式允许 > 默认拒绝」的规则,桶策略和IAM策略只要有一个显式允许该操作,且没有任何策略显式拒绝,就可以正常访问。一般多用户访问同一个桶的场景推荐用桶策略,单个用户访问多个资源的场景推荐用IAM策略。
八、总结
S3对象存储的权限配置核心流程可归纳为四步:首先创建对应的身份实体并妥善保存访问凭证,其次根据业务场景选择IAM策略或桶策略完成权限规则配置,再开启公共访问块避免权限溢出,最后通过控制台或CLI核验权限符合预期即可。
新手配置时建议优先使用服务商提供的预设策略,不要一开始就编写复杂的自定义策略,避免语法错误;权限配置遵循最小权限原则,仅给用户分配实际需要的操作权限,访问密钥定期更换,不要分享给无关人员。如果想要降低配置门槛、减少出错概率,也可以选择七彩云对象存储这类兼容S3且提供可视化权限配置的服务,大幅缩短配置流程。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网