使用云盘加密功能,系统会将传输到云盘的数据自动进行加密,并在读取数据时自动解密。云盘加密适用于有高安全性或合规性要求的应用场景,您无需自建和维护密钥管理基础设施,即可保护数据的隐私性和自主性。本文介绍如何使用阿里云密钥管理服务KMS(Key Management Service)中管理的密钥对集群中的云盘存储卷数据加密。
前提条件
已创建Kubernetes集群,并且在该集群中安装CSI插件。具体操作,请参见创建Kubernetes托管版集群。
已开通密钥管理服务。具体操作,请参见开通密钥管理服务。
已通过kubectl连接Kubernetes集群。具体操作,请参见通过kubectl连接集群。
使用KMS的BYOK方式加密密钥时,需要为ECS实例授予KMS的访问权限。具体操作,请参见(可选)步骤一:配置KMS访问权限。
功能介绍
ECS加密采用行业标准的AES-256加密算法,利用密钥加密云盘。密钥可以是服务密钥和普通密钥(BYOK)。在加密解密的过程中,实例的性能几乎没有衰减。创建加密的数据盘并将其挂载到ECS实例后,以下数据会被自动加密,并在读取数据时自动解密。具体步骤,请参见加密数据盘。
加密云盘中的静态数据。
加密云盘和实例间传输的数据(不包括操作系统内的数据)。
加密云盘从实例传递到后端存储集群的数据。
从加密云盘创建的所有快照,并且该快照的加密密钥与云盘的加密密钥保持相同。
从加密快照创建的所有云盘。
使用限制
支持加密的数据盘包括ESSD云盘、SSD云盘、高效云盘和普通云盘。
不支持加密本地盘。
非加密云盘不能直接转换成加密云盘。
加密云盘不能直接转换为非加密云盘。
(可选)步骤一:配置KMS访问权限
使用KMS的BYOK方式加密密钥时,需要为ECS实例授予KMS的访问权限,即创建阿里云服务角色并进行授权。操作步骤如下:
使用阿里云账号登录RAM控制台。
在左侧导航栏,选择 。
在角色页面,单击创建角色。
在创建角色面板,选择可信实体类型为阿里云服务,然后单击下一步。
选择角色类型为普通服务角色。
输入角色名称为AliyunECSDiskEncryptDefaultRole,然后选择受信服务为云服务器。
单击完成,然后单击关闭。
在左侧导航栏选择 ,然后单击新增授权。
在新增授权页面,选择授权范围为整个云账号,在授权主体中搜索已创建好的阿里云服务角色AliyunECSDiskEncryptDefaultRole并选中。
根据需要选择权限是系统策略AliyunKMSFullAccess或自定义权限策略AliyunECSDiskEncryptCustomizedPolicy。
AliyunKMSFullAccess权限相对较大,如果需要更细粒度的权限控制,可参考下面步骤创建自定义权限策略AliyunECSDiskEncryptCustomizedPolicy。
在新增授权页面,单击新建权限策略进入创建权限策略页面。
在创建权限策略页面,单击脚本编辑页签,将如下自定义授权策略的内容拷贝到编辑框中。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt", "kms:TagResource" ], "Resource": "*" } ] }
单击继续编辑基本信息,在名称后面输入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****云盘处于已加密状态。