匯入及匯出金鑰

本頁面提供應用程式運算子 (AO) 的操作說明,瞭解如何從匯出的金鑰管理系統 (KMS) 金鑰執行金鑰匯入作業。AO 會使用下列資源的 kubectl 指令列介面 (CLI) 執行匯入和匯出作業:

如要進一步瞭解這些資源,請參閱 KMS API 總覽

如要查看 KMS 支援的金鑰完整清單和詳細資料,請參閱「金鑰管理系統 (KMS)」頁面的「支援的金鑰」一節。

事前準備

執行 KMS 作業前,請先設定 kubectl,以便存取 Management API 伺服器並取得必要權限。

設定 Management API 伺服器存取權

設定 kubectl 以存取 Management API 伺服器:

  1. 如果還沒這麼做,請使用 gdcloud CLI 介面,為 Management API 伺服器取得 kubeconfig 檔案
  2. 設定 MANAGEMENT_API_SERVER 環境變數:

    export MANAGEMENT_API_SERVER=PATH_TO_KUBECONFIG
    

    PATH_TO_KUBECONFIG 替換為產生的 kubeconfig 檔案路徑。

所需權限

如要取得所需權限,請要求組織 IAM 管理員授予您 KMS 金鑰匯入管理員 (kms-keyimport-admin) 和 KMS 金鑰匯出管理員 (kms-keyexport-admin) 角色。

匯入匯出的金鑰

如要匯入匯出的金鑰,請完成下列步驟:

  1. 建立 YAML 檔案,並將 KeyImport 資源新增為 kind 物件的值:

    apiVersion: "kms.gdc.goog/v1"
    kind: KeyImport
    metadata:
      name: KEY_IMPORT_NAME
      namespace: PROJECT
    spec:
      context:
        mechanism: MECHANISM
    

    請替換下列變數:

    • KEY_IMPORT_NAMEKeyImport 資源的名稱,例如:key-import-test
    • PROJECT:專案命名空間的名稱,例如:kms-test1
    • MECHANISM:金鑰的分享機制,例如:`EDCH_P521_AES256`。
  2. 將 YAML 檔案的內容套用至 KMS,並建立 KeyImport 資源:

    kubectl apply -f FILENAME.yaml
    

    FILENAME 替換成 YAML 檔案的名稱。

    KMS 會使用內部產生的金鑰組公開金鑰,將 KeyImport 資源的狀態更新為 AwaitingKeyToImport。如要繼續,您必須查看資源狀態,並取得 KMS 產生的公開金鑰。

  3. 如要查看 KeyImport 資源的狀態,並取得 KMS 產生的公開金鑰,請執行下列指令:

    kubectl describe keyimport KEY_IMPORT_NAME --namespace PROJECT
    

    請替換下列變數:

    • KEY_IMPORT_NAMEKeyImport 資源名稱,例如 key-import-test
    • PROJECT:專案命名空間的名稱,例如:kms-test1

    執行指令後,您會看到類似下方的輸出內容:

    ...
    Status:
      Conditions:
        Last Transition Time:  2022-12-14T20:43:50Z
        Message:               waiting for user to provide KeyToImport
        Observed Generation:   1
        Reason:                AwaitingKeyToImport
        Status:                False
        Type:                  Ready
      Imported Key Ref:
        Kind: KeyImport
        Name: key-import-test
      Peer Context:
        Private Key:
        Public Key: PUBLIC_KEY
    Events:           <none>
    

    PUBLIC_KEY 代表 KMS 產生的公開金鑰。複製公開金鑰,並在下一個步驟中新增至 KeyExport 資源。

  4. 建立另一個 YAML 檔案,在 kind 物件的值中加入 KeyExport 資源,以及下列內容:

    apiVersion: "kms.gdc.goog/v1"
    kind: KeyExport
    metadata:
      name: KEY_EXPORT_NAME
      namespace: PROJECT
    spec:
      context:
        mechanism: MECHANISM
        publicKey: PUBLIC_KEY
      keyToExport:
        kind: KEY_PRIMITIVE
        name: KEY_NAME
    

    請替換下列變數:

    • KEY_EXPORT_NAMEKeyExport 資源的名稱,例如:key-export-test
    • PROJECT:專案命名空間的名稱,例如:kms-test1

    • MECHANISM:金鑰的分享機制,例如:`EDCH_P521_AES256`。

    • PUBLIC_KEYkeyImport.Status.PeerContext.PublicKey 中的公開金鑰。

    • KEY_PRIMITIVE:金鑰的 CRD,例如 aeadkey 和 signingkey。

    • KEY_NAME:金鑰名稱,例如 key-1

  5. 將 YAML 檔案的內容套用至 KMS,並建立 KeyExport 資源:

    kubectl apply -f FILENAME.yaml
    

    FILENAME 替換成 YAML 檔案的名稱。

    執行指令後,KMS 會更新 KeyExport 資源的狀態,並產生匯出的金鑰。如要取得匯出的金鑰,請查看資源的狀態。

  6. 如要查看資源狀態,請執行下列指令:

    kubectl describe keyexport KEY_EXPORT_NAME --namespace PROJECT
    

    請替換下列變數:

    • KEY_EXPORT_NAMEKeyExport 資源的名稱,例如 key-export-test
    • PROJECT:專案命名空間的名稱,例如:kms-test1

    執行指令後,您會看到類似以下的輸出內容:

    ...
    Status:
    Conditions:
    Last Transition Time:  2022-12-14T20:45:57Z
    Message:               key successfully exported
    Observed Generation:   1
    Reason:                KeyExportCompleted
    Status:                True
    Type:                  Ready
    Exported Key: EXPORTED_KEY
    

    EXPORTED_KEY 代表匯出金鑰的中繼資料。複製 EXPORTED_KEY 中的內容,繼續執行下一個步驟。

  7. 編輯包含 KeyImport 資源的 YAML 檔案,並加入從 keyexport.status.exportedkey 輸出內容複製的內容。

    apiVersion: "kms.gdc.goog/v1"
    kind: KeyImport
    metadata:
      name: key-import-test
      namespace: kms-test1
    spec:
      context:
        mechanism: EDCH_P521_AES256
      keyToImport: EXPORTED_KEY
    
  8. 編輯 YAML 檔案後,請將內容套用至 KMS:

    kubectl apply -f FILENAME.yaml
    

    執行指令後,KMS 會匯入您提供的匯出金鑰。

  9. 如要查看匯入金鑰的詳細資料,請執行下列指令:

    kubectl get keyimport KEY_IMPORT_NAME
    

    畫面會顯示類似以下內容的輸出:

    NAMESPACE   NAME             AGE    READY   REASON              KEY KIND
    kms-test1  KEY_IMPORT_NAME   60s    True    KeyImportCompleted  KEY_PRIMITIVE
    

    KEY_PRIMITIVE 代表您匯入的金鑰類型,介於 AEAD 和簽署金鑰之間。