将经典 Block Storage 从 HPCS 迁移到 Key Protect

将经典 Block Storage 卷的 Hyper Protect Crypto Services (HPCS) 加密迁移到使用 IBM Key Protect ( Key Protect ) 代替。

准备工作

在开始之前,请确认是否需要将经典 Block Storage 卷迁移到 Key Protect,而不是 HPCS。 您可以按照本节中的步骤手动完成此过程,也可以查看 迁移概述,了解使用自动检测脚本的详细信息。

请按照以下步骤手动确定是否需要迁移经典 Block Storage 卷。

  1. 验证群集上的块存储插件是否正在使用 HPCS 加密。

    1. 列出集群中所有 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>"
        ```
    
  2. 如果未找到 HPCS 加密的 PVC,则无需迁移。 如果找到 HPCS 加密的 PVC,则继续迁移步骤。

迁移的先决条件

在开始迁移之前,请完成这些步骤。

  1. 在开始迁移过程之前,备份所有群集资源。

    计划将资源备份保存几个星期,以防需要回滚。

    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
    
  2. 创建新的 或使用现有的 IBM Key Protect 实例。

  3. 在 Key Protect 实例中 创建一个根密钥。 注意根密钥 ID,以便在迁移步骤中使用。

  4. 确保拥有访问 HPCS 和 Key Protect 实例所需的 IAM 权限。

  5. 如果尚未安装,请安装 Key Protect CLI 插件。

    ibmcloud plugin install kp -r "IBM Cloud"
    

迁移步骤

请按照以下步骤将经典 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 配置秘密。

    oc delete secret <kms-config-name> -n <namespace>
    
  3. 创建新的 Key Protect 配置秘密。

    oc 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 封装 DEK (WDEK)。

    1. 为你的 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
        ```
    
  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 换成 Key Protect 包裹的 DEK,放入 PVC 暗袋中。

    1. 将新包装的 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>
        ```
    
  7. 可选:通过重启使用加密 PVC 的 pod 来验证卷。

    oc delete pod <pod-name> -n <namespace>
    
  8. 对所有需要从 HPCS 迁移到 Key Protect 的加密 PVC 重复上述步骤。

  9. 检查所有使用加密 PVC 的 pod 是否处于运行状态。

    oc get pods -A
    

后续步骤