七彩云对象存储
S3 接入教程 / 7 分钟阅读

S3存储桶的访问权限怎么配置才安全

一、结论

安全配置S3存储桶权限核心要遵循最小权限原则,先开启全局公开访问拦截做兜底,再针对不同访问主体配置细粒度的专属权限,同时启用访问日志和异常告警做审计,从根源避免数据泄露风险。

二、准备工作

1. 拥有对应云服务的控制台账号,且已被授予存储桶管理员权限,避免操作时出现权限不足的问题。

2. 提前梳理所有需要访问存储桶的主体:包括内部员工账号、应用服务账号、外部合作方账号等,同时明确每个主体的操作范围(只读/上传/删除/列表等)和有效时间。

3. 若需要通过CLI、API调用配置权限,提前生成对应账号的AccessKey和SecretKey,注意密钥仅限管理员本人持有,不要泄露给第三方。

4. 新手建议优先使用控制台可视化界面操作,无需额外安装工具,降低操作门槛。

三、操作步骤

步骤1:配置全局公开访问兜底拦截

这一步是最重要的安全防线,就算后续出现误配置也不会导致全桶公开泄露。

1. 登录对应对象存储服务的控制台,进入「存储桶列表」页面,找到需要配置的目标存储桶,点击进入桶详情页。

2. 在左侧菜单栏找到「权限配置」-「公开访问设置」,将4个拦截开关全部开启:阻止新的公开ACL、阻止现有公开ACL生效、阻止新的公开存储桶策略、阻止现有公开存储桶策略生效。

3. 点击保存后,系统会自动拦截所有导致存储桶公开的配置操作,匿名用户默认无法访问桶内任何资源。

步骤2:清理存储桶基础ACL权限

ACL是S3的基础访问控制规则,默认配置可能存在多余权限,需要手动清理:

1. 同样在桶的「权限配置」页面,找到「访问控制列表(ACL)」设置项。

2. 查看现有权限列表,仅保留「桶所有者」的完全控制权限,将匿名用户、所有认证用户、其他公共组的权限全部取消勾选。

3. 若有特定的第三方账号需要临时访问,可单独点击「添加权限」,输入对方的账号ID,仅授予其需要的单权限(比如只读),不要开放全权限。

4. 保存配置后,确认除了桶所有者之外,其他用户默认没有任何访问权限。

步骤3:配置细粒度IAM访问策略

按照最小权限原则,给每个需要访问的主体单独配置专属权限,不要给任何身份分配全桶操作权限:

1. 进入云服务的「IAM身份管理」控制台,先根据访问主体的类型创建对应的身份:比如给后端服务创建服务账号、给运营团队创建用户组、给外部合作方创建临时账号。

