本文档介绍了如何轮替根密钥。如果您的根密钥遭到
入侵,或者您选择定期轮替根密钥以增强
安全性,则可以使用
RotationJob
资源将密钥轮替为新的根密钥。
轮替根密钥会创建一个新的根密钥,该密钥会成为主密钥并封装所有非根密钥。您无法删除根密钥;轮替是替换根密钥的唯一方法。如需详细了解根密钥,请参阅 根密钥类型。
如需详细了解 KMS API 和 Key Management Service KRM API,请参阅 KMS API 概览,以查看完整的 API 定义。
准备工作
在轮替根密钥之前,您必须拥有必要的权限并准备好环境。
申请 IAM 角色
如需轮替密钥,请与组织 IAM 管理员联系,申请 KMS Rotation Job Admin (kms-rotationjob-admin) 角色。
准备环境
生成 kubeconfig 文件 以配置
kubectl访问权限。
轮替根密钥
如需轮替根密钥,您首先需要确定正在使用的根密钥的资源名称。您可以通过检查项目中的任何 AEADKey 资源来找到此信息,因为所有这些密钥都受同一根密钥保护。
创建新的根密钥并轮替密钥:
列出项目中的
AEADKey资源:kubectl get AEADKey -n PROJECT将
PROJECT替换为您的项目命名空间的名称。在输出中,记下任何
AEADKey的名称。从
AEADKey中获取ROOT_KEY_RESOURCE_NAME。以下命令会提取并重新格式化RotationJob资源所需的根密钥标识符:kubectl describe aeadkey KEY_NAME -n PROJECT | grep "Root Key ID:" | awk '{print $4}' | awk -F/ '{print "namespaces/" $1 "/secrets/" $2}'替换以下内容:
KEY_NAME:项目中任何AEADKey的名称PROJECT:您的项目命名空间的名称
输出可能如下所示:
namespaces/kms-system/secrets/kms-key-local-root创建一个 YAML 文件,并添加
RotationJob资源和以下内容:apiVersion: "kms.gdc.goog/v1" kind: RotationJob metadata: name: ROTATION_NAME spec: rootKeyResourceName: ROOT_KEY_RESOURCE_NAME替换以下内容:
ROTATION_NAME:轮替作业的名称,例如:rotate-job1。ROOT_KEY_RESOURCE_NAME:您在上一步中获得的输出
将 YAML 文件的内容应用于 KMS:
kubectl apply -f FILENAME.yaml将 FILENAME 替换为 YAML 文件的名称。
运行该命令后,KMS 会创建一个新的根密钥,并使用新的根密钥轮替每个密钥。
如需验证根密钥轮替是否已完成,请运行以下命令:
kubectl get rotationjobs ROTATION_NAME将 ROTATION_NAME 替换为轮替作业的名称。
运行该命令后,如果轮替作业成功,您会看到轮替作业的状态为
Completed。