全部产品
Search
文档中心

对象存储 OSS:通过RAM Policy设置授权策略

更新时间:Jan 14, 2026

RAM Policy是基于身份的授权策略,专门用于集中管理用户身份对OSS资源的访问权限。通过RAM Policy可精确定义“哪个身份”、“在什么条件下”、“可以对哪些OSS资源”、“执行何种操作”,实现权限精细化管控,保障企业数据安全。

工作原理

RAM Policy采用基于身份的授权模式,授权主体为RAM中的身份实体(RAM用户、用户组、RAM角色)。权限评估严格遵循“显式拒绝优先”原则,OSS收到访问请求后,系统综合评估所有相关策略(包括RAM Policy和Bucket Policy),按以下顺序进行权限判定:

  1. 显式拒绝(Deny)优先:任何策略中存在一条明确的"Effect": "Deny"规则匹配该请求,请求立即被拒绝

  2. 寻找显式允许(Allow):不存在匹配的Deny规则时,系统查找是否存在一条明确的"Effect": "Allow"规则匹配该请求。匹配成功时,请求被允许

  3. 默认拒绝:既无匹配的Deny规则,也无匹配的Allow规则时,请求默认被拒绝

OSS支持两种权限策略类型:系统策略和自定义策略。系统策略由阿里云创建和维护,用户只能使用不能修改。自定义策略由用户创建和维护,可自主进行创建、更新和删除操作。

授权系统权限策略

系统权限策略由阿里云创建,可在RAM控制台直接为用户身份授权。以下以RAM用户为例演示授权步骤。

  1. 前往RAM用户列表,单击目标用户操作列的添加权限

  2. 在搜索框中输入系统策略名称,勾选目标系统策略。OSS支持以下两种系统策略:

  3. 单击确认新增授权,完成权限设置。

授权自定义权限策略

自定义策略由用户自主创建和维护,授权自定义权限策略时,需先创建自定义权限策略,再为对应的用户身份进行授权。

步骤一:创建自定义权限策略

  1. 前往权限策略列表,单击创建权限策略

  2. 选择脚本编辑,在编辑框内输入JSON格式的授权策略。可使用RAM Policy Editor快速生成授权策略。

    示例授权策略:允许对example-bucket及该Bucket内所有资源的全部操作。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:*",
          "Resource": [
            "acs:oss:*:*:example-bucket",
            "acs:oss:*:*:example-bucket/*"
          ]
        }
      ]
    }

    完整的授权策略包含Version(版本号)和Statement(授权语句)。

    • Version:权限策略版本,固定为1,不允许修改。

    • Statement:策略语句的主体,包含一条或多条具体的授权/拒绝规则。每条授权语句包含Effect(授权效力)、Action(授权操作)、Resource(授权资源)和Condition(授权条件)。

      策略元素

      说明

      Effect

      策略的效力,可选值为Allow(允许)或Deny(拒绝)。

      Action

      对资源执行的具体操作,支持使用通配符*

      Resource

      策略作用的资源范围。

      Condition

      策略生效的条件。

      当配置多个条件时,所有条件必须同时满足(AND关系),策略才会生效。

      完整的授权元素列表请参见OSS授权语法与元素

  3. 单击确定,输入策略名称,然后单击确定,完成自定义策略创建。

步骤二:为用户身份进行授权

创建自定义权限策略后,需要将自定义策略授权给目标用户身份。以下以RAM用户为例演示授权步骤。

  1. 前往RAM用户列表,单击目标用户操作列的添加权限

  2. 在搜索框中输入自定义策略名称,勾选目标策略。

  3. 单击确认新增授权,完成权限设置。

常见授权场景

以下场景展示了RAM Policy在实际业务中的典型应用,涵盖权限授予、访问限制和安全控制等多种需求。每个场景提供完整的策略配置示例,可根据实际需求修改其中的Bucket名称、目录路径等参数后直接使用。

场景1:授予RAM用户对某个Bucket的完全控制权限

以下示例为授予RAM用户对名为mybucket的Bucket拥有完全控制的权限。

重要

对于移动应用来说,授予用户对Bucket的完全控制权限存在极高风险,应尽量避免。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:*",
      "Resource": [
        "acs:oss:*:*:mybucket",
        "acs:oss:*:*:mybucket/*"
      ]
    }
  ]
}

场景2:禁止RAM用户删除某个Bucket下匹配特定模式文件的权限

以下示例为禁止RAM用户删除名为mybucket的Bucket下前缀为abc且格式为.txt的所有文件。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:DeleteObject"
      ],
      "Resource": [
        "acs:oss:*:*:mybucket/abc*.txt"
      ]
    }
  ]
}

