將經典 Block Storage 從 HPCS 遷移到 Key Protect

將經典 Block Storage 磁碟區的 Hyper Protect Crypto Services (HPCS) 加密遷移至使用 IBM Key Protect ( Key Protect ) 取代。

開始之前

在開始之前,請確認您是否需要將經典 Block Storage 磁碟區遷移至使用 Key Protect,而非 HPCS。 您可以按照本節中的步驟手動完成此過程,也可以參閱 遷移概述,瞭解使用自動偵測腳本的詳細資訊。

按照以下步驟手動確定是否需要遷移 Classic Block Storage 磁碟區。

  1. 確認群集上的區塊儲存外掛程式正在使用 HPCS 加密。

    1. 列出群集中所有 kms-config 秘密。
        kubectl get secrets -A --field-selector type=ibm.io/kms-config
        ```
    2. 對於找到的每個 `kms-config` 秘 密,通過檢查配置是否包含 `hs-crypto` 來驗證它是否屬於 `hpcs` 類型。
    
    ```sh {: pre}
        kubectl get secret <kms-config-name> -n <namespace> -o json | jq '.data | map_values(@base64d)' | grep "hs-crypto"
        ```
    3. 針對找到的每個 HPCS 配置,找出使用它們的 PVC。
    
    ```sh {: pre}
        kubectl get pvc -A -l "encryptionKeySecret=<kms-config-name>"
        ```
    
  2. 如果沒有找到 HPCS 加密的 PVC,則不需要進行遷移。 如果找到 HPCS 加密的 PVC,請繼續進行遷移步驟。

遷移的先決條件

開始遷移之前,請完成這些步驟。

  1. 開始遷移程序前,先備份所有群集資源。

    計劃將資源備份保留數週,以防需要回溯。

    kubectl get pvc --all-namespaces -o yaml > all-pvcs.yaml
    kubectl get pv -o yaml > all-pv.yaml
    kubectl get storageclass -o yaml > all-storage-classes.yaml
    kubectl get secrets --field-selector type=ibm.io/kms-config --all-namespaces -o yaml > all-kms-config.yaml
    kubectl get secrets -n ibm-block-secrets --field-selector type=ibm.io/dek-secret -o yaml > all-dek-secrets.yaml
    
  2. 建立新的 或使用現有的 IBM Key Protect 範例。

  3. 在 Key Protect 範例中 建立一個根金鑰。 注意根密鑰 ID,以便在遷移步驟中使用。

  4. 確保您有必要的 IAM 權限來存取 HPCS 和 Key Protect 實體。

  5. 如果尚未安裝,請安裝 Key Protect CLI 外掛程式。

    ibmcloud plugin install kp -r "IBM Cloud"
    

移轉步驟

請遵循下列步驟,將您的 Classic Block Storage 磁碟區從 HPCS 遷移到 Key Protect。

步驟 1:以 Key Protect 組態取代 HPCS 秘密

  1. 為您的 Key Protect 範例建立新的 KMS 配置檔案。 將以下檔案儲存為 target-kp-config.yaml。 請務必使用您的 Key Protect 範例詳細資訊取代占位符值。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <kms-config-name>
      namespace: <namespace>
    stringData:
      config: |-
        {
          "api_key":"<your-api-key>",
          "iam_endpoint":"https://iam.cloud.ibm.com",
          "key_protect_endpoint":"https://<region>.api.<region>.kms.appdomain.cloud",
          "instance_id":"<kp-instance-id>",
          "root_key_id":"<kp-root-key-id>"
        }
    type: ibm.io/kms-config
    

    • <kms-config-name>:您現有 HPCS KMS 設定機密的名稱。
    • <namespace>:秘密所在的命名空間。
    • <your-api-key>:可存取您 Key Protect 範例的 API 金鑰。
    • <region>: Key Protect 範例所在的區域。
    • <kp-instance-id>: 您的 Key Protect 實例 ID。
    • <kp-root-key-id>:您在 Key Protect 中建立的根金鑰 ID。
  2. 刪除現有的 HPCS KMS 配置秘訣。

    kubectl delete secret <kms-config-name> -n <namespace>
    
  3. 建立新的 Key Protect 配置秘訣。

    kubectl create -f target-kp-config.yaml
    

步驟 2:更新 PVC 加密金鑰以使用 Key Protect

對於每個需要遷移的加密 PVC,請依照下列步驟從 HPCS 解開資料加密金鑰 (DEK) 並使用 Key Protect 重新包裝。

  1. 配置 Key Protect CLI 以指向您的 HPCS 實例。

    export KP_PRIVATE_ADDR=https://<hpcs-instance-id>.api.<region>.hs-crypto.appdomain.cloud
    export KP_INSTANCE_ID=<hpcs-instance-id>
    export ROOT_KEY_ID=<hpcs-root-key-id>
    
  2. 擷取已加密 PVC 的 HPCS wrapped DEK (WDEK)。

    1. 為您的 PVC 找到得可的秘密。
        kubectl get secrets -n ibm-block-secrets --field-selector type=ibm.io/dek-secret | grep <pv-name>
        ```
    2. 從秘密中抽取已包裝的 DEK。
    
    ```sh {: pre}
        kubectl get secrets -n ibm-block-secrets <pv-secret-name> -o yaml | grep wrappedDEK | awk '{print $2}' | base64 --decode
        ```
    
  3. 使用 HPCS 根金鑰解除包裝的 DEK。 儲存輸出中未包裝的 DEK。

    ibmcloud kp key unwrap $ROOT_KEY_ID <wrapped-dek>
    
  4. 設定 Key Protect CLI 以指向您的 Key Protect 範例。

    使用獨立的終端視窗,避免意外地在 HPCS 和 Key Protect 組態之間切換。

    export KP_PRIVATE_ADDR=https://<kp-instance-id>.api.<region>.kms.appdomain.cloud
    export KP_INSTANCE_ID=<kp-instance-id>
    export ROOT_KEY_ID=<kp-root-key-id>
    
  5. 使用 Key Protect 根密鑰重新包裝 DEK。 從輸出中儲存已包裝的 DEK。

    ibmcloud kp key wrap $ROOT_KEY_ID -p UNWRAPPED-DEK-BASE64
    
  6. 將包裹 HPCS 的 DEK 更換為 PVC secret 中包裹 Key Protect 的 DEK。

    1. 將新包裝的 DEK 編碼為 base64。
        echo <kp-wrapped-dek> | base64
        ```
    2. 編輯 DEK 秘訣,並以新的 base64-encoded Key Protect 包裝 DEK 取代 `wrappedDEK` 值。
    
    ```sh {: pre}
        kubectl edit secret -n ibm-block-secrets <pv-secret-name>
        ```
    
  7. 可選:透過重新啟動使用加密 PVC 的 pod 來驗證卷。

    kubectl delete pod <pod-name> -n <namespace>
    
  8. 對所有需要從 HPCS 遷移到 Key Protect 的加密 PVC 重複這些步驟。

  9. 檢查所有使用加密 PVC 的 pod 是否處於執行狀態。

    kubectl get pods -A
    

下一步

  • 更新您的文件和運行簿,以反映新的 Key Protect 配置。
  • 考慮為 Key Protect 根鑰匙設定鑰匙 輪換政策
  • 如果您在遷移過程中或遷移之後遇到任何問題,請 開啟 IBM Cloud 支援票單