使用云盘加密功能,系统会将传输到云盘的数据自动进行加密,并在读取数据时自动解密。云盘加密适用于有高安全性或合规性要求的应用场景,您无需自建和维护密钥管理基础设施,即可保护数据的隐私性和自主性。本文介绍如何使用阿里云密钥管理服务KMS(Key Management Service)中管理的密钥对集群中的云盘存储卷数据加密。
前提条件
集群默认已安装CSI组件。如需升级请参见升级csi-plugin和csi-provisioner。
说明如果您集群中使用Flexvolume组件,由于Flexvolume已废弃,请参见迁移Flexvolume至CSI完成迁移后再进行挂载。您可以在 ,在存储页签下确认存储组件类型。
已开通密钥管理服务。具体操作,请参见开通密钥管理服务。
已通过kubectl连接Kubernetes集群。具体操作,请参见通过kubectl连接集群。
使用KMS的BYOK方式加密密钥时,需要为ECS实例授予KMS的访问权限。具体操作,请参见(可选)步骤一:配置KMS访问权限。
功能介绍
ECS加密采用行业标准的AES-256加密算法,利用密钥加密云盘。密钥可以是服务密钥和普通密钥(BYOK)。在加密解密的过程中,实例的性能几乎没有衰减。创建加密的数据盘并将其挂载到ECS实例后,以下数据会被自动加密,并在读取数据时自动解密。具体步骤,请参见加密数据盘。
加密云盘中的静态数据。
加密云盘和实例间传输的数据(不包括操作系统内的数据)。
加密云盘从实例传递到后端存储集群的数据。
从加密云盘创建的所有快照,并且该快照的加密密钥与云盘的加密密钥保持相同。
从加密快照创建的所有云盘。
使用限制
支持加密的数据盘包括ESSD云盘、SSD云盘、高效云盘和普通云盘。
不支持加密本地盘。
非加密云盘不能直接转换成加密云盘。
加密云盘不能直接转换为非加密云盘。
(可选)步骤一:配置KMS访问权限
使用KMS的BYOK方式加密密钥时,需要为ECS实例授予KMS的访问权限,即创建阿里云服务角色并进行授权。操作步骤如下:
创建用于访问KMS的RAM角色。如果已有AliyunECSDiskEncryptDefaultRole角色,可直接进行授权。
使用阿里云账号或RAM管理员账号登录RAM控制台。
在左侧导航栏,选择 。
在角色页面,单击创建角色。
在创建角色页面,选择可信实体类型为阿里云服务,然后单击下一步。
选择角色类型为普通服务角色。
输入角色名称为AliyunECSDiskEncryptDefaultRole,然后选择受信服务为云服务器。
单击完成,然后单击关闭。
为上一步创建的RAM角色授权。
在左侧导航栏选择
,然后单击新增授权。在新增授权页面,选择授权范围为账号级别,在授权主体中搜索已创建的RAM角色AliyunECSDiskEncryptDefaultRole并选中。
根据需要选择权限是系统策略AliyunKMSFullAccess或自定义权限策略AliyunECSDiskEncryptCustomizedPolicy。
重要AliyunKMSFullAccess权限相对较大,如果需要更细粒度的权限控制,可参考下面步骤创建自定义权限策略AliyunECSDiskEncryptCustomizedPolicy。
单击确认新增授权,然后单击关闭。
步骤二:加密云盘数据卷
在创建云盘时才可以启用云盘加密,而挂载或卸载云盘时并不需要进行加密相关的配置和操作。
配置StorageClass参数。
将以下内容复制到sc-kms.yaml文件中。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-disk-encrypted provisioner: diskplugin.csi.alibabacloud.com parameters: fsType: ext4 type: cloud_ssd encrypted: "true" kmsKeyId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx reclaimPolicy: Delete
说明encrypted
:配置创建的云盘是否为加密云盘,true
表示生成加密云盘。kmsKeyId
:表示创建加密云盘使用的KMS密钥,不配置时会使用默认的CMK;当encrypted
为false
时,此配置不生效。
执行以下命令创建StorageClass。
kubectl create -f sc-kms.yaml
执行以下命令查看生成的StorageClass。
kubectl get sc csi-disk-encrypted
预期输出:
NAME PROVISIONER AGE csi-disk-encrypted diskplugin.csi.alibabacloud.com 9m5s
创建PVC。
将以下内容复制到sc-pvc.yaml文件中。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: csi-disk-encrypted
执行以下命令创建PVC。
kubectl create -f sc-pvc.yaml
执行以下命令查看创建的PVC。
kubectl get pvc
预期输出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-pvc Bound d-wz92s6d95go6ki9x**** 25Gi RWO csi-disk-encrypted 10m
执行以下命令查看PV。
kubectl get pv
预期输出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-wz92s6d95go6ki9x**** 25Gi RWO Retain Bound default/disk-pvc csi-disk-encrypted 10m
从以上预期输出可得,创建的云盘ID为:d-wz92s6d95go6ki9x****。
查看加密云盘是否生效。
登录ECS管理控制台。
在左侧导航栏,选择 。
在云盘页面可看到d-wz92s6d95go6ki9x****云盘处于已加密状态。