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"]}
      }
    }
  ]
}

核心要点

  1. 组合思路: 身份用 RAM Policy,资源与来源用 Bucket Policy,ACL 仅用于公开读等简单场景
  2. 判定规则: 显式拒绝优先(Deny > Allow)
  3. 最小权限原则: 按需授权,避免过度开放
  4. 审计追踪: RAM 用户操作会记录在 ActionTrail 中

常见错误码

错误码说明
AccessDenied访问被拒绝,权限不足
SignatureDoesNotMatch签名不匹配
InvalidAccessKeyId无效的 AccessKey
NoSuchBucketBucket 不存在
NoSuchKeyObject 不存在
Forbidden禁止访问