
# 设置桶的加密配置-SetBucketEncryption
#### 功能介绍
OBS支持为桶创建或更新默认服务端加密配置信息。设置桶加密配置后，在该桶中上传对象时，会默认采用桶的加密配置对数据进行加密。目前支持配置的服务端加密方式有：KMS托管密钥的服务端加密(SSE-KMS)、OBS托管密钥的服务端加密(SSE-OBS)。了解更多桶加密配置相关信息，请参见[服务端加密](https://support.huaweicloud.com/usermanual-obs/obs_03_0089.html)。
#### 接口约束
- 一个对象每次上传，只支持一种服务端加密方式。对象上传后，对象的加密配置不可修改。
- 当桶或者桶内对象开启了SSE-KMS服务端加密功能，需要使用IAM为请求者配置kms:cmk:get、kms:cmk:list、kms:cmk:create、kms:dek:create、kms:dek:encrypt、kms:dek:decrypt权限，才能上传下载对象。
- 如果桶未配置服务端加密，那么访问加密对象必须使用HTTPS协议。
- 使用中的密钥不可以删除，如果删除将导致加密对象不能下载。
 
#### 授权信息
您必须是桶拥有者或拥有设置桶的加密配置的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:bucket:PutEncryptionConfiguration** 权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:bucket:putEncryptionConfiguration** 权限，授权操作请参见[创建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:putEncryptionConfiguration               | 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:putEncryptionConfiguration               | Write                                                      | -                                                                                | - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain  - obs:BucketEncrypted   | -                                                                                                            | -          |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:bucket:PutEncryptionConfiguration** 权限，具体操作请参见[自定义创建桶策略](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=SetBucketEncryption)在线调试接口。
#### 请求消息样式（SSE-KMS SM4）
```
PUT /?encryption  HTTP/1.1
User-Agent: curl/7.29.0
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Accept: */*
Date: date 
Authorization: authorization string
Content-Length: length
<ServerSideEncryptionConfiguration>
    <Rule>
        <ApplyServerSideEncryptionByDefault>
            <SSEAlgorithm>kms</SSEAlgorithm>
            <KMSDataEncryption>SM4</KMSDataEncryption>
            <KMSMasterKeyID>kmskeyid-value</KMSMasterKeyID>
        </ApplyServerSideEncryptionByDefault>
        <BucketKeyEnabled>true</BucketKeyEnabled>
        <BucketKeyRotationPeriod>525600</BucketKeyRotationPeriod>
    </Rule>
</ServerSideEncryptionConfiguration>
```
#### 请求消息样式（SSE-KMS AES256）
```
PUT /?encryption  HTTP/1.1
User-Agent: curl/7.29.0
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Accept: */*
Date: date 
Authorization: authorization string
Content-Length: length
<ServerSideEncryptionConfiguration>
    <Rule>
        <ApplyServerSideEncryptionByDefault>
            <SSEAlgorithm>kms</SSEAlgorithm>
            <KMSMasterKeyID>kmskeyid-value</KMSMasterKeyID>
        </ApplyServerSideEncryptionByDefault>
        <BucketKeyEnabled>true</BucketKeyEnabled>
        <BucketKeyRotationPeriod>525600</BucketKeyRotationPeriod>
    </Rule>
</ServerSideEncryptionConfiguration>
```
#### 请求消息样式（SSE-OBS）
```
PUT /?encryption HTTP/1.1 
User-Agent: curl/7.29.0 
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Accept: */* 
Date: date  
Authorization: authorization string 
Content-Length: length
 
<ServerSideEncryptionConfiguration> 
    <Rule> 
        <ApplyServerSideEncryptionByDefault> 
            <SSEAlgorithm>AES256</SSEAlgorithm> 
        </ApplyServerSideEncryptionByDefault> 
    </Rule> 
</ServerSideEncryptionConfiguration>
```
#### URI参数（URI Parameters）
表1URI参数 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|:---|
| encryption | 是    | String | **参数解释**： 用于标识API接口与服务端加密有关。 **约束限制**： 计算签名时，请在CanonicalizedResource中添加"/*BucketName* /?encryption"，详情参见[签名计算](https://support.huaweicloud.com/api-obs/obs_04_0010.html)。 **取值范围**： encryption **默认取值**： 不涉及 |
   
#### 请求头参数（Request headers）
该请求使用公共请求头，具体参见[表3](https://support.huaweicloud.com/api-obs/obs_04_0007.html#ZH-CN_TOPIC_0136436606__table25197309)。
#### 请求体参数（Request body）
在此请求中，需要在请求的消息体中配置桶的加密配置。桶加密的配置信息以XML格式上传。具体的配置元素如[表2]。
 表2桶的加密配置元素 
| 参数                                | 是否必选 | 参数类型      | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|:---|
| ServerSideEncryptionConfiguration | 是    | Container | **参数解释：** 桶默认加密配置的根元素。ServerSideEncryptionConfiguration是[Rule]的父节点。 **约束限制：** 不涉及 **取值范围：** 不涉及 **默认取值：** 不涉及 |
| Rule                              | 是    | Container | **参数解释：** 桶默认加密配置的子元素，Rule是ApplyServerSideEncryptionByDefault、BucketKeyEnabled的父节点，请详见[Rule参数说明]。 **约束限制：** 不涉及 **默认取值：** 不涉及                                                               |
   
 表3Rule参数说明 
| 参数                                 | 是否必选 | 参数类型      | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|:---|
| ApplyServerSideEncryptionByDefault | 是    | Container | **参数解释：** 桶默认加密配置的子元素。子参数详情请参见[ApplyServerSideEncryptionByDefault参数说明]。 **约束限制：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| BucketKeyEnabled                   | 否    | Boolean   | **参数解释：** 是否开启OBS桶密钥特性。 **约束限制：** - 该参数仅支持SSEAlgorithm取值为kms时配置，即仅使用SSE-KMS加密方式时可配置。  - 设置POSIX桶时，该参数取值为true，KMSMasterKeyID为必选项。   **取值范围：** - true：开启OBS桶密钥特性。  - false：关闭OBS桶密钥特性。   **默认取值：** false |
| BucketKeyRotationPeriod            | 否    | Integer   | **参数解释：** 桶密钥轮转周期。单位：分钟 **约束限制：** 该参数仅支持SSEAlgorithm取值为kms，且BucketKeyEnabled参数为true时配置。 **取值范围：** 259200\~525600 **默认取值：** 525600                                                                                                                                                                                                                                                                                                                                                                                                                  |
   
 表4ApplyServerSideEncryptionByDefault参数说明 
| 参数                | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|:---|
| SSEAlgorithm      | 是    | String | **参数解释：** 桶默认加密配置要使用的服务端加密算法。 **约束限制：** 不涉及 **取值范围：** - kms：使用SSE-KMS加密方式，默认使用AES256算法；如果您需要使用SM4加密算法，还需要配置KMSDataEncryption。  - AES256：使用SSE-OBS加密方式，且使用AES256加密算法。   **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| KMSDataEncryption | 否    | String | **参数解释：** SSE-KMS加密方式下的数据加密算法。 **约束限制：** 不涉及 **取值范围：** SM4：国密SM4算法。 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| KMSMasterKeyID    | 否    | String | **参数解释：** SSE-KMS加密方式下使用的KMS主密钥ID。 **约束限制：** - 如果用户没有提供该头域，那么默认的主密钥将会被使用。  - BucketKeyEnabled取值为true时，KMSMasterKeyID取值为携带用户在kms上创建的主密钥ID。   **取值范围：** - regionID:domainID(账号ID):key/key_id  - key_id   其中： - regionID是使用密钥所属region的ID，可在[地区和终端节点](https://developer.huaweicloud.com/endpoint?OBS)页面获取；  - domainID是使用密钥所属账号的账号ID，获取方法参见[获取账号、IAM用户、项目、用户组、区域、委托方账号ID、委托的名称和ID](https://support.huaweicloud.com/api-obs/obs_04_0117.html)；  - key_id是从密码安全中心创建的密钥ID，获取方法请参见[查看密钥](https://support.huaweicloud.com/usermanual-dew/dew_01_0179.html)。   **默认取值：** 不涉及 |
   
#### 响应消息样式
```
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)
本接口的响应消息中不携带响应体。
#### 错误响应消息
无特殊错误，所有错误已包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)中。
#### 请求示例（SSE-KMS SM4）
```
PUT /?encryption  HTTP/1.1
User-Agent: curl/7.29.0
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Accept: */*
Date:  Thu, 21 Feb 2019 03:05:34 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:DpSAlmLX/BTdjxU5HOEwflhM0WI=
Content-Length: 778
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ServerSideEncryptionConfiguration xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"> 
    <Rule>
        <ApplyServerSideEncryptionByDefault>
            <SSEAlgorithm>kms</SSEAlgorithm>
            <KMSDataEncryption>SM4</KMSDataEncryption>
            <KMSMasterKeyID>4f1cd4de-ab64-4807-920a-47fc42e7f0d0</KMSMasterKeyID>
        </ApplyServerSideEncryptionByDefault>
        <BucketKeyEnabled>true</BucketKeyEnabled>
        <BucketKeyRotationPeriod>525600</BucketKeyRotationPeriod>
    </Rule>
</ServerSideEncryptionConfiguration>
```
#### 响应示例（SSE-KMS SM4）
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF26000001643670AC06E7B9A7767921
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSvK6z8HV6nrJh49gsB5vqzpgtohkiFm
Date: Thu, 21 Feb 2019 03:05:34 GMT
Content-Length: 0
```
#### 请求示例（SSE-KMS AES256）
```
PUT /?encryption HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date:  Thu, 21 Feb 2019 03:05:34 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:DpSAlmLX/BTdjxU5HOEwflhM0WI=
Content-Length: 778
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ServerSideEncryptionConfiguration xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"> 
    <Rule>
        <ApplyServerSideEncryptionByDefault>
            <SSEAlgorithm>kms</SSEAlgorithm>
            <KMSMasterKeyID>4f1cd4de-ab64-4807-920a-47fc42e7f0d0</KMSMasterKeyID>
        </ApplyServerSideEncryptionByDefault>
        <BucketKeyEnabled>true</BucketKeyEnabled>
    </Rule>
</ServerSideEncryptionConfiguration>
```
#### 响应示例（SSE-KMS AES256）
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF26000001643670AC06E7B9A7767921
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSvK6z8HV6nrJh49gsB5vqzpgtohkiFm
Date: Thu, 21 Feb 2019 03:05:34 GMT
Content-Length: 0
```
#### 请求示例（SSE-OBS）
```
PUT /?encryption HTTP/1.1 
User-Agent: curl/7.29.0 
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Accept: */*
Date:  Thu, 21 Feb 2019 03:05:34 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:DpSAlmLX/BTdjxU5HOEwflhM0WI=
Content-Length: 778
 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ServerSideEncryptionConfiguration xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"> 
    <Rule> 
        <ApplyServerSideEncryptionByDefault> 
            <SSEAlgorithm>AES256</SSEAlgorithm> 
        </ApplyServerSideEncryptionByDefault> 
    </Rule> 
</ServerSideEncryptionConfiguration>
```
#### 响应示例（SSE-OBS）
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF26000001643670AC06E7B9A7767921
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSvK6z8HV6nrJh49gsB5vqzpgtohkiFm
Date: Thu, 21 Feb 2019 03:05:34 GMT
Content-Length: 0
```
#### 使用SDK调用接口
建议您使用OBS SDK调用接口。SDK对API进行了封装以简化您的开发工作，直接调用SDK接口函数即可访问OBS，无需手动计算签名。
如何使用SDK配置服务端加密如下：
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_23_1735.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0838.html)  | [C](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_1500.html) | [Go](https://support.huaweicloud.com/sdk-go-devg-obs/obs_33_0441.html) | [BrowserJS](https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_3001.html) | [.NET](https://support.huaweicloud.com/sdk-dotnet-devg-obs/obs_25_1500.html) | [Android](https://support.huaweicloud.com/sdk-android-devg-obs/obs_26_1500.html) | [iOS](https://support.huaweicloud.com/sdk-ios-devg-obs/obs_27_1500.html) | [PHP](https://support.huaweicloud.com/sdk-php-devg-obs/obs_28_1500.html) | [Node.js](https://support.huaweicloud.com/sdk-nodejs-devg-obs/obs_29_1500.html) |
|---|---|---|---|---|---|---|---|---|---|
   
#### 相关文档
- 了解更多服务端加密方式的相关信息，请参见[服务端加密](https://support.huaweicloud.com/usermanual-obs/obs_03_0089.html)。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
