為 COS 從 Hyper Protect Crypto Services 遷移到 Key Protect

將 Hyper Protect Crypto Services (HPCS) 加密的 IBM Cloud Object Storage s3fs 外掛程式轉換為使用 Key Protect (KP)。

開始之前

在您開始之前,請依照下列步驟來判斷您是否需要遷移 COS 外掛程式,以使用 Key Protect 來取代 HPCS。

  1. 取得 HPCS 和 KP 實體的 CRN。 為每個實例執行下列指令。

    ibmcloud resource service-instance <instance-name>
    

    輸出範例。

    Name:  my-hpcs-instance
    ID:    crn:v1:bluemix:public:kms:us-south:a/1ab234cd5e678fgh9a0123bc4de567:f89gh01a-bcd2-3456-e789-f0g1234h5ab6::
    
  2. 列出群集中所有屬於 ibm/ibmc-s3fs 類型的機密。

    kubectl get secrets --field-selector type=ibm/ibmc-s3fs
    
  3. 針對每個 ibm/ibmc-s3fs 秘 密,檢視秘密內容,並在 data 中找到 kp-root-key-crn 根密鑰。 請注意任何 kp-root-key-crn 值包含字串 hs-crypto 的秘訣,這表示它是 HPCS 根金鑰,必須移轉。 儲存此清單的秘密,以便進行移轉。 如果 kp-root-key-crn 沒有包含 hs-crypto 的值,則不需要遵循遷移步驟。

遷移的先決條件

開始之前,請完成這些步驟。

  1. 如果您的群集上安裝了 COS helm chart,請確保其 執行最新版本
  2. 如果還沒有,請建立一個新的 Key Protect 範例和一組新的 Key Protect 金鑰來進行加密。 確保您的 Key Protect 範例與群集建立在同一區域。 這是 Key Protect 實例存取您的 COS 資源所必需的。
  3. 為 Key Protect 建立服務對服務授權,以存取您的 COS 資源。 將來源服務設定為 Key Protect,目標服務設定為 COS,並將存取層級至少設定為讀取

移轉步驟

請按照以下步驟將您的 COS 外掛程式移植到 Key Protect。

如果您的所有 COS 秘密和 PVC 都在特定命名空間中,您可以將下列步驟的範圍擴大到該命名空間。 否則,請搜尋叢集上的所有 namesapces。

步驟 1. 列出要遷移的 PVC

確定哪些 PVC 必須遷移。

  1. 列出群集中或相關命名空間中的所有 PVC。
    oc get pvc [-n <namespace>]
    
  2. 描述每種 PVC。
    oc describe pvc <pvc-name>
    
  3. 在 PVC 輸出中,找到 Annotations 區段,檢查是否列出 volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs
  4. 如果已列出註釋,請尋找 ibm.io/secret-name 註釋。
  5. 如果列出 volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs 註解 ,且 ibm.io/secret-name 值與您發現的任何具有 HPCS 根金鑰的機密相符,則必須遷移 PVC。 請注意 PVC 的名稱。
  6. 對每個 PVC 重複這些步驟。 儲存要遷移的 PVC 清單。

步驟 2. 列出要移轉的 Pod

確定哪些 Pod 必須移轉。

  1. 列出群集中或相關命名空間中的所有 Pod。
    oc get pods [-n <namespace>]
    
  2. 描述每個 pod。
    oc describe pod <pod-name>
    
  3. 在輸出中,找到「磁碟區」部分,並檢查每個磁碟區的名稱 PersistentVolumeClaim. 如果輸出中的任何 PVC 也包含在要遷移的 PVC 清單中,則必須遷移該 pod。 請注意 pod 的名稱。
  4. 對每個豆莢重複這些步驟。 儲存要移轉的 Pod 清單。

步驟 3. 建立新秘密

建立使用 Key Protect 根金鑰而非 HPCS 根金鑰的新秘密。

  1. 取得 Key Protect 範例的 CRN 並將其編碼為 base64。

    ibmcloud resource service-instance <kp-instance-name>
    
    echo  -n "<root_key_CRN>" | base64
    
  2. 對於您必須移轉的每個機密,請取得機密 yaml。

    oc get secret <secret-name> -o yaml
    
  3. 將 yaml 複製到檔案中,以建立新的秘密。 變更 kp-root-key-crn,改為指向 Key Protect 實例的 base64 編碼 CRN。 在密碼名稱後面附加一個字串,以協助區分新密碼和舊密碼。

    重新建立 PVC 時,您必須指定 PVC 使用的新密碼副本。 確保新秘密的名稱與舊秘密相符,但仍可讓您區分兩者。

  4. 應用秘訣。

    kubectl apply -f <secret-file-name>
    
  5. 對每個需要遷移的秘密重複這些步驟。

步驟 4. 重製 PVC

重新建立您的 PVC,使它們指向新的秘密。

  1. 針對每個必須遷移的 PVC,取得 PVC yaml。

    oc get PVC <pvc-name> -o yaml
    
  2. 將 yaml 複製到檔案中,以建立新的 PVC。 變更 ibm.io/secret-nameibm.io/secret-namespace 註解,指向與之前列出的秘密相對應的新秘密。 在 PVC 名稱的末端附加字串,以協助與舊 PVC 區分。

  3. 套用新的 PVC。

    oc apply -f <pvc-file-name>
    
  4. 取得 PVC 的詳細資訊,並驗證其是否處於 Bound 狀態。

    oc get PVC <pvc>
    
  5. 對每個需要遷移的 PVC 重複這些步驟。

步驟 5. 更新吊艙

更新 pod,使其指向新的 PVC。

  1. 確定使用的資源類型。 在輸出中,找到 ownerReferences 部分,並記下資源種類和列出的資源名稱
    oc describe pod <pod-name>
    
  2. 遵循基於本節所列資源的更新策略。ownerReferences 節中所列資源的更新策略。

手動重新建立 pod

  1. 取得 pod yaml。

    oc describe <resource-type> <resource-name> -o yaml
    
  2. 將 yaml 複製到檔案中,以建立新的 pod。 在 yaml 的 volumes 部分,將 PersistentVolumeClaim 以指向與之前列出的 PVC 相對應的新 PVC。 在新資源名稱的末尾附加一個字串,以協助與舊資源區分。

  3. 套用新的 yaml 檔案。

    oc apply -f <pod-yaml-file>
    
  4. 驗證 Pod 在執行中。

    oc get pods
    
  5. 對每個需要手動移轉的 pod 重複這些步驟。