加密ossfs 1.0存储卷

数据加密适用于高安全性或合规性要求的场景。通过KMS托管的CMKOSS托管密钥,您可以对ACK集群中的OSS存储卷进行加密,保障数据隐私和自主性。

加密方式说明

OSS存储卷加密分为服务端加密SSE(Server-Side Encryption)和客户端加密。ACK只支持服务端加密。

  • 服务端加密:OSS将数据保存到数据中心的磁盘之前进行加密,并且在下载对象时自动进行解密。

  • 客户端加密:可以使用客户端加密SDK,在本地进行数据加密,并将加密后的数据上传到OSS。

针对不同使用场景,OSS提供两种服务端加密方式来加密OSS Object。同一对象(Object)在同一时间内仅可以使用一种服务器端加密方式。

  • 使用KMS托管的CMK加密(SSE-KMS)

    • 使用默认CMK:上传对象文件时,在请求头中配置X-OSS-server-side-encryptionKMS,不指定CMK ID。

    • 使用指定CMK ID:上传对象文件时,在请求头中配置X-OSS-server-side-encryptionKMS,指定X-OSS-server-side-encryption-key-idCMK ID

    重要

    使用KMS密钥功能时会产生少量的KMS密钥API调用费用。关于费用详情,请参考KMS 1.0计费说明

    数据无需通过网络发送到KMS服务端进行加解密,是一种低成本的加解密方式。

  • 使用OSS完全托管的密钥加密(SSE-OSS)

    • 基于OSS完全托管的加密方式,是Object的一种属性。

    • OSS负责生成和管理数据加密密钥,并使用行业标准的强加密算法AES-256。

    • 上传对象文件时,在请求头中配置X-OSS-server-side-encryptionAES256

可通过ossfs工具配置OSS存储卷的加密参数,在挂载PV时配置生效。

关于OSSFS的配置及安装,请参见安装ossfs 1.0

准备工作

场景一:使用KMS托管的默认CMK加密

  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=100000 -o allow_other"
          akId: "<YourAccessKey ID>"           # 替换为 AccessKey ID
          akSecret: "<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. 查看已创建的加密存储卷。

    kubectl get pv

场景二:使用KMS托管的指定CMK ID加密

1. 配置KMS访问权限

使用KMS托管的指定CMK ID加密OSS Object,需要为PV使用的AccessKey对应的RAM用户或角色授予KMS的访问权限。详情请参见服务器端加密

操作前,请确保已创建RAM用户或已创建RAM角色
  1. 使用阿里云账号(主账号)或RAM管理员登录RAM控制台

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

  3. 在目标RAM用户操作列单击添加权限,或在目标RAM角色列表的操作列单击新增授权,按照页面提示完成权限的添加。可选系统策略AliyunKMSFullAccess或自定义权限AliyunOSSEncryptCustomizedPolicy

    AliyunKMSFullAccess权限较大,如需细粒度的权限控制,可创建自定义权限策略AliyunOSSEncryptCustomizedPolicy,内容如下。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "kms:List*",
            "kms:DescribeKey",
            "kms:GenerateDataKey",
            "kms:Decrypt"
          ],
          "Resource": [
            "acs:kms:*:141661496593****:*"  // 允许调用该阿里云账号ID下所有的KMS密钥。如果仅允许使用某个CMK,则输入对应的CMK ID
          ]
        }
      ]
    }

2. 创建加密存储卷

  1. 创建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=100000 -o allow_other"
          akId: "<YourAccessKey ID>"           # 替换为 AccessKey ID
          akSecret: "<YourAccessKey Secret>"   # 替换为 AccessKey Secret
          path: "/"
          encrypted: "kms"
          kmsKeyId: "<YourCMKID>"          # 替换为 CMK ID
  2. 创建加密的存储卷。

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

    kubectl get pv

场景三:使用OSS完全托管的密钥加密

  1. 创建sse-oss.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 max_stat_cache_size=0 -o allow_other-o umask=022 -o max_stat_cache_size=100000 -o allow_other"
          akId: "<YourAccessKey ID>"             # 替换为AccessKey ID
          akSecret: "<YourAccessKey Secret>"     # 替换为AccessKey Secret
          path: "/"
          encrypted: "aes256"
  2. 创建加密的存储卷。

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

    kubectl get pv