TL;DR
- 场景: 多团队与跨账号协作下,OSS 需同时满足公开访问、最小权限与可审计
- 结论: 身份用 RAM Policy,来源与资源约束用 Bucket Policy,ACL 仅用于公开读等简单场景;显式拒绝优先
- 产出: 权限控制选型思路 + 策略示例 + 常见错误速查
控制方式
1. ACL(访问控制列表)
Bucket ACL:
- private: 仅 Owner 可访问
- public-read: 所有人可读,仅 Owner 可写
- public-read-write: 所有人可读写
Object ACL:
- private: 仅 Owner 可访问
- public-read: 所有人可读,仅 Owner 可写
- public-read-write: 所有人可读写
- default: 继承 Bucket ACL
2. RAM Policy
RAM(Resource Access Management)是阿里云身份管理与访问控制的核心组件:
- Principal: 指定被授权的 RAM 用户或角色
- Action: 定义允许或拒绝的具体 API 操作
- Resource: 限定策略适用的资源范围
- Condition: 设置策略生效的附加条件(如 IP 地址、访问时间)
3. Bucket Policy
基于资源的授权策略,支持:
- 图形化配置界面
- 跨账号访问授权
- 基于 IP、Referer 条件设置访问限制
- 支持 HTTPS 强制访问
示例策略:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "oss:GetObject",
"Resource": "acs:oss:*:*:examplebucket/*",
"Condition": {
"IpAddress": {"oss:SourceIp": ["192.168.0.0/24"]}
}
}
]
}
核心要点
- 组合思路: 身份用 RAM Policy,资源与来源用 Bucket Policy,ACL 仅用于公开读等简单场景
- 判定规则: 显式拒绝优先(Deny > Allow)
- 最小权限原则: 按需授权,避免过度开放
- 审计追踪: RAM 用户操作会记录在 ActionTrail 中
常见错误码
| 错误码 | 说明 |
|---|---|
| AccessDenied | 访问被拒绝,权限不足 |
| SignatureDoesNotMatch | 签名不匹配 |
| InvalidAccessKeyId | 无效的 AccessKey |
| NoSuchBucket | Bucket 不存在 |
| NoSuchKey | Object 不存在 |
| Forbidden | 禁止访问 |