本页介绍了应用运营商 (AO) 如何执行从导出的密钥管理系统 (KMS) 密钥导入密钥的操作。AO 使用 kubectl 命令行界面 (CLI) 从以下资源执行导入和导出操作:
如需详细了解这些资源,请参阅 KMS API 概览。
如需查看 KMS 支持的密钥的完整列表和详细信息,请参阅密钥管理系统 (KMS) 页面中的支持的密钥部分。
准备工作
在执行 KMS 操作之前,请配置 kubectl 以访问 Management API 服务器并获取必要的权限。
配置 Management API 服务器访问权限
配置 kubectl 以访问 Management API 服务器:
- 如果您尚未执行此操作,请使用 gdcloud 命令行界面 (CLI) 为 Management API 服务器获取 kubeconfig 文件。
设置
MANAGEMENT_API_SERVER环境变量:export MANAGEMENT_API_SERVER=PATH_TO_KUBECONFIG将
PATH_TO_KUBECONFIG替换为生成的 kubeconfig 文件的路径。
所需权限
如需获得所需权限,请让您的组织 IAM 管理员为您授予 KMS Key Import Admin (kms-keyimport-admin) 和 KMS Key Export Admin (kms-keyexport-admin) 角色。
导入导出的密钥
如需导入导出的密钥,请完成以下步骤:
创建一个 YAML 文件,并将
KeyImport资源添加为kind对象的值: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对象的值,并添加以下内容: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 密钥和签名密钥之间。