数据加密适用于对高安全性或合规性具有较高要求的应用场景,您无需自建和维护密钥管理基础设施,通过加密保护存储在阿里云ECS上的数据就能保障数据的隐私性和自主性。本文介绍如何使用KMS(Key Management Service)托管的CMK(Customer Master Key)或OSS完全托管密钥功能对阿里云容器服务ACK集群的OSS存储卷数据加密。

前提条件

加密方式

OSS存储卷加密分为服务端加密SSE(Server-Side Encryption)、客户端加密,阿里云容器服务只支持服务端加密:
  • 服务端加密:OSS将数据保存到数据中心的磁盘之前进行加密,并且在下载对象时自动进行解密。
  • 客户端加密:可以使用客户端加密SDK,在本地进行数据加密,并将加密后的数据上传到OSS。
OSS针对不同使用场景提供了两种服务器端加密方式,您可以根据实际使用场景选用。
  • 使用KMS托管的默认CMK或指定CMK ID加密OSS Object(SSE-KMS)
    • KMS托管的默认CMK加密OSS Object:上传对象文件时,配置HTTP X-OSS-server-side-encryptionKMS,不指定CMK ID。
    • KMS托管的指定CMK ID加密OSS Object:上传对象文件时,配置HTTP X-OSS-server-side-encryptionKMS,指定X-OSS-server-side-encryption-key-idCMK ID
    注意 使用KMS密钥功能时会产生少量的KMS密钥API调用费用。关于费用详情,请参考计费说明
    数据无需通过网络发送到KMS服务端进行加解密,是一种低成本的加解密方式。
  • 使用OSS完全托管的密钥加密OSS Object(SSE-OSS)
    • 基于OSS完全托管的加密方式,是Object的一种属性。
    • OSS负责生成和管理数据加密密钥,并使用行业标准的强加密算法AES-256。
    • 上传对象文件时,配置HTTP X-OSS-server-side-encryptionAES256
同一对象(Object)在同一时间内仅可以使用一种服务器端加密方式。

为OSS存储卷加密

通过OSSFS工具配置OSS存储卷的加密参数,在挂载PV时配置生效。关于OSSFS的配置及安装,请参见OSSFS的安装及配置

OSSFS支持三种加密配置方式:

方式一:使用KMS托管的默认CMK加密OSS Object

  1. 将以下内容复制到kms-cmk-default.yaml文件中。
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: oss-csi-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: oss-csi-pv
        volumeAttributes:
          bucket: "python"
          url: "oss-cn-hangzhou.aliyuncs.com"
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
          akId: "LTAI4G6E3whAAKnzdRPx****"
          akSecret: "uRJeIi0cbahgWOhxncpp54wR5b****"
          path: "/"
          encrypted: "kms"
    参数 说明
    akId AccessKey ID
    akSecret AccessKey Secret
    encrypted 存储卷的加密方式:
    • kms:表示KMS加密方式。
    • aes256:表示AES-256算法加密方式。
  2. 执行以下命令创建加密存储卷。
    kubectl create -f kms-cmk-default.yaml
  3. 查看已创建的加密存储卷。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏选择存储 > 存储卷。可以在存储卷页面查看到创建的加密存储卷。

方式二:使用KMS托管的指定CMK ID加密OSS Object

  1. 将以下内容复制到kms-cmk.yaml文件中。
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: oss-csi-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: oss-csi-pv
        volumeAttributes:
          bucket: "python"
          url: "oss-cn-hangzhou.aliyuncs.com"
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
          akId: "LTAI4G6E3whAAKnzdRPx****"
          akSecret: "uRJeIi0cbahgWOhxncpp54wR5b****"
          path: "/"
          encrypted: "kms"
          kmsKeyId: "1234abcd-12ab-34cd-56ef-12345678****"
  2. 执行以下命令创建加密存储卷。
    kubectl create -f kms-cmk.yaml
  3. 查看已创建的加密存储卷。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏选择存储 > 存储卷。可以在存储卷页面查看到创建的加密存储卷。

方式三:使用OSS完全托管的密钥加密OSS Object(SSE-OSS)

  1. 将以下内容复制到sse-oss.yaml文件中。
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: oss-csi-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: oss-csi-pv
        volumeAttributes:
          bucket: "python"
          url: "oss-cn-hangzhou.aliyuncs.com"
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
          akId: "LTAI4G6E3whAAKnzdRPx****"
          akSecret: "uRJeIi0cbahgWOhxncpp54wR5b****"
          path: "/"
          encrypted: "aes256"
  2. 执行以下命令创建加密存储卷。
    kubectl create -f sse-oss.yaml
  3. 查看已创建的加密存储卷。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏选择存储 > 存储卷。可以在存储卷页面查看到创建的加密存储卷。