Bucket Policy是阿里云OSS推出的针对Bucket的授权策略,您可以通过Bucket Policy授权其他用户访问您指定的OSS资源。

背景信息

  • Bucket Owner可以在OSS控制台通过图形化和策略语法两种方式配置Bucket Policy。通过策略语法的方式配置Bucket Policy前,您需要先了解OSS Action、Resource以及Condition分类信息。详情请参见RAM Policy概述
  • 配置Bucket Policy时,如果授权用户选择了匿名账号(*),且不包含Condition的情况下,则Bucket Policy仅对Bucket Owner以外的所有用户生效。如果授权用户选择了匿名账号(*),且包含Condition的情况下,则Bucket Policy会对包含Bucket Owner在内的所有用户生效。
  • 您可以添加多条Bucket Policy,但所有Bucket Policy的大小不允许超过16 KB。

方式一:图形化配置Bucket Policy

  1. 登录OSS管理控制台
  2. 单击Bucket列表,然后单击目标Bucket名称。
  3. 单击文件管理页签,然后单击授权
    您也可以通过单击 权限管理 > Bucket授权策略 > 设置,添加授权策略。
  4. 图形设置页面,单击新增授权
  5. 新增授权页面配置各项参数,然后单击确定
    配置项 说明
    授权资源 授权整个Bucket或Bucket内的部分资源供其他用户访问。
    • 整个Bucket:授权策略针对整个Bucket生效。
    • 指定资源:授权策略只针对指定的资源生效。您可以配置多条针对指定资源的授权策略。
      • 针对目录级别授权

        授权访问目录下的所有子目录和文件时,需在目录结尾处加上星号(*)。例如授权访问abc目录下的所有子目录和文件,则填写为abc/*

      • 针对指定文件授权

        授权访问目录下的指定文件时,需填写不包含Bucket名称在内的文件的完整路径,例如授权访问abc目录下的myphoto.png文件,则填写为abc/myphoto.png

    授权用户 通过选择不同类型的账号将资源授权给不同用户进行访问。
    • 匿名账号(*):如果您需要给所有用户授权访问指定资源,请选中此项。
    • 子账号:如果您需要给当前账号下的RAM用户授权访问指定资源,请选中此项,并从下拉菜单中选择目标RAM用户。若需要授权的RAM用户较多时,建议直接在搜索框输入RAM用户名称关键字进行模糊匹配。
      注意 您的账号必须是阿里云账号,或拥有此Bucket管理权限及RAM控制台ListUsers权限的RAM用户,否则无法查看当前账号的RAM用户列表。给RAM用户授予ListUsers权限的具体操作请参见 为RAM用户授权
    • 其他账号:如果您需要给其他阿里云账号、RAM用户以及通过STS生成的临时用户授予访问权限,请选中此项。
      • 当您需要给其他阿里云账号或RAM用户授权时,请输入被授权账号的UID。
      • 当您需要给STS临时用户授权时,输入格式为arn:sts::{RoleOwnerUid}:assumed-role/{RoleName}/{RoleSessionName}。例如生成临时用户时使用的角色为testrole,角色拥有者的阿里云账号UID为12345,生成临时用户时指定的RoleSessionName为testsession。此时应填写arn:sts::12345:assumed-role/testrole/testsession。当您需要给所有临时用户授权时,请使用通配符星号(*)。例如配置为arn:sts::*:*/*/*。生成临时授权用户的操作请参见使用STS临时访问凭证访问OSS
      注意 当被授权的用户是STS临时用户时,该账号无法通过OSS控制台访问授权资源,您可以通过命令行工具ossutil、OSS SDK、OSS API访问授权资源。
    授权操作 您可以通过简单设置高级设置两种方式进行授权操作。
    • 简单设置
      选中此项后,您可以结合实际场景按照如下说明配置相应的访问权限。将鼠标悬停在每一种访问权限右侧对应的 mark,可获取各访问权限对应的Action列表。
      • 只读:对相关资源拥有查看、列举及下载权限。
      • 读/写:对相关资源有读和写权限。
      • 完全控制:对相关资源有读、写、删除等所有操作权限。
      • 拒绝访问:拒绝对相关资源的所有操作。
      注意
      • 若针对某用户同时配置了多条Bucket Policy规则,则该用户所拥有的权限是所有Policy规则的叠加。当这些Bucket Policy中包含拒绝访问权限时,遵循拒绝访问权限优先原则。例如针对某用户第一次设置了只读权限,第二次设置了读/写权限,则该用户最终的权限为读/写。如果第三次设置了拒绝访问权限,则该用户最终的权限为拒绝访问。
      • 只读、读/写、完全控制对应的授权效力为Allow,拒绝访问对应的授权效力为Deny。
    • 高级设置

      选中此项后,您需要根据以下说明完成相关配置。

      • 效力:包含允许(Allow)和拒绝(Deny)两种授权效力。
      • 操作:支持配置所有OSS支持的Action。有关Action分类的更多信息,请参见RAM Policy概述
    条件(可选) 您还可以在基础设置和高级设置模式下选中此项,用于限定只有满足条件的用户能够访问OSS资源。
    • 访问方式:默认支持HTTP和HTTPS两种访问方式。如果您希望当前授权策略通过HTTPS的方式来访问Bucket资源,请选择HTTPS。如果您希望当前授权策略通过HTTP的方式来访问Bucket资源,请选择HTTP。相比HTTP,HTTPS具有更高的安全性。

      如果您需要强制Bucket内资源的所有请求访问方式为其中一种,例如HTTPS,您需要通过策略语法的方式来实现。具体设置方法,请参见如何配置HTTPS请求和证书?

    • IP =:设置IP等于某个IP地址或IP地址段。如有多个IP地址,各个IP地址之间用英文逗号(,)分隔。
    • IP ≠:设置IP不等于某个IP地址或IP地址段。如有多个IP地址,各个IP地址之间用英文逗号(,)分隔 。
  6. 单击确定

方式二:通过策略语法配置Bucket Policy

  1. 登录OSS管理控制台
  2. 单击Bucket列表,然后单击目标Bucket名称。
  3. 单击文件管理页签,然后单击授权
  4. 策略语法页面,单击编辑
    您可以根据实际使用场景,编辑不同的策略语法,用于实现更精细的权限管理。以下为资源拥有者(UID为 174649585760xxxx)为不同授权场景配置的Bucket Policy示例。
    • 允许匿名用户列举存储空间examplebucket下所有文件的权限。
      {
          "Statement": [
              {
                  "Action": [
                      "oss:ListObjects",
                      "oss:ListObjectVersions"
      
                  ],
                  "Effect": "Allow",            
                  "Principal": [
                      "*"
                  ],            
                  "Resource": [
                      "acs:oss:*:174649585760xxxx:examplebucket"
                  ]
              },
      
          ],
          "Version": "1"
      }
    • 示例2:拒绝源IP地址不在192.168.0.0/16范围内的匿名用户对存储空间examplebucket执行任何操作。
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Deny",
                  "Action": "oss:*",
                  
                  "Principal": [
                      "*"
                  ],            
                  "Resource": [
                      "acs:oss:*:174649585760xxxx:examplebucket"
                  ],
                  "Condition":{
                      "NotIpAddress": {
                          "acs:SourceIp": ["192.168.0.0/16"]
                      }
                  }
              }
          ]
      }
    • 示例3:允许指定的RAM用户(UID为20214760404935xxxx)拥有目标存储空间examplebucket下hangzhou/2020hangzhou/2015目录的只读权限。
      {
          "Statement": [
              {
                  "Action": [
                      "oss:GetObject",
                      "oss:GetObjectAcl",
                      "oss:GetObjectVersion",
                      "oss:GetObjectVersionAcl"
      
                  ],
                  "Effect": "Allow",             
                  "Principal": [
                      "20214760404935xxxx"
                  ],            
                  "Resource": [
                      "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*",
                      "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2015/*"
                  ]
              },
              {
                  "Action": [
                      "oss:ListObjects",
                      "oss:ListObjectVersions"
                  ],
                  "Condition": {
                      "StringLike": {
                          "oss:Prefix": [
                              "hangzhou/2020/*",
                              "hangzhou/2015/*"
                          ]
                      }
                  },
                  "Effect": "Allow",
                  "Principal": [
                      "20214760404935xxxx"
                  ],
                  "Resource": [
                      "acs:oss:*:174649585760xxxx:examplebucket"
                  ]
              }
          ],
          "Version": "1"
      }
  5. 单击保存

访问授权资源

Bucket Policy配置完成后,您可以通过以下方式访问授权资源:

  • 文件URL(仅当授权对象为匿名用户时)

    在浏览器上,使用Bucket默认域名或自有域名加文件路径进行访问。例如http://mybucket.oss-cn-beijing.aliyuncs.com/file/myphoto.png。详情请参见OSS访问域名使用规则

  • 控制台

    登录OSS控制台,在左边菜单栏单击我的访问路径后的加号(+),添加授权访问的Bucket和文件路径。具体操作,请参见设置我的访问路径

  • 命令行工具ossutil

    使用被授权的账号通过ossutil访问授权资源。具体操作,请参见ossutil

  • 图形化工具ossbrowser

    使用被授权的账号登录ossbrowser,登录时在预设OSS路径栏输入被授权访问的文件目录。具体操作,请参见ossbrowser

  • OSS SDK

    支持通过JavaPHPNode.jsPythonBrowser.js.NETAndroidGoiOSC++C SDK访问授权资源。