全部產品
Search
文件中心

Container Service for Kubernetes:加密OSS儲存卷

更新時間:Jun 19, 2024

資料加密適用於對高安全性或合規性具有較高要求的應用情境,您無需自建和維護密鑰管理基礎設施,通過加密保護儲存在阿里雲ECS上的資料就能保障資料的隱私性和自主性。本文介紹如何使用KMS(Key Management Service)託管的CMK(Customer Master Key)或OSS完全託管密鑰功能對阿里雲Container ServiceACK叢集的OSS儲存卷資料加密。

前提條件

加密方式

OSS儲存卷加密分為服務端加密SSE(Server-Side Encryption)、用戶端加密,阿里雲Container Service只支援服務端加密:

  • 服務端加密: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. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列選擇儲存 > 儲存卷。可以在儲存卷頁面查看到建立的加密儲存卷。

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

  1. 配置KMS存取權限。

    使用KMS託管的指定CMK ID加密OSS Object,需要為PV使用的AccessKey對應的RAM使用者授予KMS的存取權限,操作步驟如下。更多資訊,請參見伺服器端加密

    1. 使用阿里雲帳號(主帳號)或Resource Access Management員登入RAM控制台

    2. 使用者頁面,單擊PV使用的AccessKey對應RAM使用者操作列的添加許可權

    3. 根據需要選擇許可權是系統策略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。
            ]
          }
        ]
      }
    4. 單擊確定,然後單擊完成

  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. 登入Container Service管理主控台

    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. 登入Container Service管理主控台

    2. 在控制台左側導覽列,單擊叢集

    3. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    4. 在叢集管理頁左側導覽列選擇儲存 > 儲存卷。可以在儲存卷頁面查看到建立的加密儲存卷。