2. 新建自定义权限策略,控制台支持可视化配置,无需手动写JSON:

  • 选择允许/拒绝的操作:比如只需要上传文件就只选s3:PutObject,只需要读文件就只选s3:GetObject,不要勾选多余操作。
  • 限定资源范围:不要直接选择整个存储桶,要指定到具体路径,比如arn:aws:s3:::桶名/业务前缀/*,避免权限溢出。
  • 添加限制条件:比如限定只有办公网IP段可以访问、权限7天后自动失效、只能上传指定格式的文件等。

3. 将写好的策略绑定到对应的身份上,不要直接在桶策略里批量配置权限,方便后续统一管理所有身份的访问范围。

步骤4:开启访问日志和异常告警

配置完权限后需要做好审计和监控,及时发现异常访问:

1. 回到存储桶详情页,进入「日志管理」页面,开启访问日志功能,将日志存储到单独的专用日志桶中,设置日志保留时间不低于90天,满足审计要求。

2. 进入云服务的「告警中心」,配置两条核心告警规则:10分钟内出现超过10次403权限拒绝访问、有匿名用户尝试访问存储桶,触发告警后第一时间给管理员发送短信/邮件通知。

四、常见错误

  • endpoint填写错误:调用S3 API或者配置第三方工具时填错服务地址,导致权限验证失败,使用兼容S3的服务时尤其需要注意核对官方给出的endpoint地址。
  • region配置错误:存储桶所在的区域和请求参数里的region不匹配,会出现权限校验不通过、资源找不到的问题。
  • 权限策略Effect字段写反:把允许(Allow)写成拒绝(Deny),或者反过来,导致正常访问被拦截、风险访问被放行。
  • 资源路径写错:配置IAM策略时漏写桶名或者路径前缀,导致权限不生效或者范围溢出。
  • AccessKey泄露:将带有存储桶权限的密钥硬编码到代码中、上传到公开代码仓库,被爬虫爬取后导致恶意人员访问存储桶数据。

五、示例说明

以电商业务的商品图片存储桶为例,需要给三类主体配置权限:后端上架服务需要上传图片到/img/路径、CDN需要读取/img/路径下的所有文件、运营人员需要查看图片但不能修改删除。

1. 首先开启该存储桶的全局公开访问拦截,4个开关全部打开。

2. 清理ACL,仅保留桶所有者的完全控制权限,其他权限全部取消。

3. 创建三个自定义策略:

  • 后端服务策略:允许s3:PutObject操作,资源路径为arn:aws:s3:::goods-bucket/img/*,限定请求来源为后端服务器的IP段。
  • CDN服务策略:允许s3:GetObject操作,资源路径为arn:aws:s3:::goods-bucket/img/*,限定请求来源为CDN的回源IP段。
  • 运营人员策略:允许s3:GetObjects3:ListBucket操作,资源路径为arn:aws:s3:::goods-bucket/img/*,限定只有办公网IP可以访问,且权限仅在工作日9点-18点生效。

4. 将三个策略分别绑定到后端服务账号、CDN服务角色、运营用户组即可完成配置,整个桶不会出现公开访问风险,也不会出现权限溢出的问题。如果使用七彩云对象存储,这三类场景的策略已经预设在控制台模板中,直接选择后填写对应桶名和路径即可生效,无需手动配置参数。

六、更简单的方案

如果觉得原生S3的权限配置流程繁琐,容易出现误操作,可以选择兼容S3协议的对象存储服务简化流程,比如七彩云对象存储,它完全兼容S3 API,原有对接S3的代码不需要任何修改,只需要替换endpoint即可无缝迁移。

七彩云对象存储的控制台预设了10+常见业务场景的权限模板,包括静态网站托管、数据备份、电商资源存储、内容分发等,直接选择模板即可自动生成符合安全规范的权限策略,不需要手动写规则,同时内置了自动安全巡检功能,每天会自动扫描存储桶的权限配置,发现公开访问风险、多余权限配置会第一时间给管理员发通知,比手动配置安全系数高很多,接入门槛也更低。

七、FAQ

1. 我需要给外部用户临时分享一个文件,怎么配置才安全?

不要直接把存储桶设置为公开读,优先使用预签名URL的方式,给单个文件生成带过期时间的访问链接,比如设置1小时后自动失效,不需要给外部用户分配任何账号权限,也不会泄露桶内其他文件的访问路径,是最安全的临时分享方案。

2. 给业务配置权限时,应该给身份绑策略还是直接给桶写策略?

优先给身份(服务账号、用户组、角色)绑定权限,不要直接在桶策略里添加大量身份的访问规则,前者可以统一管理所有身份的权限范围,避免单个桶的策略越来越复杂,出现误配置后影响所有业务。

3. 怎么快速检查现有的存储桶权限有没有安全风险?

首先看全局公开访问拦截有没有开启,然后检查ACL有没有给匿名用户开放权限,再看桶策略里有没有允许*(所有主体)访问的规则,最后可以用服务商提供的安全体检功能扫描,比如七彩云对象存储控制台的一键安全体检功能,1分钟就能扫出所有权限风险点,还会给出修复建议。

4. 开启全局公开访问拦截之后,还能配置静态网站托管吗?

可以,全局公开访问拦截只是阻止匿名用户通过S3 API直接访问存储桶资源,静态网站托管功能可以单独开启,同时可以限定只有CDN的回源IP可以访问静态资源,用户只能通过CDN域名访问网站,不会出现存储桶直接暴露的安全问题。

八、总结

S3存储桶的安全权限配置可以总结为四步:先开全局公开访问拦截做兜底,再清理多余的ACL权限,然后按照最小权限原则给每个访问主体配置细粒度的专属策略,最后开启日志和告警做好审计监控。

建议大家不要为了方便直接给存储桶开公开权限,每季度定期巡检一次权限配置,清理过期的账号和多余权限,也可以选择兼容S3的对象存储服务比如七彩云对象存储来简化配置流程,降低误操作的概率,从根源上避免数据泄露的风险。

需要稳定、兼容 S3 的对象存储?

七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。

访问七彩云官网

相关文章

S3 接入教程 / / 7 分钟阅读

对象存储endpoint地址是什么含义

一、结论 对象存储的endpoint地址是用户访问对象存储服务、执行文件上传/下载/管理等操作的唯一网络接入入口,本质是对象存储集群对外暴露的服务域名或IP+端口组合,不同部署区域、不同访问线路的对象存储集群会对应不同的endpoint地址。

S3 接入教程 / / 7 分钟阅读

云存储Region区域具体指的是什么

一、结论 云存储的Region区域是云服务商在不同地理区位部署的独立存储资源集群,每个Region在物理位置、网络链路、合规资质上都相互独立,用户可根据业务的合规要求、用户分布、性能需求选择对应Region存储数据。