轮替根密钥

本文档介绍了如何轮替根密钥。如果您的根密钥遭到 入侵,或者您选择定期轮替根密钥以增强 安全性,则可以使用 RotationJob 资源将密钥轮替为新的根密钥。

轮替根密钥会创建一个新的根密钥,该密钥会成为主密钥并封装所有非根密钥。您无法删除根密钥;轮替是替换根密钥的唯一方法。如需详细了解根密钥,请参阅 根密钥类型

如需详细了解 KMS API 和 Key Management Service KRM API,请参阅 KMS API 概览,以查看完整的 API 定义。

准备工作

在轮替根密钥之前,您必须拥有必要的权限并准备好环境。

申请 IAM 角色

如需轮替密钥,请与组织 IAM 管理员联系,申请 KMS Rotation Job Admin (kms-rotationjob-admin) 角色。

准备环境

轮替根密钥

如需轮替根密钥,您首先需要确定正在使用的根密钥的资源名称。您可以通过检查项目中的任何 AEADKey 资源来找到此信息,因为所有这些密钥都受同一根密钥保护。

创建新的根密钥并轮替密钥:

  1. 列出项目中的 AEADKey 资源:

    kubectl get AEADKey -n PROJECT
    

    PROJECT 替换为您的项目命名空间的名称。

    在输出中,记下任何 AEADKey 的名称。

  2. 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
    
  3. 创建一个 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:您在上一步中获得的输出
  4. 将 YAML 文件的内容应用于 KMS:

    kubectl apply -f FILENAME.yaml
    

    FILENAME 替换为 YAML 文件的名称。

    运行该命令后,KMS 会创建一个新的根密钥,并使用新的根密钥轮替每个密钥。

  5. 如需验证根密钥轮替是否已完成,请运行以下命令:

    kubectl get rotationjobs ROTATION_NAME
    

    ROTATION_NAME 替换为轮替作业的名称。

    运行该命令后,如果轮替作业成功,您会看到轮替作业的状态为 Completed