# 加密云硬盘存储卷
云盘加密功能适用于需要高安全性或合规性要求的应用场景，可以保护数据的隐私性和自主性。本文将为您介绍如何使用密码安全中心（DEW，Data Encryption Workshop，该服务基于国家密码局认证的云服务器密码机（Cloud-hosted Hardware Security Module，CloudHSM）构建密码服务资源池，实现云上密码资源的统一管控调度，为用户按需提供虚拟密码机（Virtual Security Module，VSM），对接业务应用实现数据加解密、签名验签、密钥创建、密钥安全存储等安全功能）中管理的密钥对云盘存储卷数据进行加密。
#### 加密原理
加密系统采用双层密钥结构，该结构包含两个层级：第一层级为用户的主密钥CMK（Customer Master Key），第二层级为数据密钥DK（Data Key）。其中，主密钥CMK主要用于对数据密钥DK进行加密和解密操作，以确保其在存储或传输过程中的安全性；而数据密钥DK则用于对实际的业务数据进行加解密处理，整个加密流程如下：
1. **加密数据密钥DK**
   在使用数据密钥DK对业务数据进行加密之前，会先使用主密钥CMK对其进行加密。只有经过CMK加密后的数据密钥才会被存储或传输。这样，即使攻击者获取了存储介质并访问到加密的数据密钥和业务数据，缺少主密钥CMK也无法完成解密操作，从而有效保障数据安全。
   
2. **加密数据的存储与读取**
   当需要读取已加密的数据时，首先向密钥管理（KMS）发起解密请求，用以获取数据密钥的明文。KMS在验证请求合法性后，将使用主密钥CMK 解密数据密钥，并返回其明文形式。这一解密过程通常在内存中完成，不会持久化保存于任何存储介质上。随后，系统通过管理程序在内存中使用该明文数据密钥对云硬盘 I/O 中的加密数据进行解密处理，确保数据在传输和使用过程中的安全性。
   
 
#### 前提条件
- 您已经创建好一个集群，并且在该集群中安装[CCE容器存储（Everest）](https://support.huaweicloud.com/usermanual-cce/cce_10_0066.html)。
- 已在密码安全中心（DEW）中创建可用密钥，操作详情请参见[创建密钥](https://support.huaweicloud.com/usermanual-dew/dew_01_0178.html)。
- 如果您需要通过命令行创建，需要使用kubectl连接到集群，详情请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
 
#### 自动创建加密云硬盘存储卷
通过动态存储卷使用云硬盘时，CCE支持通过控制台和kubectl命令方式，创建加密云硬盘存储卷，以保护数据的隐私性和自主性。具体步骤如下：
- [通过控制台方式]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
  
  2. 动态创建存储卷声明和存储卷。 
     1. 在左侧导航栏选择"存储"，在右侧选择"存储卷声明"页签。单击右上角"创建存储卷声明 PVC"，在弹出的窗口中填写存储卷声明参数。
     
     2. "存储卷声明类型"选择"云硬盘"，并开启加密，并选择密钥。其余参数可根据情况按需填写，详情请参见[通过动态存储卷使用云硬盘](https://support.huaweicloud.com/usermanual-cce/cce_10_0615.html)。
        图1加密存储卷   
        ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000001828029450.png "点击放大") 
     
     3. 单击"创建"。
     
     
     
     
  
  3. 前往"存储卷声明"页面，查看加密云硬盘存储卷声明是否创建成功，并查看存储配置项是否显示已加密。 
     图2PVC加密   
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000001874740477.png "点击放大")
     在应用中使用加密PVC时，和使用普通PVC的方法一致。
     
     
   
- [通过kubectl命令行方式]
  1. 使用kubectl连接集群。
  
  2. 创建 pvc-evs-auto.yaml 文件。其中参数说明可参见[kubectl命令行方式](https://support.huaweicloud.com/usermanual-cce/cce_10_0615.html#cce_10_0615__section189114109321)。
     
     ```
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-evs-auto
       namespace: default
       annotations:
         everest.io/disk-volume-type: SAS    # 云硬盘的类型
         everest.io/crypt-key-id: 37f202db-a970-4ac1-a506-e5c4f2d7ce69   # 加密密钥ID，可在密码安全中心获取
         everest.io/csi.data-encryption-algorithm: "SM4"                # 用于指定数据加密算法
       labels:
         failure-domain.beta.kubernetes.io/region: <your_region>   # 替换为您待部署应用的节点所在的区域
         failure-domain.beta.kubernetes.io/zone: <your_zone>       # 替换为您待部署应用的节点所在的可用区
     spec:
       accessModes:
       - ReadWriteOnce               # 云硬盘必须为ReadWriteOnce
       resources:
         requests:
           storage: 10Gi             # 云硬盘大小，取值范围 1-32768
       storageClassName: csi-disk    # StorageClass类型为云硬盘
     ```
     表1加密参数说明 
     | 参数                                        | 示例                                 | 说明                                                                                                                                                                                                                                                                                                                                                                                          |
     |:---|:---|:---|
     | everest.io/crypt-key-id                  | 37f202db-a970-4ac1-a506-e5c4f2d7ce69 | 表示加密密钥的ID，可以在密码安全中心（DEW）中获取。                                                                                                                                                                                                                                                                                                                                                                 |
     | everest.io/csi.data-encryption-algorithm | "SM4"                              | 非必填参数，用于指定数据加密算法，取值为AES_256或SM4，不填该参数时将默认使用AES_256。 说明： 使用该参数时，要求集群版本在1.25.9-r0、1.27.6-r0、1.28.4-r0及以上，Everest插件版本在2.4.153及以上，且该功能正在陆续上线中，具体请以EVS服务的公告为准。 - AES_256：表示AES对称密钥。  - SM4：表示国密SM4对称密钥。   |
        
     
     
  
  3. 执行命令创建 PVC。 
     ```
     kubectl apply -f pvc-evs-auto.yaml
     ```
     
     
  
  4. 前往"存储卷声明"页面，查看加密云硬盘存储卷声明是否创建成功，并查看存储配置项是否显示已加密。
   
#### 相关文档
云硬盘加密支持使用KMS提供的密钥，请参见[云硬盘加密概述](https://support.huaweicloud.com/usermanual-evs/evs_01_0018.html#section2)。
