將經典 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 磁碟區。
-
確認群集上的區塊儲存外掛程式正在使用 HPCS 加密。
- 列出群集中所有
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>" ``` - 列出群集中所有
-
如果沒有找到 HPCS 加密的 PVC,則不需要進行遷移。 如果找到 HPCS 加密的 PVC,請繼續進行遷移步驟。
遷移的先決條件
開始遷移之前,請完成這些步驟。
-
開始遷移程序前,先備份所有群集資源。
計劃將資源備份保留數週,以防需要回溯。
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 -
建立新的 或使用現有的 IBM Key Protect 範例。
-
在 Key Protect 範例中 建立一個根金鑰。 注意根密鑰 ID,以便在遷移步驟中使用。
-
確保您有必要的 IAM 權限來存取 HPCS 和 Key Protect 實體。
-
如果尚未安裝,請安裝 Key Protect CLI 外掛程式。
ibmcloud plugin install kp -r "IBM Cloud"
移轉步驟
請遵循下列步驟,將您的 Classic Block Storage 磁碟區從 HPCS 遷移到 Key Protect。
步驟 1:以 Key Protect 組態取代 HPCS 秘密
-
為您的 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。
-
刪除現有的 HPCS KMS 配置秘訣。
kubectl delete secret <kms-config-name> -n <namespace> -
建立新的 Key Protect 配置秘訣。
kubectl create -f target-kp-config.yaml
步驟 2:更新 PVC 加密金鑰以使用 Key Protect
對於每個需要遷移的加密 PVC,請依照下列步驟從 HPCS 解開資料加密金鑰 (DEK) 並使用 Key Protect 重新包裝。
-
配置 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> -
擷取已加密 PVC 的 HPCS wrapped DEK (WDEK)。
- 為您的 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 ``` -
使用 HPCS 根金鑰解除包裝的 DEK。 儲存輸出中未包裝的 DEK。
ibmcloud kp key unwrap $ROOT_KEY_ID <wrapped-dek> -
設定 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> -
使用 Key Protect 根密鑰重新包裝 DEK。 從輸出中儲存已包裝的 DEK。
ibmcloud kp key wrap $ROOT_KEY_ID -p UNWRAPPED-DEK-BASE64 -
將包裹 HPCS 的 DEK 更換為 PVC secret 中包裹 Key Protect 的 DEK。
- 將新包裝的 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> ``` -
可選:透過重新啟動使用加密 PVC 的 pod 來驗證卷。
kubectl delete pod <pod-name> -n <namespace> -
對所有需要從 HPCS 遷移到 Key Protect 的加密 PVC 重複這些步驟。
-
檢查所有使用加密 PVC 的 pod 是否處於執行狀態。
kubectl get pods -A
下一步
- 更新您的文件和運行簿,以反映新的 Key Protect 配置。
- 考慮為 Key Protect 根鑰匙設定鑰匙 輪換政策。
- 如果您在遷移過程中或遷移之後遇到任何問題,請 開啟 IBM Cloud 支援票單。