
# 设置桶级阻止公共访问配置-SetBucketPublicAccessBlock
#### 功能介绍
公共访问是指请求者无需拥有特定权限或身份验证即可访问桶和桶内数据，此操作存在数据泄露和恶意访问导致大量外网流量的风险。OBS支持为桶配置阻止公共访问功能，可通过本接口设置桶级BPA，从而确保桶内数据的安全性。了解更多设置桶级阻止公共访问配置相关信息，请参见[阻止桶公共访问](https://support.huaweicloud.com/usermanual-obs/obs_03_0739.html)。
![](https://support.huaweicloud.com/api-obs/public_sys-resources/caution_3.0-zh-cn.png)
如果开启阻止公共访问，且开启任一BPA配置项（BlockPublicAcls、IgnorePublicAcls、BlockPublicPolicy、RestrictPublicBuckets），则对应的公开访问权限会被忽略或不允许设置新的公共访问权限。如果关闭阻止公共访问，则已有的公共访问权限仍然生效，并且支持配置新的公共访问权限。了解四个公共访问配置相关信息，请参见[阻止公共访问权限设置](https://support.huaweicloud.com/usermanual-obs/obs_03_0739.html#section1)。
#### 接口约束
- 您只能为存储桶启用阻止公共访问权限设置，不支持基于账号和指定对象的阻止公共访问权限设置。
- 为确保功能正常使用，所有桶策略规则大小总计不超过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不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:bucket:PutBucketPublicAccessBlock** 权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:bucket:putBucketPublicAccessBlock** 权限，授权操作请参见[创建IAM自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)。
    
    | 授权项 Action | 访问级别 Access Level | 资源类型（\*为必须） Resource Type (\*: required) | [条件键](https://support.huaweicloud.com/api-obs/obs_04_0112.html#ZH-CN_TOPIC_0000002375307974__condition_table) Condition Key                                                                                                                                                                                                                                                                                                                                              | [别名](https://support.huaweicloud.com/iam5_faq/iam_01_1103.html) Alias | 依赖的授权项 Dependencies |
    |:---|:---|:---|:---|:---|:---|
    | obs:bucket:putBucketPublicAccessBlock                     | Permission_management                                            | bucket \*                                                                              | - [g:EnterpriseProjectId](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)  - [g:ResourceTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)                                                             | -                                                                                                                  | -          |
    | obs:bucket:putBucketPublicAccessBlock                     | Permission_management                                            | -                                                                                      | - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain   | -                                                                                                                  | -          |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:bucket:PutBucketPublicAccessBlock** 权限，具体操作请参见[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
 
#### URI
PUT /
#### 调用方法
请参见[如何调用API](https://support.huaweicloud.com/api-obs/obs_04_0006.html)。调用前需要先[计算API签名](https://support.huaweicloud.com/api-obs/obs_04_0009.html)，并将签名添加到请求中。
您还可以使用[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/OBS/doc?api=SetBucketPublicAccessBlock)在线调试接口。
#### 请求消息样式
```
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](https://support.huaweicloud.com/api-obs/obs_04_0007.html#ZH-CN_TOPIC_0136436606__table25197309)。
#### 请求体参数（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。   **约束限制：** 该配置不会对存量桶或对象造成影响。BlockPublicAcls、BlockPublicPolicy、IgnorePublicAcls、RestrictPublicBuckets这四个参数至少需要指定其中一个。 **取值范围：** - true：开启  - false：关闭   **默认取值：** false |
| BlockPublicPolicy              | Boolean  | 否        | **参数解释：** 指定是否应该禁止为桶配置公开的桶策略。如果指定为true，会出现以下现象：为桶配置桶策略时，如果指定公开的桶策略，则配置桶策略失败，返回403 Access Denied。 **约束限制：** 该配置不会对存量桶造成影响。BlockPublicAcls、BlockPublicPolicy、IgnorePublicAcls、RestrictPublicBuckets这四个参数至少需要指定其中一个。 **取值范围：** - true：开启  - false：关闭   **默认取值：** false                                                                                                                                                                                                                                                                                                                                             |
| IgnorePublicAcls               | Boolean  | 否        | **参数解释：** 指定是否需要忽略已经为桶或桶内对象配置的公开的ACL。如果指定为true，会出现以下现象：该桶或桶内对象公开的ACL均会失效。 **约束限制：** 该配置不会影响已有的ACL，也不会阻止配置新的公开ACL。BlockPublicAcls、BlockPublicPolicy、IgnorePublicAcls、RestrictPublicBuckets这四个参数至少需要指定其中一个。 **取值范围：** - true：开启  - false：关闭   **默认取值：** false                                                                                                                                                                                                                                                                                                                                                     |
| RestrictPublicBuckets          | Boolean  | 否        | **参数解释：** 指定是否需要对已有的公开桶策略进行限制。如果指定为true，会出现以下现象：桶策略为公开时，只允许云服务账号和桶拥有者账号对该桶访问。 **约束限制：** 该配置不会影响已有的桶策略，也不会阻止配置新的公开桶策略。BlockPublicAcls、BlockPublicPolicy、IgnorePublicAcls、RestrictPublicBuckets这四个参数至少需要指定其中一个。 **取值范围：** - true：开启  - false：关闭   **默认取值：** false                                                                                                                                                                                                                                                                                                                                                    |
   
#### 响应消息样式
```
HTTP/1.1 status_code
Date: date
```
#### 响应头 (Response Headers)
该请求的响应消息使用公共响应头，具体请参考[表1](https://support.huaweicloud.com/api-obs/obs_04_0013.html#ZH-CN_TOPIC_0173612084__d0e686)。
#### 响应体 (Response Body)
本接口的响应消息中不携带响应体。
#### 错误响应消息
此请求可能的特殊错误如下[表3]描述。
 表3错误响应消息 
| 错误码              | 描述                                                                                             | HTTP状态码 |
|:---|:---|:---|
| InvalidRequest   | BlockPublicAcls、BlockPublicPolicy、IgnorePublicAcls、RestrictPublicBuckets四个配置均未指定，至少需要指定其中一个配置。 | 400     |
| MethodNotAllowed | 不允许使用该方法（特性开关未开启）                                                                              | 405     |
   
其余错误已包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)中。
#### 请求示例 ：设置四个配置均为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](https://support.huaweicloud.com/sdk-java-devg-obs/obs_23_1718.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0846.html) | C暂不支持 | [Go](https://support.huaweicloud.com/sdk-go-devg-obs/obs_23_1717.html) | BrowserJS暂不支持 | .NET暂不支持 | Android暂不支持 | iOS暂不支持 | PHP暂不支持 | Node.js暂不支持 |
|---|---|---|---|---|---|---|---|---|---|
   
#### 相关文档
- 了解更多设置桶级阻止公共访问配置相关信息，请参见[阻止桶公共访问](https://support.huaweicloud.com/usermanual-obs/obs_03_0739.html)。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
