
# 加密对象存储卷
若您的业务对数据安全性和合规性有严格要求，可使用OBS服务端加密功能，对上传到OBS存储的数据进行加密保护。服务端加密是指OBS服务端对客户端上传到OBS的对象进行加密存储。在访问对象时，由OBS服务端对文件进行解密，然后向客户端返回解密后的数据。服务端加密支持SSE-KMS、SSE-OBS、SSE-C三种加密方式，目前，CCE仅支持创建使用SSE-KMS方式加密的对象存储卷。
关于SSE-KMS加密方式的详细介绍，请参见[服务端加密](https://support.huaweicloud.com/usermanual-obs/obs_03_0088.html)。
#### 前提条件
- 在IAM中，已有"cce_cluster_agency"委托。您可前往"IAM控制台 \> 委托"页签，查看该委托是否创建。
- 已经创建好一个集群，且集群版本在1.25.9-r0、1.27.6-r0、1.28.4-r0及以上。
- 已在集群中安装[CCE容器存储（Everest）](https://support.huaweicloud.com/usermanual-cce/cce_10_0066.html)，且插件版本在2.4.153及以上。
- 已在密码安全中心（DEW）中创建可用密钥，操作详情请参见[创建密钥](https://support.huaweicloud.com/usermanual-dew/dew_01_0178.html)。
- 如果您需要通过命令行创建，需要使用kubectl连接到集群，详情请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
 
#### 约束与限制
- 该功能正在陆续上线中，具体请以[OBS服务声明](https://support.huaweicloud.com/usermanual-obs/obs_03_0088.html)为准。
- 使用SSE-KMS服务端加密功能对对象存储卷进行加密时，若需要**开启存储桶密钥开关** ，则需确保"cce_cluster_agency"委托中具有kms:cmk:get、kms:cmk:list、kms:dek:crypto、kms:cmk:create以及kms:dek:create权限。其中"cce_cluster_agency"委托默认配置kms:cmk:get、kms:cmk:list以及kms:dek:crypto权限，而**kms:cmk:create** 以及**kms:dek:create** 权限需手动配置，具体操作请参见[配置KMS权限]。
- 当需要使用开启了SSE-KMS服务端加密功能的桶或者桶内对象时，请在IAM中为请求者配置kms:cmk:get、kms:cmk:list、kms:cmk:create、kms:dek:create、kms:dek:crypto权限，并确保请求访问的对象存储卷中已挂载对应的访问密钥（AK/SK），以实现对象的上传和下载操作。具体操作请参见[给IAM用户授权](https://support.huaweicloud.com/usermanual-iam/iam_01_0652.html)和[对象存储卷挂载设置自定义访问密钥（AK/SK）](https://support.huaweicloud.com/usermanual-cce/cce_10_0336.html)。
 
#### 通过kubectl自动创建SSE-KMS加密的对象存储卷
1. 使用kubectl连接集群。
2. 创建pvc-obs-auto.yaml文件。其他参数说明，请参见[kubectl命令行方式](https://support.huaweicloud.com/usermanual-cce/cce_10_0630.html#cce_10_0630__section104927484275)。
   
   ```
   apiVersion: v1
   kind: PersistentVolumeClaim
   metadata:
     name: evs-encrypt-test1
     namespace: default
     annotations:
       everest.io/obs-volume-type: STANDARD
       csi.storage.k8s.io/fstype: s3fs
       everest.io/csi.sse: "kms"                        # 固定填'kms'
       everest.io/csi.data-encryption-algorithm: "xxx"  # 用来加密数据的数据加密算法
       everest.io/crypt-key-id: "xxx"                   # SSE-KMS加密方式下使用的KMS主密钥
       everest.io/csi.sse-kms-key-project-id: "xxx"     # SSE-KMS加密方式下KMS主密钥所属的项目ID
       everest.io/csi.sse-bucket-key-enabled: 'true'    # 非必填项，是否开启存储桶密钥的开关
   spec:
     accessModes:
       - ReadWriteMany
     resources:
       requests:
         storage: 1Gi
     storageClassName: csi-obs
   ```
   表1参数说明 
   | 参数                                       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   |:---|:---|
   | everest.io/csi.sse                       | 用于创建开启SSE-KMS加密的对象存储，值固定为'kms'。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | everest.io/csi.data-encryption-algorithm | 用于指定数据加密算法，取值为AES_256或SM4。 - AES_256：表示AES对称密钥。  - SM4：表示国密SM4对称密钥。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | everest.io/crypt-key-id                  | 表示SSE-KMS加密方式下使用的KMS主密钥，获取方法请参见[查看密钥详细信息](https://support.huaweicloud.com/usermanual-dew/dew_01_0179.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | everest.io/csi.sse-kms-key-project-id    | 表示SSE-KMS加密方式下KMS主密钥所属的项目ID（非企业项目ID），获取方式请参见[从控制台获取项目ID](https://support.huaweicloud.com/api-dew/dew_02_0009.html#section1)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | everest.io/csi.sse-bucket-key-enabled    | 非必填项，用于开启存储桶密钥开关，取值为'true'或'false'。不填该参数时，默认为'false'。 - true：表示开启存储桶密钥开关。该开关开启后，可以降低加密请求次数并提升访问效率。  - false：表示不开启存储桶密钥开关。   当创建的底层存储为并行文件系统时，该参数必填，且需设置为'true'。 说明： 开启存储桶密钥开关时，则需确保"cce_cluster_agency"委托中具有**kms:cmk:get** 、**kms:cmk:list** 、**kms:dek:crypto** 、**kms:cmk:create** 以及**kms:dek:create** 权限。其中"cce_cluster_agency"委托默认配置**kms:cmk:get** 、**kms:cmk:list** 以及**kms:dek:crypto** 权限，而**kms:cmk:create** 以及**kms:dek:create** 权限需手动配置，具体操作请参见[配置KMS权限]。 |
      
   
   
3. 执行命令创建 PVC。 
   ```
   kubectl apply -f pvc-obs-auto.yaml
   ```
   
   
4. 前往"存储卷声明"页面，查看加密对象存储卷声明是否创建成功，并查看存储配置项是否显示已加密。
 
 #### 配置KMS权限
1. 登录[IAM控制台](https://console.huaweicloud.com/iam/#/iam/agencies)，在左侧导航栏单击"委托"。在右侧搜索框中，搜索"cce_cluster_agency"。在搜索结果中，单击"cce_cluster_agency"名称，进入基本信息页。
2. 切换至"授权记录"页签，单击"授权"，右上角单击"新建策略"。
3. 在"新建策略"步骤中，配置相关参数。本示例仅介绍必要参数，更多参数说明请参见[创建自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
   
   图1配置权限   
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002331582633.png "点击放大")
   表2 
   | 参数   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   |:---|:---|
   | 策略名称 | 请根据需求自定义策略名称。 命名规范：长度不超过128个字符，仅支持大小写字母、中文、数字、空格或特殊字符(-_.,)。                                                                                                                                                                                                                                                                                                                                                     |
   | 策略内容 | 用于配置具体策略，配置如下： - 允许：请选择"允许"。  - 云服务：请选择"密码安全中心（KMS）"。  - 操作：请勾选"kms:cmk:create"和"kms:dek:create"权限。  - 所有资源：请选择"所有资源"   |
      
   
   
4. 在右下角单击"下一步"，在"确认"弹窗中单击"确定"。当策略列表中出现新建的策略名称，则说明策略创建成功。
5. 在"授权 \> 选择策略"页面，勾选新建的策略名称，并在右下角单击"下一步"。 
   图2选择策略   
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002331590213.png "点击放大")
   
   
   
6. 在"授权 \> 设置最小授权范围"页面，选择"所有资源"，并在右下角单击"确定"。在"授权 \> 完成"页面，单击"完成"。
 
