# 配置桶级默认WORM策略-SetBucketObjectLock
#### 功能介绍
OBS提供合规模式的WORM功能，当桶设置了WORM策略后，如果新上传的对象没有设置保护策略和保护期限，则其会自动应用桶级WORM策略。可通过本接口为指定桶配置默认保护策略和保护期限。了解更多配置桶级默认WORM策略相关信息，请参见[配置对象锁定（WORM）防止对象被更改或删除](https://support.huaweicloud.com/usermanual-obs/obs_03_0718.html)。
当您在桶内配置了桶级默认WORM策略以后，如果您在上传对象时没有指定保护策略和保护期限，则新上传的对象会自动应用桶级默认WORM策略。和配置对象级WORM保护策略不同的地方在于，对象级WORM保护策略需要您提供一个明确的时间，在这个时间之前对象都会受到保护，桶级默认WORM策略则要求您提供一个保护期限，实际上对象受到保护的时间点为其上传时间+您指定的保护期限。
#### 接口约束
- 开启对象级WORM功能前需要先开启桶级WORM，当对象同时被桶级WORM和对象级WORM锁定时，优先遵从对象级WORM的保护策略。
- 对象级WORM保留期只能延长不能缩短。
- 分段上传产生的分段文件不受WORM保护。
- 在配置桶日志记录时，不建议您将日志存储桶设置为WORM保留策略生效的桶，可能会由于老旧文件无法被删除而导致存储费用持续增长。
- 在开启了WORM开关的桶中，使用追加写上传对象将失败并返回403。
- 策略目前仅支持合规模式。

- 策略目前仅支持设置为合规模式"COMPLIANCE"
- 支持设置的保留期限为1天\~100\*365天或1年\~100年。
- 您可以修改甚至清空桶级默认WORM策略，但这仅对修改后上传的对象生效，修改前上传的对象的保护状态不受影响。
- 多段上传的对象在合并前不受保护，合并后受桶级默认对象策略保护，您可以在其合并后单独为其配置对象级WORM保护策略。
 
#### 授权信息
您必须是桶拥有者或拥有配置桶级默认WORM策略的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:bucket:PutBucketObjectLockConfiguration** 权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:bucket:putBucketObjectLockConfiguration** 权限，授权操作请参见[创建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:putBucketObjectLockConfiguration               | Write                                                           | 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:putBucketObjectLockConfiguration               | Write                                                           | -                                                                                       | - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain   | -                                                                                                                   | -                                                            |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:bucket:PutBucketObjectLockConfiguration** 权限，具体操作请参见[自定义创建桶策略](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=SetBucketObjectLock)在线调试接口。
#### 请求消息样式
```
PUT /?object-lock HTTP/1.1
Host: bucketname.obs.cn-north-4.myhuaweicloud.com
Date: date
Authorization: authorization
Content-Type: application/xml
Content-Length: length
<ObjectLockConfiguration xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
    
          <ObjectLockEnabled>Enabled</ObjectLockEnabled>
    <Rule>
       <!-- DefaultRetention中Days和Years不能同时为非零值，必须指定其中一个，另一个设为0或不携带，并且在规定取值范围内 -->
       <DefaultRetention>
          <Days>integer</Days>
          <Mode>COMPLIANCE</Mode>
          <Years>integer</Years>
       </DefaultRetention>
    </Rule>
</ObjectLockConfiguration>
```
#### URI参数（URI Parameters）
该请求消息中不使用消息参数。
#### 请求头参数（Request headers）
该请求使用公共请求头，具体参见[表3](https://support.huaweicloud.com/api-obs/obs_04_0007.html#ZH-CN_TOPIC_0136436606__table25197309)。
#### 请求体参数（Request body）
表1请求体参数 
| 参数名称                    | 是否必选 | 参数类型     | 描述                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| ObjectLockConfiguration | 是   | Container | **参数解释：** 桶级WORM配置的容器，ObjectLockConfiguration是ObjectLockEnabled和Rule的父节点，请详见[表2]。 **约束限制：** 不涉及 **默认取值：** 不涉及 |
   
 表2ObjectLockConfiguration参数解释 
| 参数名称               | 是否必选                                                 | 参数类型      | 描述                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| ObjectLockEnabled | 否                                                    | String    | **参数解释：** 桶级WORM开关状态。 **约束限制：** 不涉及 **取值范围：** Enabled：启用桶级WORM功能。 **默认取值：** 不涉及 |
| Rule                | ObjectLockEnabled为Enabled时必选，不携带则会清空当前配置的桶级默认WORM策略 | Container | **参数解释：** 桶级WORM策略的规则容器，Rule是DefaultRetention的父节点，请详见[表3]。 **约束限制：** 不涉及 **默认取值：** 不涉及                                   |
   
 表3Rule参数说明 
| 参数名称              | 是否必选         | 参数类型       | 描述                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| DefaultRetention | 如果有Rule容器则必选 | Container | **参数解释：** 桶级WORM策略的容器，DefaultRetention是Mode、Days、Years的父节点，请详见[表4]。 **约束限制：** 不涉及 **默认取值：** 不涉及 |
   
 表4DefaultRetention参数解释 
| 参数名称 | 是否必选                                           | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|:---|
| Mode  | 如果有DefaultRetention容器则必选                        | String | **参数解释：** 桶的WORM保护策略。 **约束限制：** 不涉及 **取值范围：** COMPLIANCE：合规模式。 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                |
| Days  | 如果有DefaultRetention容器则和Years二选一，必须选择其中一个且不能同时指定 | Integer  | **参数解释：** 保护天数。单位：天。 **约束限制：** Days和Years不能同时为非零值，必须指定其中一个，另一个设为0或不携带，并且在规定取值范围内。 **取值范围：** 1\~36500（100\*365） **默认取值：** 不涉及                                                                                                                                                                                                                   |
| Years | 如果有DefaultRetention容器则和Days二选一，必须选择其中一个且不能同时指定   | Integer | **参数解释：** 默认的保护年数，单位：年。 **约束限制：** - 一年实际上视为保护365天，不考虑闰年。  - Days和Years不能同时为非零值，必须指定其中一个，另一个设为0或不携带，并且在规定取值范围内。   **取值范围：** 1\~100 **默认取值：** 不涉及 |
   
#### 响应消息样式
```
HTTP/1.1 status_code
Date: date
Content-Length: length
```
#### 响应头 (Response Headers)
该请求的响应消息使用公共响应头，具体请参考[表1](https://support.huaweicloud.com/api-obs/obs_04_0013.html#ZH-CN_TOPIC_0173612084__d0e686)。
#### 响应体 (Response Body)
本接口的响应消息中不携带响应体。
#### 错误响应消息
此请求可能的特殊错误如下[表5]描述。
 表5错误响应消息 
| 错误码                 | 描述                           | HTTP状态码 |
|:---|:---|:---|
| InvalidRequest     | 目标桶没有开启桶级WORM开关。             | 400      |
| MalformedXML          | 策略配置格式错误。                  | 400    |
| InvalidBucketState | 要对存储桶应用对象锁定配置，必须开启桶多版本控制功能。 | 409      |
   
其余错误已包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)中。
#### 请求示例 1
配置桶级默认WORM策略为保护期两年。
```
PUT /?object-lock HTTP/1.1
Host: bucketname.obs.cn-north-4.myhuaweicloud.com
Date: Wed, 01 Jul 2015 02:25:05 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:75/Y4Ng1izvzc1nTGxpMXTE6ynw=
Content-Type: application/xml
Content-Length: 157
<ObjectLockConfiguration xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
    <ObjectLockEnabled>Enabled</ObjectLockEnabled>
    <Rule>
       <DefaultRetention>
          <Mode>COMPLIANCE</Mode>
          <Years>2</Years>
       </DefaultRetention>
    </Rule>
</ObjectLockConfiguration>
```
#### 响应示例 1
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF260000016435CE298386946AE4C482
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCT9W2tcvLmMJ+plfdopaD62S0npbaRUz
Date: Wed, 01 Jul 2015 02:25:06 GMT
Content-Length: 0
```
#### 请求示例 2
清空当前的桶级默认WORM策略配置。
```
PUT /?object-lock HTTP/1.1
Host: bucketname.obs.cn-north-4.myhuaweicloud.com
Date: Wed, 01 Jul 2015 02:25:05 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:75/Y4Ng1izvzc1nTGxpMXTE6ynw=
Content-Type: application/xml
Content-Length: 157
<ObjectLockConfiguration xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
</ObjectLockConfiguration>
```
#### 响应示例 2
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF260000016435CE298386946AE4C482
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCT9W2tcvLmMJ+plfdopaD62S0npbaRUz
Date: Wed, 01 Jul 2015 02:25:06 GMT
Content-Length: 0
```
#### 相关文档
- 了解更多配置桶级默认WORM策略相关信息，请参见[配置对象锁定（WORM）防止对象被更改或删除](https://support.huaweicloud.com/usermanual-obs/obs_03_0718.html)。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
