文档首页/ 对象存储服务 OBS/ API参考/ 桶API/ 阻止桶公共访问(BPA)/ 设置桶级阻止公共访问配置-SetBucketPublicAccessBlock
更新时间:2026-04-15 GMT+08:00
分享

设置桶级阻止公共访问配置-SetBucketPublicAccessBlock

功能介绍

公共访问是指请求者无需拥有特定权限或身份验证即可访问桶和桶内数据,此操作存在数据泄露和恶意访问导致大量外网流量的风险。OBS支持为桶配置阻止公共访问功能,可通过本接口设置桶级BPA,从而确保桶内数据的安全性。了解更多设置桶级阻止公共访问配置相关信息,请参见阻止桶公共访问

如果开启阻止公开访问,则已有的公开访问权限会被忽略,并且不允许配置新的公开访问权限。如果关闭阻止公开访问,则已有的公开访问权限仍然生效,并且支持配置新的公开访问权限。

接口约束

  • 您只能为存储桶启用阻止公共访问权限设置,不支持基于账号和指定对象的阻止公共访问权限设置。
  • 为确保功能正常使用,所有桶策略规则大小总计不超过20KB,所有ACL和桶策略规则大小总计不超过32KB。如果超过限定大小,则设置桶策略或桶ACL、查询桶的公共状态、开启阻止公共访问开关等请求可能会被拒绝,返回错误码400,报错“Bucket policy and bucket acl is too large/complicated to perform block public access analysis”。
  • 镜像回源场景暂不支持设置阻止公共访问。
  • 在跨区域复制场景下,如果目标桶禁止配置公共ACL(开启了BlockPublicAcls),那么源桶中配置了ACL公共语义的对象,会因为和目标桶的访问策略冲突而导致复制失败。
  • 您必须拥有相关权限才能使用BPA功能:
    表1 使用BPA功能所需权限

    操作

    需具备的权限

    设置桶级阻止公共访问配置

    桶拥有者或拥有PutBucketPublicAccessBlock权限

    获取桶级阻止公共访问配置

    桶拥有者或拥有GetBucketPublicAccessBlock权限

    删除桶级阻止公共访问配置

    桶拥有者或拥有DeleteBucketPublicAccessBlock权限

    获取桶策略公共状态

    桶拥有者或拥有GetBucketPolicyPublicStatus权限

    获取桶公共状态

    桶拥有者或拥有GetBucketPublicStatus权限

授权信息

您必须是桶拥有者或拥有设置桶级阻止公共访问配置的权限,才能调用本接口,建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见OBS不同权限控制方式的区别

  • 如果使用IAM授权,那么请在“角色与策略授权”、“身份策略授权”两种IAM授权方式中选择一种,并配置相应权限:
    • 如果使用角色与策略授权(旧版IAM,即IAM v3接口),需具备obs:bucket:PutBucketPublicAccessBlock权限,授权操作请参见创建IAM自定义策略
    • 如果使用身份策略授权(新版IAM,即IAM v5接口),如下表所示,需具备obs:bucket:putBucketPublicAccessBlock权限,授权操作请参见创建IAM自定义身份策略

      授权项

      Action

      访问级别

      Access Level

      资源类型(*为必须)

      Resource Type (*: required)

      条件键

      Condition Key

      别名

      Alias

      依赖的授权项

      Dependencies

      obs:bucket:putBucketPublicAccessBlock

      Permission_management

      bucket *

      -

      -

      -

      • obs:EpochTime
      • obs:SourceIp
      • obs:TlsVersion
      • obs:CustomDomain
  • 如果使用桶策略进行授权,需具备obs:bucket:PutBucketPublicAccessBlock权限,具体操作请参见自定义创建桶策略

请求消息样式

PUT /?publicAccessBlock HTTP/1.1
Host: bucketname.obs.cn-north-4.myhuaweicloud.com
Date: date
Authorization: authorization
Content-Type: application/xml
Content-Length: length

<?xml version="1.0" encoding="UTF-8"?>
<PublicAccessBlockConfiguration>
	<BlockPublicAcls>boolean</BlockPublicAcls>
	<IgnorePublicAcls>boolean</IgnorePublicAcls>
	<BlockPublicPolicy>boolean</BlockPublicPolicy>
	<RestrictPublicBuckets>boolean</RestrictPublicBuckets>
</PublicAccessBlockConfiguration>

URI参数(URI Parameters)

该请求消息中不使用消息参数。

请求头参数(Request headers)

该请求使用公共请求头,具体参见表3

请求体参数(Request body)

该操作可以带请求体参数,具体描述如表2所示。

