将经典 Block Storage 从 HPCS 迁移到 Key Protect
将经典 Block Storage 卷的 Hyper Protect Crypto Services (HPCS) 加密迁移到使用 IBM Key Protect ( Key Protect ) 代替。
准备工作
在开始之前,请确认是否需要将经典 Block Storage 卷迁移到 Key Protect,而不是 HPCS。 您可以按照本节中的步骤手动完成此过程,也可以查看 迁移概述,了解使用自动检测脚本的详细信息。
请按照以下步骤手动确定是否需要迁移经典 Block Storage 卷。
-
验证群集上的块存储插件是否正在使用 HPCS 加密。
- 列出集群中所有
kms-config秘密。
oc get secrets -A --field-selector type=ibm.io/kms-config ``` 2. 对于找到的每个 `kms-config` 秘密,通过检查配置是否包含 `hs-crypto` 来验证它是否属于 `hpcs` 类型。 ```sh {: pre} oc get secret <kms-config-name> -n <namespace> -o json | jq '.data | map_values(@base64d)' | grep "hs-crypto" ``` 3. 对于找到的每个 HPCS 配置,确定使用它们的 PVC。 ```sh {: pre} oc get pvc -A -l "encryptionKeySecret=<kms-config-name>" ``` - 列出集群中所有
-
如果未找到 HPCS 加密的 PVC,则无需迁移。 如果找到 HPCS 加密的 PVC,则继续迁移步骤。
迁移的先决条件
在开始迁移之前,请完成这些步骤。
-
在开始迁移过程之前,备份所有群集资源。
计划将资源备份保存几个星期,以防需要回滚。
oc get pvc --all-namespaces -o yaml > all-pvcs.yaml oc get pv -o yaml > all-pv.yaml oc get storageclass -o yaml > all-storage-classes.yaml oc get secrets --field-selector type=ibm.io/kms-config --all-namespaces -o yaml > all-kms-config.yaml oc 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,以便在迁移步骤中使用。
-
确保拥有访问 HPCS 和 Key Protect 实例所需的 IAM 权限。
-
如果尚未安装,请安装 Key Protect CLI 插件。
ibmcloud plugin install kp -r "IBM Cloud"
迁移步骤
请按照以下步骤将经典 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 配置秘密。
oc delete secret <kms-config-name> -n <namespace> -
创建新的 Key Protect 配置秘密。
oc 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 封装 DEK (WDEK)。
- 为你的 PVC 寻找得可的秘密。
oc get secrets -n ibm-block-secrets --field-selector type=ibm.io/dek-secret | grep <pv-name> ``` 2. 从秘密中提取已封装的 DEK。 ```sh {: pre} oc 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 换成 Key Protect 包裹的 DEK,放入 PVC 暗袋中。
- 将新包装的 DEK 编码为 base64。
echo <kp-wrapped-dek> | base64 ``` 2. 编辑得可秘钥,并用新的 base64-encoded Key Protect 包装得可秘钥替换 `wrappedDEK` 值。 ```sh {: pre} oc edit secret -n ibm-block-secrets <pv-secret-name> ``` -
可选:通过重启使用加密 PVC 的 pod 来验证卷。
oc delete pod <pod-name> -n <namespace> -
对所有需要从 HPCS 迁移到 Key Protect 的加密 PVC 重复上述步骤。
-
检查所有使用加密 PVC 的 pod 是否处于运行状态。
oc get pods -A
后续步骤
- 更新文档和运行手册,以反映新的 Key Protect 配置。
- 考虑为 Key Protect 根密钥设置 密钥轮换策略。
- 如果在迁移过程中或迁移后遇到任何问题,请 打开 IBM Cloud 支持票据。