场景3:授予RAM用户列举并读取某个Bucket下所有资源的权限

  • 以下示例为授予RAM用户通过OSS SDK或OSS命令行工具列举并读取名为mybucket的Bucket下所有资源的权限。

    说明

    ListObjects操作(Action)必须以整个Bucket作为Resource。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:ListObjects",
          "Resource": "acs:oss:*:*:mybucket"
        },
        {
          "Effect": "Allow",
          "Action": "oss:GetObject",
          "Resource": "acs:oss:*:*:mybucket/*"
        }
      ]
    }
  • 以下示例为授予RAM用户通过OSS控制台列举并读取名为mybucket的Bucket下所有资源的权限。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketStat",
            "oss:GetBucketInfo",
            "oss:GetBucketTagging",
            "oss:GetBucketLifecycle",
            "oss:GetBucketWorm",                      
            "oss:GetBucketVersioning", 
            "oss:GetBucketAcl" 
          ],    
          "Resource": "acs:oss:*:*:*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects",
            "oss:GetBucketAcl"
          ],
          "Resource": "acs:oss:*:*:mybucket"
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject",
            "oss:GetObjectAcl"
          ],
          "Resource": "acs:oss:*:*:mybucket/*"
        }
      ]
    }

场景4:禁止RAM用户删除某个Bucket的权限

以下示例用于禁止RAM用户删除名为mybucket的Bucket的权限。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:*",
      "Resource": [
        "acs:oss:*:*:mybucket",
        "acs:oss:*:*:mybucket/*"
      ]
    },
    {
      "Effect": "Deny",
      "Action": [
        "oss:DeleteBucket"
      ],
      "Resource": [
        "acs:oss:*:*:mybucket"
      ]
    }
  ]
}

场景5:授予RAM用户访问某个Bucket下多个目录的权限

假设用于存放照片的Bucket为mybucket,该Bucket下有一些目录,代表照片的拍摄地,每个拍摄地目录下还包含年份子目录。

mybucket[Bucket]
  ├── beijing
  │   ├── 2014
  │   └── 2015
  └── hangzhou
      ├── 2014
      └── 2015 