表2 请求体参数

元素名称

元素类型

是否必选

描述

PublicAccessBlockConfiguration

XML

参数解释:

PublicAccessBlockConfiguration参数的根节点。

约束限制:

取值范围:

默认取值:

BlockPublicAcls

Boolean

参数解释:

指定是否应该禁止为桶或桶内对象配置公开的ACL(access control list)。如果指定为true,会出现以下现象:

  • 上传对象时,如果指定公开的ACL,则上传对象失败,返回403 Access Denied。
  • 修改桶ACL或对象ACL时,如果指定公开的ACL,则修改ACL失败,返回403 Access Denied。

约束限制:

该配置不会对存量桶或对象造成影响。

取值范围:

  • true:开启
  • false:关闭

默认取值:

false

BlockPublicPolicy

Boolean

参数解释:

指定是否应该禁止为桶配置公开的桶策略。如果指定为true,会出现以下现象:为桶配置桶策略时,如果指定公开的桶策略,则配置桶策略失败,返回403 Access Denied。

约束限制:

该配置不会对存量桶造成影响。

取值范围:

  • true:开启
  • false:关闭

默认取值:

false

IgnorePublicAcls

Boolean

参数解释:

指定是否需要忽略已经为桶或桶内对象配置的公开的ACL。如果指定为true,会出现以下现象:该桶或桶内对象公开的ACL均会失效。

约束限制:

该配置不会影响已有的ACL,也不会阻止配置新的公开ACL。

取值范围:

  • true:开启
  • false:关闭

默认取值:

false

RestrictPublicBuckets

Boolean

参数解释:

指定是否需要对已有的公开桶策略进行限制。如果指定为true,会出现以下现象:桶策略为公开时,只允许云服务账号和桶拥有者账号对该桶访问。

约束限制:

该配置不会影响已有的桶策略,也不会阻止配置新的公开桶策略。

取值范围:

  • true:开启
  • false:关闭

默认取值:

false

响应消息样式

HTTP/1.1 status_code
Date: date

响应头 (Response Headers)

该请求的响应消息使用公共响应头,具体请参考表1

响应体 (Response Body)

本接口的响应消息中不携带响应体。

错误响应消息

此请求可能的特殊错误如下表3描述。

表3 错误响应消息

错误码

描述

HTTP状态码

InvalidRequest

BlockPublicAcls、BlockPublicPolicy、IgnorePublicAcls、RestrictPublicBuckets四个配置均未指定,至少需要指定其中一个配置。

400

MethodNotAllowed

不允许使用该方法(特性开关未开启)

405

其余错误已经包含在表2中。

请求示例 :设置四个配置均为true

put /?publicAccessBlock HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Sat, 16 Nov 2024 08:59:07 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:75/Y4Ng1izvzc1nTGxpMXTE6ynw=
Content-Length: 288

<?xml version="1.0" encoding="UTF-8"?>
<PublicAccessBlockConfiguration>
	<BlockPublicAcls>true</BlockPublicAcls>
	<IgnorePublicAcls>true</IgnorePublicAcls>
	<BlockPublicPolicy>true</BlockPublicPolicy>
	<RestrictPublicBuckets>true</RestrictPublicBuckets>
</PublicAccessBlockConfiguration>

响应示例 :设置四个配置均为true

HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF260000016435CE298386946AE4C482
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCT9W2tcvLmMJ+plfdopaD62S0npbaRUz
Date: Sat, 16 Nov 2024 08:59:08 GMT
Content-Length: 0

请求示例 :仅配置BlockPublicAcls为true

PUT /?publicAccessBlock HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Sat, 16 Nov 2024 08:59:07 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:75/Y4Ng1izvzc1nTGxpMXTE6ynw=
Content-Length: 147

<?xml version="1.0" encoding="UTF-8"?>
<PublicAccessBlockConfiguration>
	<BlockPublicAcls>true</BlockPublicAcls>
</PublicAccessBlockConfiguration>

响应示例 :仅配置BlockPublicAcls为true

HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF260000016435CE298386946AE4C482
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCT9W2tcvLmMJ+plfdopaD62S0npbaRUz
Date: Sat, 16 Nov 2024 08:59:08 GMT
Content-Length: 0

使用SDK调用接口

建议您使用OBS SDK调用接口。SDK对API进行了封装以简化您的开发工作,直接调用SDK接口函数即可访问OBS,无需手动计算签名。

Java

Python

C暂不支持

Go

BrowserJS暂不支持

.NET暂不支持

Android暂不支持

iOS暂不支持

PHP暂不支持

Node.js暂不支持

相关文档

相关文档