桶权限是什么
对象存储的访问控制有两条线:粗粒度的 ACL(私有、公共读、公共读写)开关式控制整个桶,细粒度的桶策略(Policy)用 JSON 描述「谁能对哪些对象执行哪些操作」,还能附加来源 IP、协议等条件。创建桶默认为私有,一旦误设公共读写,任何人都能上传、覆盖甚至删除文件。
基本信息
| ACL | 私有(默认)/ 公共读 / 公共读写;公共读写几乎不应使用 |
|---|---|
| 桶策略 | JSON Policy:Principal + Action + Resource + Condition |
| 授权叠加 | 接口调用要同时通过 RAM 授权与桶策略,两者取交集 |
| 匿名访问 | 把 Principal 设为通配符即允许匿名,仅适合公开资源 |
| 加固手段 | 限制 Referer、强制 HTTPS、限制源 VPC 或指定 IP 段 |
典型使用场景
- 静态站点资源:只开放某个前缀为匿名只读,其余保持私有
- 跨账号共享:给合作方账号授权读取指定前缀,而不是开放公共读
- 日志投递:允许日志服务写入指定桶与前缀,限制来源服务身份
- 内网访问:用条件限制只能从指定 VPC 或 IP 段读取,避免公网拉取
- 安全审计:定期扫描所有桶的公共访问配置,发现误设立即收敛
匿名只读某前缀的策略
匿名只读某前缀的策略
# Bucket Policy:仅允许匿名读取 public/ 前缀下的对象
{
"Version": "1",
"Statement": [
{"Effect": "Allow",
"Principal": ["*"],
"Action": ["oss:GetObject"],
"Resource": ["acs:oss:*:*:my-bucket/public/*"]}
]
}常见权限组合风险
| 配置 | 风险 | 建议 |
|---|---|---|
| 公共读写 | 任何人可上传覆盖删除 | 立即改为私有并审计已有对象 |
| 公共读整桶 | 目录可被枚举、流量被白嫖 | 只开放必要前缀并加 Referer 限制 |
| 策略与 RAM 同时放开 | 实际权限大于预期,排查困难 | 以最小权限为准,定期比对 |
| 未限制协议 | 明文 HTTP 传输对象 | 条件中强制使用 HTTPS |
一旦误设公共读写,任何人都能上传、覆盖或删除文件。建议开启配置审计的公共访问检测,并让告警直达值班人。
桶策略与账号权限同时存在时取交集:如果 RAM 侧没授权,即使桶策略允许,该子账号依然读不到对象,排查权限问题时两条线都要看。