首页/系统与基础设施/存储速查/S3 桶策略与访问控制机制
分布式与对象存储70 条

S3 桶策略与访问控制机制

S3 通过 JSON 策略描述主体、资源、动作与条件,按显式拒绝优先、默认拒绝的原则评估;桶策略与身份策略叠加生效,最小权限、公开读限定前缀、写操作附加加密条件是三条常用加固经验。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​​‌‌​​‌‌​​‌​‌‌​‌​‌‌​​​‌​​‌‌‌​‌​‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​‌​​​​‌​‌‌​‌​‌‌‌​​​​​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌​​​​‌​‌‌​​​‌‌​‌‌​​​‌‌​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌​‌‌​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

策略驱动授权

S3 的访问控制以结构化策略为核心:策略里写明谁(主体)、对哪些资源(桶或键前缀)、能做哪些动作(Action)、在什么条件下(来源地址、加密要求、标签等)被允许或拒绝。评估时机把显式拒绝放在最高优先级,因此一条精准的拒绝规则可以覆盖所有宽松的允许规则。

基本信息

策略形式JSON 文档,含效果、主体、动作、资源、条件五要素
策略类型桶策略(资源侧)、身份策略(账号侧)
评估原则显式拒绝优先,默认拒绝,只有被允许才放行
权限要求配置策略需要桶的拥有者或等价管理权限

常见授权场景

  • 只读公开:允许匿名读取指定前缀,用于静态站点与 CDN 源站
  • 跨账号共享:给合作方账号授予指定桶前缀的读写权限
  • 强制加密:条件里要求必须使用加密头,否则拒绝写入
  • 限制来源:只允许指定网段或指定网关访问,屏蔽直接公网访问
  • 按标签隔离:以对象标签作为条件,实现数据分级访问控制

策略结构示意

策略结构示意
# 读法:谁 -> 在什么条件下 -> 对哪些资源 -> 做什么
# Effect     : Allow / Deny
# Principal  : 账号、用户或匿名访问者
# Action     : s3:GetObject、s3:PutObject、s3:ListBucket 等
# Resource   : 桶本身与对象路径,对象路径用通配符匹配前缀
# Condition  : 来源地址、是否加密、标签、时间等约束
# 注意:桶级动作与对象级动作要分别授权,混在一起会出现列举成功但读取被拒

策略要素与易错点

要素作用常见错误
Principal指定被授权方匿名访问的写法不当,导致整桶对外开放
Resource指定桶与对象路径只授权对象却期望能列举桶
Action指定允许的操作用通配符覆盖了删除等高风险动作
Condition附加约束条件取值写错导致策略永远不生效

加固建议

  • 从默认拒绝出发,只添加业务真正需要的动作,不用通配符省事
  • 把公开读限定到具体前缀,明确禁止对桶的列举权限
  • 对写操作附加加密条件,防止明文对象落盘
  • 定期用访问日志核对策略是否被绕过,特别是公网直连的请求
  • 变更策略前先在测试桶验证,策略错误会立刻影响线上读取
桶策略与身份策略是叠加生效的:两边都允许才放行(显式拒绝除外),排查「权限明明给了还是被拒」时要把两侧一起看。
把桶设为匿名可读且允许列举,等于把全部对象清单公开;即使单个对象不含敏感信息,清单本身也是重要的信息泄露面。

易错点

  • 为了调试方便给匿名主体授予全桶通配权限,事后长期未回收
  • 只授权对象读取却期望能列举,出现「能读但列不出来」的困惑
  • 条件里写错取值格式,策略语法正确但永不匹配,权限表现与预期相反
  • 策略变更没有版本与评审记录,出问题无法快速定位是哪次改动引入的

数据来源与参考

  • Amazon S3 官方文档:桶策略与策略评估逻辑
  • Amazon S3 官方文档:策略条件键(Condition Keys)

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/s3-bucket-policy-access-control.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​​‌‌​​‌‌​​‌​‌‌​‌​‌‌​​​‌​​‌‌‌​‌​‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​‌​​​​‌​‌‌​‌​‌‌‌​​​​​‌‌​‌‌‌‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌‌​​‌​​‌​‌‌​‌​‌‌​​​​‌​‌‌​​​‌‌​‌‌​​​‌‌​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌​‌‌​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​