通过Bucket Policy设置授权策略

Bucket Policy是附加在存储空间(Bucket)上的基于资源的访问控制策略。采用JSON格式精确定义访问规则:指定主体(Principal)在满足特定条件(Condition)时,对目标资源(Resource)可执行的操作(Action)。作为实现跨账号授权、匿名访问控制和基于网络来源等复杂访问限制的核心机制,Bucket Policy提供了细粒度的权限管理能力。

工作原理

Bucket Policy采用基于资源的授权模式,权限评估严格遵循拒绝优先原则。OSS收到访问请求后,系统会综合评估所有相关策略(包括Bucket PolicyRAM Policy)。任何一条策略的明确拒绝(Deny)规则都会立即阻止请求执行,该优先级高于所有允许(Allow)策略。

  • 策略对Bucket Owner的生效规则:

    • 授权用户设置为通配符(*)且不包含Condition,Bucket Policy仅对Bucket Owner以外的所有用户生效

    • 授权用户设置为通配符(*)且包含Condition,Bucket Policy对包含Bucket Owner在内的所有用户生效(包括主账号)

  • 多条Bucket Policy规则叠加原则:

    为同一用户配置多条Bucket Policy规则时,该用户拥有的权限是所有Policy规则的叠加。当这些Bucket Policy中包含拒绝访问权限时,遵循拒绝访问权限优先原则。

配置Bucket的授权策略

OSS提供图形化和语法策略两种配置方式,满足不同场景的配置需求。

  • 图形策略方式:提供直观的操作体验,通过表单化配置覆盖常见授权场景,降低配置门槛。

  • 语法策略方式:采用JSON格式编写完整策略,支持所有高级功能和复杂条件组合,提供最大的配置灵活性。

