设置桶级阻止公共访问配置-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所示。
| 元素名称 | 元素类型 | 是否必选 | 描述 |
|---|---|---|---|
| PublicAccessBlockConfiguration | XML | 是 | 参数解释: PublicAccessBlockConfiguration参数的根节点。 约束限制: 无 取值范围: 无 默认取值: 无 |
| BlockPublicAcls | Boolean | 否 | 参数解释: 指定是否应该禁止为桶或桶内对象配置公开的ACL(access control list)。如果指定为true,会出现以下现象:
约束限制: 该配置不会对存量桶或对象造成影响。 取值范围:
默认取值: false |
| BlockPublicPolicy | Boolean | 否 | 参数解释: 指定是否应该禁止为桶配置公开的桶策略。如果指定为true,会出现以下现象:为桶配置桶策略时,如果指定公开的桶策略,则配置桶策略失败,返回403 Access Denied。 约束限制: 该配置不会对存量桶造成影响。 取值范围:
默认取值: false |
| IgnorePublicAcls | Boolean | 否 | 参数解释: 指定是否需要忽略已经为桶或桶内对象配置的公开的ACL。如果指定为true,会出现以下现象:该桶或桶内对象公开的ACL均会失效。 约束限制: 该配置不会影响已有的ACL,也不会阻止配置新的公开ACL。 取值范围:
默认取值: false |
| RestrictPublicBuckets | Boolean | 否 | 参数解释: 指定是否需要对已有的公开桶策略进行限制。如果指定为true,会出现以下现象:桶策略为公开时,只允许云服务账号和桶拥有者账号对该桶访问。 约束限制: 该配置不会影响已有的桶策略,也不会阻止配置新的公开桶策略。 取值范围:
默认取值: false |
响应消息样式
HTTP/1.1 status_code Date: date
响应头 (Response Headers)
该请求的响应消息使用公共响应头,具体请参考表1。
响应体 (Response Body)
本接口的响应消息中不携带响应体。
错误响应消息
此请求可能的特殊错误如下表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,无需手动计算签名。

