导入和导出密钥

本页介绍了应用运营商 (AO) 如何执行从导出的密钥管理系统 (KMS) 密钥导入密钥的操作。AO 使用 kubectl 命令行界面 (CLI) 从以下资源执行导入和导出操作:

如需详细了解这些资源,请参阅 KMS API 概览

如需查看 KMS 支持的密钥的完整列表和详细信息,请参阅密钥管理系统 (KMS) 页面中的支持的密钥部分。

准备工作

在继续之前,请确保您已准备好以下内容:

  • 配置为访问 Management API 服务器的 kubectl 命令。为此,请按照获取 kubeconfig 文件gdcloud 命令行界面 (CLI) 部分中的说明操作。

  • KMS Key Import Admin 和 KMS Key Export Admin 角色。如需获得导入导出密钥所需的权限,请让您的平台管理员 (PA) 为您授予 KMS Key Import Admin (kms-keyimport-admin) 和 KMS Key Export Admin (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 文件,将 KeyExport 资源添加为 kind 对象的值,并添加以下内容:

    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_KEY:来自 keyImport.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 密钥和签名密钥之间。