加密云盘存储卷

更新时间:2025-03-17 08:49:56

使用云盘加密功能,系统会将传输到云盘的数据自动进行加密,并在读取数据时自动解密。云盘加密适用于有高安全性或合规性要求的应用场景,您无需自建和维护密钥管理基础设施,即可保护数据的隐私性和自主性。本文介绍如何使用阿里云密钥管理服务KMS中管理的密钥对集群中的云盘存储卷进行数据加密。

功能介绍

了解加密原理

云盘的加密采用行业标准的AES-256加密算法,并且通过密钥管理服务KMS进行加密。加密密钥采用双层设计,并通过信封加密的机制实现对数据的加密,第一层为用户的主密钥CMK(Customer Master Key),第二层为根据主密钥生成的数据密钥DK(Data Key)。其中,主密钥CMK用于对数据密钥DK进行加解密操作和保护,数据密钥DK用于对真实业务数据进行加解密操作和保护。加密流程和信封加密机制如下:

  1. 加密数据密钥DK。

    在使用数据密钥DK之前,会用主密钥CMK加密数据密钥。加密后的数据密钥(非明文)可以安全地与加密的业务数据一同存储。这样即使存储介质被访问,没有CMK也无法解密数据密钥。

  2. 存储和读取加密数据。

    当需要读取加密数据时,首先通过KMS请求解密数据密钥。KMS验证请求后,返回数据密钥的明文形式,这一过程通常在内存中完成,不会存储在任何存储介质上。然后,使用管理程序在内存中的明文数据密钥来解密云盘I/O操作中的数据。

说明

整个信封加密过程中,主密钥的明文不会在KMS托管的密码机之外进行存储和使用。同时,数据密钥明文仅会在用户使用的服务实例所在的宿主机的内存中进行使用,永远不会以明文形式存储在任何存储介质上。

更多信息,请参见云产品集成KMS加密概述

加密哪些数据

加密的数据盘挂载到Pod后,以下数据会被自动加密,并在读取数据时自动解密。

  • 加密云盘中的静态数据。

  • 加密云盘和实例间传输的数据(不包括操作系统内的数据)。

  • 加密云盘从实例传递到后端存储集群的数据。

  • 从加密云盘创建的所有快照,并且该快照的加密密钥与云盘的加密密钥保持相同。

  • 从加密快照创建的所有云盘。

前提条件

  • 集群中已安装CSI组件。

    说明
    • 您可以在集群管理页的左侧导航栏选择运维管理 > 组件管理,在存储页签下确认csi-plugincsi-provisioner组件的安装情况。如需升级CSI组件来享受某些特定能力,请参见升级csi-plugincsi-provisioner

    • 如果您的集群目前使用Flexvolume组件,由于Flexvolume已废弃,请先迁移到CSI组件。具体操作,请参见迁移FlexvolumeCSI

  • 已开通密钥管理服务

注意事项

  • 支持加密的云盘类型包括ESSD AutoPL云盘、ESSD云盘、ESSD Entry云盘、SSD云盘、高效云盘和普通云盘。

  • 不支持加密本地盘。

  • 非加密云盘不能直接转换成加密云盘;加密云盘也不能直接转换为非加密云盘。

配置KMS访问权限

使用KMS加密云盘时,需要为ECS授予KMS的访问权限。

  1. 创建用于访问KMSRAM角色。具体操作,请参见创建可信实体为阿里云服务的RAM角色

    说明

    如果已有AliyunECSDiskEncryptDefaultRole角色,可直接进行授权。

    需要注意的配置项如下:

    • 信任主体类型云服务

    • 信任主体名称云服务器ECS/ECS

    • 角色名称:AliyunECSDiskEncryptDefaultRole

  2. RAM角色(AliyunECSDiskEncryptDefaultRole)授权。具体操作,请参见RAM角色授权

    需要注意的配置项如下:

    • 资源范围账号级别

    • 权限策略:选择系统策略AliyunKMSFullAccess,或者自定义权限策略AliyunECSDiskEncryptCustomizedPolicy。

      重要

      AliyunKMSFullAccess权限相对较大,如果需要更细粒度的权限控制,建议创建自定义权限策略

      展开查看AliyunECSDiskEncryptCustomizedPolicy权限内容

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "kms:DescribeKey",
                      "kms:GenerateDataKey",
                      "kms:Decrypt",
                      "kms:TagResource"
                  ],
                  "Resource": "*"
              }
          ]
      }
      1. 单击确定

加密云盘存储卷

在创建云盘时才可以启用云盘加密,挂载或卸载云盘时并不需要进行加密相关的配置和操作。

  1. 创建启用云盘加密的StorageClass。

    1. 修改以下YAML,保存到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_essd
          encrypted: "true"
          kmsKeyId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      reclaimPolicy: Delete

      相关parameters说明如下:

      • encrypted:创建的云盘是否为加密云盘。配置为true表示生成加密云盘。

      • kmsKeyId:创建加密云盘所使用的KMS密钥。不配置时会使用默认的CMK;当encryptedfalse时,此配置不生效。

    2. 创建StorageClass。

      kubectl create -f sc-kms.yaml
  2. 创建PVC。

    1. 将以下内容保存为sc-pvc.yaml。

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: disk-pvc
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 20Gi
        storageClassName: csi-disk-encrypted
    2. 创建PVC。

      kubectl create -f sc-pvc.yaml
    3. 查看PVC。

      kubectl get pvc

      预期返回如下,可以看到PVC已绑定自动创建的PV,在VOLUME中可以获取对应的云盘ID。

      NAME       STATUS    VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS         VOLUMEATTRIBUTESCLASS   AGE
      disk-pvc   Bound     d-2ze0nmbv2var0d9h****   20Gi       RWO            csi-disk-encrypted   <unset>                 6m20s
  3. 查看加密云盘是否生效。

    1. 登录ECS管理控制台

    2. 在左侧导航栏,选择存储与快照 > 块存储

    3. 云盘页签下,找到目标云盘,单击云盘ID。

    4. 在云盘详情页面的基本信息中,确认是否加密字段为已加密

相关文档

如需了解更多关于云盘加密的信息,请参见加密云盘

  • 本页导读 (1)
  • 功能介绍
  • 前提条件
  • 注意事项
  • 配置KMS访问权限
  • 加密云盘存储卷
  • 相关文档

点击开启售前

在线咨询服务