本文档介绍了如何导入和导出密钥管理系统 (KMS) 密钥。这些操作使用 kubectl 命令行界面 (CLI),并与以下 Kubernetes 资源进行交互:
如需详细了解这些资源,请参阅 KMS API 概览。
如需查看 KMS 支持的密钥的完整列表和详细信息,请参阅密钥 管理系统文档中的支持的密钥部分。
本文档适用于在 Google Distributed Cloud (GDC) 气隙环境中执行密钥管理操作的应用运维人员组内的受众。如需了解详情,请参阅 GDC 气隙环境文档的受众。
准备工作
在导入或导出密钥之前,您必须拥有必要的权限并准备好环境。
请求 IAM 角色
请与您的组织 IAM 管理员联系,以请求在您的项目中拥有以下角色:
- KMS 密钥导入管理员 (
kms-keyimport-admin):创建、更新和删除KeyImport资源。 - KMS 密钥导出管理员 (
kms-keyexport-admin):创建、更新和删除KeyExport资源。
准备环境
生成 kubeconfig 文件 以配置
kubectl访问权限。
导入导出的密钥
如需导入导出的密钥,请完成以下步骤:
创建一个 YAML 文件,并将
KeyImport资源作为kind对象的 `value` 添加到该文件中:apiVersion: "kms.gdc.goog/v1" kind: KeyImport metadata: name: KEY_IMPORT_NAME namespace: PROJECT spec: context: mechanism: MECHANISM执行以下变量替换操作:
- KEY_IMPORT_NAME:
KeyImport资源的名称,例如key-import-test。 - PROJECT:项目
命名空间的名称,例如
kms-test1。 - MECHANISM:密钥的钥匙共享机制, 例如 `EDCH_P521_AES256`。
- KEY_IMPORT_NAME:
将 YAML 文件的内容应用于 KMS 并创建
KeyImport资源:kubectl apply -f FILENAME.yaml将 FILENAME 替换为 YAML 文件的名称。
借助内部生成的密钥对的公钥,KMS 会将
KeyImport资源的状态更新为AwaitingKeyToImport。如需继续,您需要查看资源的状态并获取 KMS 生成的公钥。如需查看
KeyImport资源的状态并获取 KMS 生成的公钥,请运行以下命令:kubectl describe keyimport KEY_IMPORT_NAME --namespace PROJECT执行以下变量替换操作:
- KEY_IMPORT_NAME:
KeyImport资源名称,例如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资源。- KEY_IMPORT_NAME:
创建另一个 YAML 文件,将
KeyExport资源作为kind对象的 `value` 添加到该文件中,并添加以下内容: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_NAME:
KeyExport资源的名称,例如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。
- KEY_EXPORT_NAME:
将 YAML 文件的内容应用于 KMS 并创建
KeyExport资源:kubectl apply -f FILENAME.yaml将 FILENAME 替换为 YAML 文件的名称。
运行该命令后,KMS 会更新
KeyExport资源的状态并生成导出的密钥。如需获取导出的密钥,请查看资源的状态。如需查看资源的状态,请运行以下命令:
kubectl describe keyexport KEY_EXPORT_NAME --namespace PROJECT执行以下变量替换操作:
- KEY_EXPORT_NAME:
KeyExport资源的名称,例如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_KEYEXPORTED_KEY 表示导出的密钥的元数据。 复制 EXPORTED_KEY 中的内容,以继续执行 下一步。
- KEY_EXPORT_NAME:
修改包含
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修改 YAML 文件后,将内容应用于 KMS:
kubectl apply -f FILENAME.yaml运行该命令后,KMS 会导入您提供的导出的密钥。
如需查看导入的密钥的详细信息,请运行以下命令:
kubectl get keyimport KEY_IMPORT_NAME您将看到类似如下所示的输出:
NAMESPACE NAME AGE READY REASON KEY KIND kms-test1 KEY_IMPORT_NAME 60s True KeyImportCompleted KEY_PRIMITIVEKEY_PRIMITIVE 表示您导入的密钥的类型,介于 AEAD 密钥和签名密钥之间。