图形策略方式

  1. 前往Bucket列表,单击目标Bucket。

  2. 在左侧菜单栏单击权限控制 > Bucket授权策略

  3. 选择按图形策略添加,然后单击新增授权,配置授权内容。

    配置项

    说明

    授权资源

    选择授权对象是整个Bucket还是指定资源

    资源路径

    • 授权资源选择整个Bucket时,资源路径bucket-name/*

    • 授权资源选择指定资源时,填写待授权资源的目录或单个Object,支持添加多条记录。

    授权用户

    指定被授权对象。

    • 所有账号(*):授权对象为任何人(包括匿名访问者)。

    • 子账号:选择当前阿里云账号下的RAM用户。

      当前登录账号必须是阿里云主账号或拥有此Bucket管理权限及RAM控制台ListUsers权限的RAM用户,否则无法查看当前账号的RAM用户列表。

    • 其他账号:填写其他待授权账号、子账号的UID或以arn:sts开头的临时授权用户(如arn:sts::1798************:assumed-role/role-name/session-name)。支持授权给多个用户,一行填写一个。

      当被授权的对象是RAM角色时,该账号无法通过OSS控制台访问授权资源,需通过命令行工具ossutil、SDK、API等方式进行访问。

    授权操作

    • 简单设置:选择常见的授权操作组合,可选的设置项包括只读(不包含ListObject操作)只读(包含ListObject操作)读/写完全控制拒绝访问

      说明

      为确保OSS-HDFS服务用户能正常访问.dlsdata/目录及其下的任意Object,在为开通了OSS-HDFS服务的Bucket配置Bucket Policy时,禁止设置拒绝访问的授权操作。

    • 高级设置:自定义授权效力允许拒绝)和授权操作

    条件(可选)

    设置授权的生效条件。

    • 访问方式:可选项包括HTTPSHTTP。勾选后,仅当以选择的方式访问时,策略生效。

    • IP =:填写IP列表。勾选后,仅当访问IP在填写的IP列表内时,策略生效。

    • IP ≠:填写IP列表。勾选后,仅当访问IP不在填写的IP列表内时,策略生效。

    • VPC =:选择当前账号的VPC或填写其他账号的VPC。勾选后,仅当从指定的VPC访问时,策略生效。

    • VPC ≠:选择当前账号的VPC或填写其他账号的VPC。勾选后,仅当不从指定的VPC访问时,策略生效。

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

  4. 确认授权配置无误后,单击确定,应用Bucket Policy。

语法策略方式

  1. 前往Bucket列表,单击目标Bucket。

  2. 在左侧菜单栏单击权限控制 > Bucket授权策略

  3. 选择按语法策略添加,然后单击编辑,在编辑框内输入JSON格式的授权策略。

    示例授权策略:对于用户20214760404935xxxx,如果访问请求不是来自VPC网络vpc-t4nlw426y44rd3iq4xxxx,则拒绝其对example-bucket的所有操作。

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Deny",
                "Action": "oss:*",
                "Principal": [
                    "20214760404935xxxx"
                ],
                "Resource": [
                    "acs:oss:*:174649585760xxxx:example-bucket",
                    "acs:oss:*:174649585760xxxx:example-bucket/*"
                ],
                "Condition": {
                    "StringNotEquals": {
                        "acs:SourceVpc": "vpc-t4nlw426y44rd3iq4xxxx"
                    }
                }
            }
        ]
    }

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

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

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

      策略元素

      说明

      示例授权策略中的含义

      Effect

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

      拒绝请求。

      Action

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

      拒绝所有OSS操作(oss:*)。

      Principal

      策略作用的主体(用户、账号、角色等)。

      Principal字段配置为空列表(即Principal:[])时,其行为与配置为所有账号(即Principal:["*"])完全相同。

      策略仅对RAM用户20214760404935xxxx生效。

      Resource

      策略作用的资源范围。

      策略作用于example-bucket本身及其下的所有对象文件。

      Condition

      策略生效的条件。

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

      仅当请求的来源VPC不等于vpc-t4nlw426y44rd3iq4xxxx时,此Deny策略才生效。

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

  4. 确认授权策略无误后,单击保存,根据页面提示保存授权策略。

配置向量Bucket的授权策略

向量Bucket目前只支持语法策略方式配置Bucket Policy。

  1. 前往向量Bucket列表,单击目标向量Bucket。

  2. 在左侧菜单栏单击权限控制 > Bucket授权策略

  3. 单击编辑,在编辑框内输入JSON格式的授权策略。

    示例授权策略:对于vector-bucket-example中的索引表indextest,授予用户20816353761158****读写向量数据的权限。

    {
      "Version": "1",
      "Statement": [{
        "Effect": "Allow",
        "Action": [
          "oss:PutVectors",
          "oss:GetVectors"
        ],
        "Principal": [
          "20816353761158****"
        ],
        "Resource": [
          "acs:ossvector:*:*:vector-bucket-example/indextest"
        ]
      }]
    }

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

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

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

      策略元素

      说明

      示例授权策略中的含义

      Effect

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

      允许请求。

      Action

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

      读写向量数据。

      Principal

      策略作用的主体(用户、账号、角色等)。

      Principal字段配置为空列表(即Principal:[])时,其行为与配置为所有账号(即Principal:["*"])完全相同。

      策略仅对RAM用户20816353761158****生效。

      Resource

      策略作用的资源范围。

      策略作用于vector-bucket-example中的索引表indextest

      Condition

      策略生效的条件。

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

      无。

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

  4. 确认授权策略无误后,单击保存,根据页面提示保存授权策略。

常见授权场景

以下场景展示了Bucket Policy在实际业务中的典型应用,涵盖权限授予、访问限制和安全控制等多种需求。每个场景提供完整的策略配置示例,可根据实际需求进行调整。

场景1:授予指定RAM用户读写权限

当需要允许团队成员或合作方的指定成员上传、下载、管理存储空间中的文件时,可通过Bucket Policy为对应的RAM用户统一授予权限。以下示例授予指定RAM用户(UID27737962156157xxxx20214760404935xxxx)对目标存储空间(example-bucket)的读写权限。

说明

由于以下策略未授予RAM用户列举存储空间的权限,指定RAM用户无法在Bucket列表页面查看所有Bucket并点击进入目标Bucket。指定RAM用户可在控制台左侧菜单栏的我收藏的路径 > +添加并访问目标Bucket。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "oss:GetObject",
                "oss:PutObject",
                "oss:GetObjectAcl",
                "oss:PutObjectAcl",
                "oss:AbortMultipartUpload",
                "oss:ListParts",
                "oss:RestoreObject",
                "oss:GetVodPlaylist",
                "oss:PostVodPlaylist",
                "oss:PublishRtmpStream",
                "oss:ListObjectVersions",
                "oss:GetObjectVersion",
                "oss:GetObjectVersionAcl",
                "oss:RestoreObjectVersion"
            ],
            "Principal":[
                "27737962156157xxxx",
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ]
        },
        {
            "Effect":"Allow",
            "Action":[
                "oss:ListObjects"
            ],
            "Principal":[
                "27737962156157xxxx",
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ],
            "Condition":{
                "StringLike":{
                    "oss:Prefix":[
                        "*"
                    ]
                }
            }
        }
    ]
}

场景2:授予指定RAM用户对指定目录的只读权限

当需要保护存储空间中的特定项目文件不被篡改,但允许相关项目成员读取这些文件时,可为对应的RAM用户授予只读权限。以下示例授予指定RAM用户(UID20214760404935xxxx)对目标存储空间(example-bucket)下指定目录(前缀为hangzhou/2020shanghai/2015)的只读权限。

说明

由于以下策略未授予RAM用户列举存储空间的权限,指定RAM用户无法在Bucket列表页面查看所有Bucket并点击进入目标Bucket。指定RAM用户可在控制台左侧菜单栏的我收藏的路径 > +添加并访问目标Bucket。

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:GetObject",
                "oss:GetObjectAcl",
                "oss:GetObjectVersion",
                "oss:GetObjectVersionAcl"
            ],
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/hangzhou/2020/*",
                "acs:oss:*:174649585760xxxx:example-bucket/shanghai/2015/*"
            ]
        },
        {
            "Action":[
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Condition":{
                "StringLike":{
                    "oss:Prefix":[
                        "hangzhou/2020/*",
                        "shanghai/2015/*"
                    ]
                }
            },
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ]
        }
    ]
}

场景3:授予指定RAM用户查看存储空间并列举文件的权限

当需要让团队或合作方的指定成员查看存储空间的所有信息并列举其中的文件时,可通过Bucket Policy为对应的RAM用户授予相应权限。以下示例授予指定RAM用户查看目标存储空间(example-bucket)的所有信息并列举其中文件的权限。

说明

由于以下策略未授予RAM用户列举存储空间的权限,指定RAM用户无法在Bucket列表页面查看所有Bucket并点击进入目标Bucket。指定RAM用户可在控制台左侧菜单栏的我收藏的路径 > +添加并访问目标Bucket。

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:Get*",
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ]
        }
    ]
}

场景4:授予指定RAM角色读取文件的权限

当需要允许RAM用户或应用程序临时访问存储空间文件时,可创建RAM角色并授予相应权限。RAM用户或应用程序通过扮演该角色,获得读取存储空间文件的临时访问凭证。以下示例为一个阿里云账号下的1RAM角色下的所有会话以及1RAM角色下的指定会话授予读取存储空间(example-bucket)下所有文件的权限。

说明

RAM角色授权时,Principal需要遵循以下格式:arn:sts::<uid>:assumed-role/<role-name>/<session-name>。其中,<role-name>以及<session-name>的值大小写敏感。

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "oss:GetObject"
            ],
            "Effect": "Allow",
            "Principal": [
                "arn:sts::10323xxxxx72056:assumed-role/role-name/session-name",
                "arn:sts::10323xxxxx72056:assumed-role/role2-name/*"
            ],
            "Resource": [
                "acs:oss:*:10323xxxxx72056:example-bucket/*"
            ]
        }
    ]
}

场景5:授予所有访问者列举所有文件的权限

当存储空间用于公共资源共享,需要让所有访问者都能查看文件名但不能访问文件实际内容时,可设置Principal为通配符星号(*),并为其授予列举所有文件的权限。以下示例授予所有访问者列举目标存储空间(example-bucket)下所有文件的权限。

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Effect":"Allow",
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket"
            ]
        }
    ]
}

场景6:限制无法从公网访问

当需要禁止从公网访问指定Bucket时,可使用acs:SourceVpc条件关键字创建拒绝策略语句并添加到Bucket Policy中,阻止非VPC网络的请求。公网请求会因不符合VPC网络前缀而被拒绝。以下示例拒绝除VPC网络外的所有访问者访问目标Bucket(example-bucket)。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "oss:*",
      "Principal": [
        "*"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:example-bucket/*",
        "acs:oss:*:174649585760xxxx:example-bucket"
      ],
      "Condition": {
        "StringNotLike": {
          "acs:SourceVpc": [
            "vpc-*"
          ]
        }
      }
    }
  ]
}

场景7:限制只能从指定VPC访问

当需要限制存储空间只能从指定VPC访问时,可使用acs:SourceVpc条件关键字创建拒绝策略语句并添加到Bucket Policy中,阻止其他VPC或公网的请求。其他VPC或公网的请求会因不符合指定VPC ID条件而被拒绝。以下示例拒绝除指定VPC(IDt4nlw426y44rd3iq4xxxx)外的所有访问者读取目标存储空间(example-bucket)的文件。

说明
  • 由于以下拒绝策略语句中Principal为通配符星号(*)且包含Condition,该拒绝策略语句会对所有访问者生效,包括Bucket Owner。

  • 以下拒绝策略语句仅用于限制访问,不会授予任何访问权限。如果授权主体没有被授予过访问权限,可添加一条允许策略语句来授予其访问权限。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        }
    ]
}

场景8:限制只能从指定公网IP地址访问

当需要限制存储空间只能从指定公网IP地址访问时,使用acs:SourceIp条件关键字创建拒绝策略语句并添加到Bucket Policy中,阻止其他公网IP地址或VPC的请求。来自其他公网IP地址或VPC的请求会被识别为不符合指定IP条件,触发拒绝规则。以下示例拒绝除指定公网IP地址203.0.113.5外的所有访问者对example-bucket的读取操作。

说明
  • 由于以下拒绝策略语句中Principal为通配符星号(*)且包含Condition,该拒绝策略语句会对所有访问者生效,包括Bucket Owner。

  • 以下拒绝策略语句仅用于限制访问,不会授予任何访问权限。如果授权主体没有被授予过访问权限,可添加一条允许策略语句来授予其访问权限。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "NotIpAddress":{
                    "acs:SourceIp":[
                        "203.0.113.5"
                    ]
                }
            }
        }
    ]
}

场景9:限制只能从指定VPC的指定IP地址网段访问

当需要限制存储空间只能从指定VPC的指定IP地址访问时,需要创建两条拒绝策略语句:

  • 使用acs:SourceVpc条件关键字创建一条拒绝策略语句,阻止来自其他VPC或公网的请求。来自其他公网IP地址或VPC的请求会被识别为不符合指定IP条件,触发拒绝规则。

  • 使用acs:SourceIp条件关键字和acs:SourceVpc条件关键字创建一条拒绝策略语句,用于阻止指定VPC网段之外的请求。

将以上两条拒绝策略语句添加到Bucket Policy后,满足任一条件即触发拒绝。以下示例拒绝除指定VPC(IDt4nlw426y44rd3iq4xxxx)的指定IP地址网段(192.168.0.0/16)以外的所有访问者对目标存储空间(example-bucket)进行读取文件操作。

说明
  • 由于以下拒绝策略语句中Principal为通配符星号(*)且包含Condition,该拒绝策略语句会对所有访问者生效,包括Bucket Owner。

  • 以下拒绝策略语句仅用于限制访问,不会授予任何访问权限。如果授权主体没有被授予过访问权限,可添加一条允许策略语句来授予其访问权限。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        },
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                },
                "NotIpAddress":{
                    "acs:SourceIp":[
                        "192.168.0.0/16"
                    ]
                }
            }
        }
    ]
}

场景10:限制只能从指定公网IP地址或指定VPC访问

当需要限制存储空间只能从指定公网IP地址或指定VPC访问时,需要创建两条拒绝策略语句:

  • 使用acs:SourceIp条件关键字创建一条拒绝策略语句,阻止来自其他公网IP地址的请求,同时使用StringNotLike条件操作和acs:SourceVpc条件关键字排除来自指定VPC的请求。

  • 使用acs:SourceVpc条件关键字创建一条拒绝策略语句,阻止来自其他VPC的请求,同时使用StringLike条件操作和acs:SourceVpc关键字排除来自指定公网IP地址的请求,以避免触发不满足指定VPC ID条件而被错误拒绝。

将以上两条拒绝策略语句添加到Bucket Policy后,满足任一条件就会触发拒绝。以下示例拒绝除指定公网IP地址(IP地址为203.0.113.5)或指定VPC(IDt4nlw426y44rd3iq4xxxx)以外的所有访问者执行对目标存储空间(example-bucket)进行读取文件操作。

说明
  • 由于以下拒绝策略语句中Principal为通配符星号(*)且包含Condition,该拒绝策略语句会对所有访问者生效,包括Bucket Owner。

  • 以下拒绝策略语句仅用于限制访问,不会授予任何访问权限。如果授权主体没有被授予过访问权限,可添加一条允许策略语句来授予其访问权限。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringNotLike":{
                    "acs:SourceVpc":[
                        "vpc-*"
                    ]
                },
                "NotIpAddress":{
                    "acs:SourceIp":[
                        "203.0.113.5"
                    ]
                }
            }
        },
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition":{
                "StringLike":{
                    "acs:SourceVpc":[
                        "vpc-*"
                    ]
                },
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        }
    ]
}

场景11:设置IP黑名单

当需要拒绝特定IP地址访问Bucket及其下的Object文件时,可使用IP黑名单策略。通过在Bucket Policy中设置拒绝策略,可阻止指定IP地址或IP地址段的所有访问请求。

说明
  • 由于以下拒绝策略语句中Principal为通配符星号(*)且包含Condition,该拒绝策略语句会对所有访问者生效,包括Bucket Owner。

  • 可同时配置多个IP地址和IP地址段,用逗号分隔。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "oss:*",
      "Principal": [
        "*"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:example-bucket/*",
        "acs:oss:*:174649585760xxxx:example-bucket"
      ],
      "Condition": {
        "IpAddress": {
          "acs:SourceIp": [
            "101.***.***.100"
          ]
        }
      }
    }
  ]
}

场景12:限制API调用方式必须为临时访问凭证

通过API方式访问存储空间资源时,如果需要限制API调用方式必须是临时访问凭证,可使用acs:AccessId条件关键字创建一条拒绝策略语句并将其添加到Bucket Policy中,用于阻止其他非临时访问凭证(例如通过阿里云账号或者RAM用户的长期访问密钥)的访问方式。对于通过非临时访问凭证的访问方式,会触发策略中的拒绝规则。以下示例拒绝除临时访问凭证(以TMP.或者STS.开头的)以外的所有访问者查看目标存储空间(example-bucket)以及列举文件的操作。

{
    "Version": "1",
    "Statement": [
        {            
            "Effect": "Deny",
            "Action":[
                "oss:Get*",
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:example-bucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "acs:AccessId": [
                        "TMP.*",
                        "STS.*"
                 ]
                }
            }
        }
    ]
}

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

当需要禁止将 Bucket 和 Object 的 ACL 设置为公共访问时,可创建两条拒绝策略语句:

  • 使用 oss:x-oss-acl 条件关键字创建一条拒绝策略语句,阻止将 Bucket ACL 设置为除 private 以外的权限。任何尝试设置公共读或公共读写权限的操作会被识别为不符合私有条件,触发拒绝规则。

  • 使用 oss:x-oss-object-acl 条件关键字创建一条拒绝策略语句,阻止将 Object ACL 设置为除 private 和 default 以外的权限。

将以上两条拒绝策略语句添加到 Bucket Policy 后,满足任一条件即触发拒绝。以下示例拒绝对目标存储空间(example-bucket)设置公共访问权限的操作。

{
    "Version": "1",
    "Statement": [
        {            
            "Effect": "Deny",
            "Action": [
                "oss:PutBucketAcl"
            ],
            "Principal": [
                "*"
            ],
            "Resource": [
                "acs:oss:*:*:example-bucket"
            ],
            "Condition": {
                "StringNotEquals": {
                    "oss:x-oss-acl": "private"
                }
            }
        },
        {            
            "Effect": "Deny",
            "Action": [
                "oss:PutObjectAcl"
            ],
            "Principal": [
                "*"
            ],
            "Resource": [
                "acs:oss:*:*:example-bucket/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "oss:x-oss-object-acl": [
                        "private",
                        "default"
                    ]
                }
            }
        }
    ]
}

开发和工具集成

除了通过控制台进行手动配置,还可以使用图形化或命令行工具、SDK等方式进行Bucket Policy授权。

  • 使用图形化工具ossbrowser

    支持Bucket级别的策略操作,提供与控制台相似的可视化配置体验。安装并登录ossbrowser后按照界面指引完成Bucket Policy的配置操作。

  • 使用命令行工具ossutil

    通过调用put-bucket-policy接口设置授权策略。

    说明

    为向量Bucket设置授权策略时,需使用ossutil vectors-api put-bucket-policy命令。

  • 使用SDK

    支持Java SDKPython SDKGo SDKNode.js SDK等多种编程语言进行策略配置,更多SDK支持请参见SDK参考

  • 直接调用API

    调用PutBucketPolicy接口为Bucket设置授权策略。

配额与限制

  • 策略大小:单个存储空间支持添加多条Bucket Policy,所有策略的总大小不能超过16 KB。

  • 字段长度:Bucket Policy中每个字段的长度不能超过4095字节。

相关文档