需要授予RAM用户访问mybucket/hangzhou/2014/mybucket/hangzhou/2015/目录的只读权限。目录级别的授权属于授权的高级功能,根据使用场景不同,授权策略的复杂程度也不同,以下几种场景可供参考。

  • 授予RAM用户仅拥有读取目录mybucket/hangzhou/2014/mybucket/hangzhou/2015/中文件内容的权限。

    由于RAM用户知道文件的完整路径,建议直接使用完整的文件路径来读取目录下的文件内容。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket/hangzhou/2014/*",
            "acs:oss:*:*:mybucket/hangzhou/2015/*"
          ]
        }
      ]
    }
  • 授予RAM用户使用OSS命令行工具访问目录mybucket/hangzhou/2014/mybucket/hangzhou/2015/并列举目录中文件的权限。

    RAM用户不清楚目录中有哪些文件,可使用OSS命令行工具或API直接获取目录信息,此场景下需要添加ListObjects权限。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket/hangzhou/2014/*",
            "acs:oss:*:*:mybucket/hangzhou/2015/*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket"
          ],
          "Condition":{
            "StringLike":{
              "oss:Prefix": [
                "hangzhou/2014/*",
                "hangzhou/2015/*"
              ]
            }
          }
        }
      ]
    }
  • 授予RAM用户使用OSS控制台访问目录的权限。

    使用OSS控制台访问目录mybucket/hangzhou/2014/mybucket/hangzhou/2015/时,RAM用户可从根目录开始,逐层进入要访问的目录。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketStat",
            "oss:GetBucketInfo",
            "oss:GetBucketTagging",
            "oss:GetBucketLifecycle",
            "oss:GetBucketWorm",                      
            "oss:GetBucketVersioning", 
            "oss:GetBucketAcl" 
          ], 
          "Resource": [
            "acs:oss:*:*:*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject",
            "oss:GetObjectAcl"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket/hangzhou/2014/*",
            "acs:oss:*:*:mybucket/hangzhou/2015/*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket"
          ],
          "Condition": {
            "StringLike": {
              "oss:Delimiter": "/",
              "oss:Prefix": [
                "",
                "hangzhou/",
                "hangzhou/2014/*",
                "hangzhou/2015/*"
              ]
            }
          }
        }
      ]
    }

场景6:禁止RAM用户删除某个Bucket下任意文件的权限

以下示例用于禁止RAM用户删除名为mybucket的存储空间下任意文件的权限。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:DeleteObject"
      ],
      "Resource": [
        "acs:oss:*:*:mybucket/*"
      ]
    }
  ]
}

场景7:禁止RAM用户访问指定标签Object的权限

以下为添加Deny策略,用于禁止RAM用户访问存储空间examplebucket下对象标签为status:ok以及key1:value1的Object的权限。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:GetObject"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:examplebucket/*"
      ],
      "Condition": {
        "StringEquals": {
          "oss:ExistingObjectTag/status":"ok",
          "oss:ExistingObjectTag/key1":"value1"
        }
      }
    }
  ]
}

场景8:授予RAM用户通过特定的IP地址访问OSS的权限

  • Allow授权中增加IP地址限制。

    以下示例为在Allow授权中增加IP地址限制,授予RAM用户仅允许通过192.168.0.0/16198.51.100.0/24两个IP地址段读取名为mybucket的Bucket下所有资源的权限。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketStat",
            "oss:GetBucketInfo",
            "oss:GetBucketTagging",
            "oss:GetBucketAcl" 
          ], 
          "Resource": [
            "acs:oss:*:*:*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects",
            "oss:GetObject"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket",
            "acs:oss:*:*:mybucket/*"
          ],
          "Condition":{
            "IpAddress": {
              "acs:SourceIp": ["192.168.0.0/16", "198.51.100.0/24"]
            }
          }
        }
      ]
    }
  • Deny授权中增加IP地址限制。

    以下示例为在Deny授权中增加IP地址限制,禁止源IP地址不在192.168.0.0/16范围内的RAM用户对OSS执行任何操作。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketStat",
            "oss:GetBucketInfo",
            "oss:GetBucketTagging",
            "oss:GetBucketAcl" 
          ], 
          "Resource": [
            "acs:oss:*:*:*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects",
            "oss:GetObject"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket",
            "acs:oss:*:*:mybucket/*"
          ]
        },
        {
          "Effect": "Deny",
          "Action": "oss:*",
          "Resource": [
            "acs:oss:*:*:*"
          ],
          "Condition":{
            "NotIpAddress": {
              "acs:SourceIp": ["192.168.0.0/16"]
            }
          }
        }
      ]
    }
    说明

    由于权限策略的鉴权规则是Deny优先,所以访问者从192.168.0.0/16以外的IP地址访问mybucket中的内容时,OSS会提示没有权限。

场景9:通过RAM或STS服务向其他用户授权

通过RAM或STS服务授予IP地址为192.168.0.1的用户使用Java SDK客户端执行以下操作。

  • 列举mybucket中以foo为前缀的对象。

  • 允许向mybucket中上传、下载和删除以file开头的对象。

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:GetBucketAcl",
        "oss:ListObjects"
      ],
      "Resource": [
        "acs:oss:*:177530505652xxxx:mybucket"
      ],
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "acs:UserAgent": "java-sdk",
          "oss:Prefix": "foo"
        },
        "IpAddress": {
          "acs:SourceIp": "192.168.0.1"
        }
      }
    },
    {
      "Action": [
        "oss:PutObject",
        "oss:GetObject",
        "oss:DeleteObject"
      ],
      "Resource": [
        "acs:oss:*:177530505652xxxx:mybucket/file*"
      ],
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "acs:UserAgent": "java-sdk"
        },
        "IpAddress": {
          "acs:SourceIp": "192.168.0.1"
        }
      }
    }
  ]
}

场景10:禁止将 Bucket 和 Object 的 ACL 设置为公共访问

以下示例用于禁止将Bucket和Object的ACL设置为公共访问,保障OSS数据安全。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:PutBucket",
        "oss:PutBucketAcl"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "oss:x-oss-acl": "private"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "oss:PutObject",
        "oss:PutObjectAcl"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "oss:x-oss-object-acl": [
            "private",
            "default"
          ]
        }
      }
    }
  ]
}

场景11:授予RAM用户使用IMM相关功能的权限

以下RAM Policy用于授予RAM用户使用IMM文档处理的权限。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:GetObject",
        "oss:PutObject",
        "oss:PostProcessTask",
        "oss:ProcessImm"
      ],
      "Resource": "*"
    },
    {
      "Action": [
        "imm:CreateOfficeConversionTask",
        "imm:GetWebofficeURL"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Effect": "Allow",
      "Action": "ram:PassRole",
      "Resource": "acs:ram:*:*:role/aliyunimmdefaultrole"
    }
  ]
}

场景12:授予RAM用户转换存储冗余类型的权限

  • 授予RAM用户转换某个Bucket存储冗余类型的权限。

    以下示例为RAM用户授予转换mybucket的存储冗余类型的权限。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:CreateBucketDataRedundancyTransition",
            "oss:GetBucketDataRedundancyTransition",
            "oss:ListBucketDataRedundancyTransition",
            "oss:DeleteBucketDataRedundancyTransition"
          ],
          "Resource": "acs:oss:*:*:mybucket"
        }
      ]
    }
  • 授予RAM用户转换所有Bucket存储冗余类型的权限。

    重要

    以下示例会授予RAM用户转换阿里云账号下所有Bucket的存储冗余类型的权限,请谨慎操作。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:CreateBucketDataRedundancyTransition",
            "oss:GetBucketDataRedundancyTransition",
            "oss:ListBucketDataRedundancyTransition",
            "oss:DeleteBucketDataRedundancyTransition"
          ],
          "Resource": "acs:oss:*:*:*"
        }
      ]
    }

场景13:授予RAM用户创建OSS资源包订单的权限

以下RAM Policy用于授予RAM用户创建OSS资源包订单的权限。

重要

RAM用户创建OSS资源包订单后,可联系云账号拥有者完成订单支付。如果要使RAM用户能够完成OSS资源包订单支付,云账号拥有者需要授予RAM用户支付订单的权限bss:PayOrderbss:PayOrder属于高危权限,涉及资金操作,非必要请勿授予。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:CreateOrder",
      "Resource": "acs:oss:*:*:*"
    }
  ]
}

场景14:授予RAM用户开通OSS的权限

以下RAM Policy用于授予RAM用户开通OSS的权限。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:ActivateProduct",
      "Resource": "acs:oss:*:*:*"
    }
  ]
}

场景15:授予RAM用户读写指定标签Bucket数据的权限

以下RAM Policy用于授予RAM用户读写指定标签Bucket数据的权限,标签键为key1,标签值为value1。

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:ListBuckets",
        "oss:GetBucketStat",
        "oss:GetBucketInfo",
        "oss:GetBucketAcl",
        "oss:ListObjects",
        "oss:PutObject",
        "oss:GetObject"
      ],
      "Resource": [
        "acs:oss:*:*:*"
      ],
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "oss:BucketTag/key1": "value1"
        }
      }
    }
  ]
}
说明

策略生效后,RAM用户仅能对带有标签key1=value1的OSS Bucket执行指定操作。不同访问方式的行为特性如下:

  • 通过OSS SDK或ossutil发起ListBuckets请求时,需添加标签过滤参数(如tag-key=key1,tag-value=value1)。策略配置正确时,返回结果仅包含符合指定标签条件的Bucket。

  • 通过OSS控制台发起ListBuckets请求时,由于控制台无法附加标签参数,请求将因不满足策略条件限制(oss:BucketTag/key1=value1)而被拒绝,系统提示权限不足。

  • 其他操作(如PutObjectGetObject等)同样受标签条件限制,操作的目标Bucket必须满足key1=value1的标签要求。

应用于生产环境

在配置RAM Policy和管理RAM身份时,遵循以下安全最佳实践,可有效降低数据泄露风险并确保权限管控的精确性:

  • 遵循最小权限原则:始终只授予执行任务所必需的最小权限集。避免使用oss:*这样宽泛的授权,除非绝对必要。通过最小权限原则可减少潜在的攻击面,降低权限滥用和误操作风险。

  • 使用RAM角色和STS临时凭证:对于应用程序,尤其是部署在ECS或容器中的应用,建议使用RAM角色并获取STS临时凭证来访问OSS。相比长期AccessKey,临时凭证具备自动过期机制,避免将长期AccessKey硬编码在代码或配置文件中,显著降低了AK泄露的风险。

  • 人员用户与程序用户分离:为不同的人员和应用程序创建独立的RAM用户,实现身份管理的专业化和权限的精细控制。

    • 人员用户:设置控制台访问,使用账号和密码访问云产品控制台,推荐开启MFA多因素认证。

    • 程序用户:设置使用永久AccessKey访问,通过访问密钥调用API访问云资源。

  • AccessKey安全管理

    • 不要把RAM用户的AccessKey ID和AccessKey Secret保存在工程代码中,否则可能导致AK泄露。

    • 建议使用STS或环境变量等方式获取访问授权。

    • 定期轮换AccessKey。

  • RAM角色安全建议

    • 创建RAM角色后,请勿随意变更RAM角色的可信实体,避免影响业务或带来过度授权风险。

    • 设置合理的STS Token有效期,避免有效期过长带来安全风险。

  • 定期审计权限:定期检查并清理不再需要的RAM用户和权限策略,确保权限与当前业务需求保持一致。

  • 利用Condition加强安全:在策略中添加Condition,例如限制源IP或VPC,通过多维度条件约束为数据访问增加额外的安全防线。

相关文档