HPCSからClassic Block Storage への移行 Key Protect

Classic Block Storage ボリュームの Hyper Protect Crypto Services (HPCS) 暗号化を移行し、代わりに IBM Key Protect ( Key Protect ) を使用します。

開始前に

開始する前に、Classic Block Storage ボリュームを HPCS の代わりに Key Protect を使用するように移行する必要があることを確認してください。 このセクションの手順に従って手動でこのプロセスを完了することもできますが、自動検出スクリプトを使用する場合の詳細については、 移行の概要を 参照してください。

以下の手順に従って、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. HPCSと Key Protect インスタンスの両方にアクセスするために必要なIAM権限を持っていることを確認します。

  5. まだインストールされていない場合は、 Key Protect CLI プラグインをインストールします。

    ibmcloud plugin install kp -r "IBM Cloud"
    

マイグレーション手順

以下の手順に従って、Classic Block Storage ボリュームを HPCS から Key Protect に移行してください。

ステップ1:HPCSシークレットを Key Protect コンフィギュレーションに置き換える

  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. HPCS インスタンスを指すように Key Protect CLI を設定します。

    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に合ったDEKの秘密を見つけてください。
        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 インスタンスを指すように Key Protect CLI を設定する。

    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シークレットの Key Protect に包まれたDEKと交換する。

    1. 新しいラップされたDEKを base64 にエンコードする。
        echo <kp-wrapped-dek> | base64
        ```
    2. DEKシークレットを編集し、 `wrappedDEK` の値を新しい base64-encoded Key Protect ラッピングされたDEKに置き換える。
    
    ```sh {: pre}
        kubectl edit secret -n ibm-block-secrets <pv-secret-name>
        ```
    
  7. オプション:暗号化されたPVCを使用するポッドを再起動してボリュームを検証する。

    kubectl delete pod <pod-name> -n <namespace>
    
  8. HPCS から Key Protect に移行する必要があるすべての暗号化された PVC について、この手順を繰り返します。

  9. 暗号化されたPVCを使用しているすべてのポッドが実行状態にあることを確認する。

    kubectl get pods -A
    

次のステップ