全部產品
Search
文件中心

Container Service for Kubernetes:加密ossfs 1.0儲存卷

更新時間:Nov 26, 2025

資料加密適用於高安全性或合規性要求的情境。通過KMS託管的CMK或OSS託管密鑰,您可以對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. 使用阿里雲帳號(主帳號)或Resource Access Management員登入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