HPCS에서 클래식 Block Storage 으로 마이그레이션 Key Protect

클래식 Block Storage 볼륨에 대한 Hyper Protect Crypto Services (HPCS) 암호화를 마이그레이션하여 IBM Key Protect ( Key Protect )을 대신 사용하세요.

시작하기 전에

시작하기 전에 HPCS 대신 Key Protect 을 사용하도록 클래식 Block Storage 볼륨을 마이그레이션해야 하는지 확인하세요. 이 섹션의 단계에 따라 이 프로세스를 수동으로 완료하거나 마이그레이션 개요에서 자동 감지 스크립트 사용에 대한 자세한 내용을 확인할 수 있습니다.

클래식 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"
    

마이그레이션 단계

클래식 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. 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에 대한 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. PVC 시크릿에서 HPCS 래핑된 DEK를 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
    

다음 단계