
# SSE-OBS加密（OBS托管密钥）
使用SSE-OBS方式加解密时不需要与KMS交互，访问时延更低，性能较SSE-KMS更好，适用于仅需要基础的加密能力的场景，以及批量加密的场景。
#### 费用说明
使用SSE-OBS加密不会产生额外费用，但配置桶或对象使用SSE-OBS加密会产生请求费用。
#### 注意事项
加密后对象的ETag值不是对象明文的MD5值，而是对象密文的MD5值。
#### 约束限制
SSE-OBS支持**AES256**一种加密算法。
#### SSE-OBS原理介绍
图1SSE-OBS加密流程   
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002399657773.png "点击放大")
加密对象时，如[图1]所示，SSE-OBS采用[信封加密](https://support.huaweicloud.com/usermanual-obs/obs_03_0090.html#ZH-CN_TOPIC_0000002384025226__zh-cn_topic_0000002360455272_li65537295493)机制，加密流程如下：
1. OBS通过系统根密钥派生出数据密钥明文，然后通过加密得到数据密钥密文。
2. OBS使用数据密钥明文加密数据，并在使用后将明文尽快从内存中删除。
3. OBS将数据密钥密文作为元数据与对象密文一起存储。
图2SSE-OBS解密流程   
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002366137840.png "点击放大")
解密对象时，如[图2]所示，解密流程如下：
1. 下载对象时，系统发起解密数据密钥密文的请求。
2. OBS解密数据密钥密文，返回明文。
3. OBS使用数据密钥明文解密对象密文，得到对象明文，并尽快从内存中数据密钥明文。
 
#### 相关权限配置
- 设置桶的加密方式为SSE-OBS，您必须是桶拥有者或拥有设置桶加密方式的权限。建议使用IAM或桶策略进行授权，如果使用IAM则需授予**obs:bucket:** **PutEncryptionConfiguration** 、**obs:bucket:** **GetEncryptionConfiguration** 权限，如果使用桶策略则需授予**PutEncryptionConfiguration** 、**GetEncryptionConfiguration** 权限。相关授权方式介绍可参见[OBS权限控制概述](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)，配置方式详见[使用IAM自定义策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0121.html)、[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
- 上传对象时使用SSE-OBS方式加密对象，需要拥有对象上传权限。使用IAM则需授予**obs:object:PutObject** ，使用桶策略则需授予**PutObject**。
- 下载使用SSE-OBS方式加密的对象，需要拥有对象下载权限。使用IAM则需授予**obs:object:GetObject** ，使用桶策略则需授予**GetObject。**
- 您可以通过设置桶策略，来限制指定桶的请求头域，如果您要对桶中的所有对象执行服务端加密限制，则可通过设置桶策略达成。例如，如果本租户的上传对象请求不包含服务端加密 (SSE-OBS) 的相关头域x-obs-server-side-encryption:"AES256"，则拒绝访问，可使用以下桶策略达成：
  ```
  { 
      "Statement": [ 
          { 
              "Sid": "DenyUnEncryptedObjectUploads", 
              "Effect": "Deny", 
              "Principal": "*", 
              "Action": "PutObject", 
              "Resource": "YourBucket/*", 
              "Condition": { 
                  "StringNotEquals": { 
                      "x-obs-server-side-encryption": "AES256" 
                  } 
              } 
          } 
      ] 
  }
  ```
  
 
#### 为桶配置SSE-OBS加密
OBS支持通过[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)、API、SDK方式配置桶SSE-OBS加密，不支持通过OBS Browser+、obsutil方式配置。
#### 使用OBS控制台
本节仅介绍针对已有桶，如何开启服务端加密。创建桶时如何开启加密，请参见[创建桶](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829088.html#ZH-CN_TOPIC_0000001952642149)。
1. 在OBS[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)左侧导航栏选择"桶列表"。
2. 在桶列表中，单击待操作的桶，进入"对象"页面。
3. 在左侧导航栏，单击"概览"，进入"概览"页。
4. 在概览页的"基础配置"区域下，单击"服务端加密"卡片，系统弹出"服务端加密"对话框。
5. 单击按钮开启服务端加密
6. 加密模式选择"SSE-OBS"。
7. 单击"确定"。
 
#### 使用API
[设置桶的加密配置](https://support.huaweicloud.com/api-obs/obs_04_0062.html)
了解更多详见[服务端加密相关接口概览](https://support.huaweicloud.com/usermanual-obs/obs_03_0094.html#ZH-CN_TOPIC_0000002384025230)。
#### 使用SDK
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_1901.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_1303.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_1500.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) |
|---|---|---|---|---|---|---|---|---|---|
   
#### 为对象配置SSE-OBS加密
OBS支持通过[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)、API、SDK方式对上传对象SSE-OBS进行加密，不支持通过OBS Browser+、obsutil方式配置。
#### 使用OBS控制台
1. 在OBS[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)左侧导航栏选择"桶列表"。
2. 在桶列表中，单击待操作的桶，进入"对象"页面。
3. 单击"上传对象"，系统弹出"上传对象"对话框。
4. 添加待上传的文件。
5. 选择"加密模式"，选择"SSE-OBS"
6. 单击"确定"。 
   对象上传成功后，可在对象详情中查看对象的加密状态。
   
   
 
#### 使用API
详见[服务端加密相关接口概览](https://support.huaweicloud.com/usermanual-obs/obs_03_0094.html#ZH-CN_TOPIC_0000002384025230)。
#### 使用SDK
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_1901.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_1303.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_0603.html) | [BrowserJS](https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_1500.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_0090.html#ZH-CN_TOPIC_0000002384025226__zh-cn_topic_0000002360455272_section4842949112614)。
