加密OSS存储卷

数据加密适用于对高安全性或合规性具有较高要求的应用场景,您无需自建和维护密钥管理基础设施,通过加密保护存储在阿里云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计费说明

    数据无需通过网络发送到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:
        - ReadOnlyMany
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: oss-csi-pv
        volumeAttributes:
          bucket: "python"
          url: "oss-cn-hangzhou.aliyuncs.com"
          otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other"
          akId: "<YourAccessKey ID>"           # 请替换<YourAccessKey ID>为您的AccessKey ID。
          akSecret: "<YourAccessKey Secret>"   # 请替换<YourAccessKey Secret>为您的AccessKey Secret。
          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访问权限。

    使用KMS托管的指定CMK ID加密OSS Object,需要为PV使用的AccessKey对应的RAM用户授予KMS的访问权限,操作步骤如下。更多信息,请参见服务器端加密

    1. 使用阿里云账号登录RAM控制台

    2. 在左侧导航栏,选择身份管理 > 用户

    3. 用户页面,单击PV使用的AccessKey对应RAM用户操作列的添加权限

    4. 根据需要选择权限是系统策略AliyunKMSFullAccess或自定义权限AliyunOSSEncryptCustomizedPolicy。

      AliyunKMSFullAccess权限相对较大,如果需要更细粒度的权限控制,可为RAM用户创建自定义权限策略AliyunOSSEncryptCustomizedPolicy,自定义策略内容如下,具体操作请参见创建自定义权限策略

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "kms:List*",
              "kms:DescribeKey",
              "kms:GenerateDataKey",
              "kms:Decrypt"
            ],
            "Resource": [
              "acs:kms:*:141661496593****:*"//表示允许调用该阿里云账号ID下所有的KMS密钥,如果仅允许使用某个CMK,此处可输入对应的CMK ID。
            ]
          }
        ]
      }
    5. 单击确定,然后单击完成

  2. 将以下内容复制到kms-cmk.yaml文件中。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: oss-csi-pv
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadOnlyMany
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: oss-csi-pv
        volumeAttributes:
          bucket: "python"
          url: "oss-cn-hangzhou.aliyuncs.com"
          otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other"
          akId: "<YourAccessKey ID>"           # 请替换<YourAccessKey ID>为您的AccessKey ID。
          akSecret: "<YourAccessKey Secret>"   # 请替换<YourAccessKey Secret>为您的AccessKey Secret。
          path: "/"
          encrypted: "kms"
          kmsKeyId: "<YourKMS KeyID>"          # 请替换<YourKMS KeyID>为您的KMS ID。
  3. 执行以下命令创建加密存储卷。

    kubectl create -f kms-cmk.yaml
  4. 查看已创建的加密存储卷。

    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: "<YourAccessKey ID>"             # 请替换<YourAccessKey ID>为您的AccessKey ID。
          akSecret: "<YourAccessKey Secret>"     # 请替换<YourAccessKey Secret>为您的AccessKey Secret。
          path: "/"
          encrypted: "aes256"
  2. 执行以下命令创建加密存储卷。

    kubectl create -f sse-oss.yaml
  3. 查看已创建的加密存储卷。

    1. 登录容器服务管理控制台

    2. 在控制台左侧导航栏,单击集群

    3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

    4. 在集群管理页左侧导航栏选择存储 > 存储卷。可以在存储卷页面查看到创建的加密存储卷。