轮替 etcd 和控制平面启动磁盘加密密钥


本页面介绍了如何轮替您为 GKE 控制平面授权配置的 etcd 和控制平面启动盘加密密钥。本页面适用于集群管理员和安全工程师。

在阅读本页内容之前,请先熟悉以下 GKE 控制平面授权概念:

规划密钥轮替

本页面介绍了如何轮换控制平面中的以下凭据组件:

  • etcd 和控制平面启动磁盘的加密密钥。
  • etcd 内部备份的加密密钥, Google Cloud 用于 灾难恢复。

您还可以轮换使用 GKE 控制平面权限配置的客户管理的证书授权机构 (CA) 和服务账号签名密钥。如需了解详情,请参阅轮替客户管理的控制平面 CA 和签名密钥

Cloud Key Management Service (Cloud KMS) 中的密钥不会过期。如果您的组织有密钥轮替方面的安全要求,请手动轮替密钥。为尽量减少对正在运行的工作负载的干扰,请勿为这些密钥配置自动密钥轮替。

当您轮替控制平面启动磁盘和 etcd 的加密密钥时,GKE 会创建一个使用新密钥加密的新磁盘。对于区域级集群,由于控制平面已复制,因此此操作不会造成停机。对于可用区级集群,控制平面会变得不可用,直到新磁盘可用为止。

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。
  • 拥有使用控制平面启动磁盘和 etcd 加密的现有集群

  • 确定以下 Google Cloud 项目的项目 ID:

    • 密钥项目:包含 Cloud KMS 资源的项目。
    • 集群项目:包含 GKE 集群的项目。
  • 如需执行本页中的验证任务,请验证是否已为 Cloud Key Management Service (KMS) API 启用 DATA_READ 数据访问审核日志。如需了解详情,请参阅启用数据访问审核日志

所需的角色和权限

如需获得轮换客户管理的 CA 和密钥所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

限制

您可以将集群更新为现有密钥的新版本,但无法将集群更新为使用全新的密钥进行这些加密操作。

向 GKE 服务代理授予 IAM 角色

如需轮替启动磁盘和 etcd 的加密密钥,请为集群项目中的 GKE 服务代理授予密钥项目中的加密密钥的 Kubernetes Engine KMS Crypto Key User (roles/container.cloudKmsKeyUser) 角色:

gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
    --keyring=KEYRING_NAME \
    --location=LOCATION \
    --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role=roles/container.cloudKmsKeyUser \
    --project=KEY_PROJECT_ID

替换以下内容:

  • KCP_DISK_KEY_NAME:控制平面启动磁盘和 etcd 磁盘的加密密钥的名称。
  • KEYRING_NAME:包含密钥的密钥环的名称。
  • LOCATION:钥匙环的 Google Cloud 位置。此位置必须与您的集群位置相同。如需查看区域列表,请在 Cloud KMS 位置表中针对“区域”进行过滤。
  • CLUSTER_PROJECT_NUMBER:集群项目的数字项目编号。
  • KEY_PROJECT_ID:您的密钥项目的项目 ID

轮替 etcd 和控制平面启动磁盘的密钥

  1. 为启动磁盘和 etcd 加密密钥创建新的主密钥版本:

    gcloud kms keys versions create \
        --key=KCP_DISK_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --primary
    

    更改最多可能需要 10 分钟才能在项目中生效。

  2. 查找集群控制平面的当前补丁版本:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format='value(currentMasterVersion)'
    

    替换以下内容:

    • CLUSTER_NAME:GKE 集群的名称。
    • LOCATION:GKE 集群控制平面的位置,例如 us-central1
  3. 将集群控制平面升级到其已在使用的同一版本。

    gcloud container clusters upgrade CLUSTER_NAME \
        --master \
        --location=LOCATION \
        --cluster-version=CONTROL_PLANE_VERSION \
        --project=CLUSTER_PROJECT_ID
    

    替换以下内容:

    • CONTROL_PLANE_VERSION:上一步输出中显示的集群控制平面版本。
    • CLUSTER_PROJECT_ID:您的集群项目的项目 ID。

控制平面升级操作完成后,集群会使用新的密钥版本来加密控制平面启动磁盘和所有 etcd 磁盘。

轮替 etcd 内部备份加密密钥

本部分介绍如何轮替 etcd 内部备份的加密密钥,该密钥 Google Cloud 用于灾难恢复。您可以为此密钥配置自动轮替,但我们建议您改为执行手动轮替。轮替密钥后,集群会使用新的密钥版本来加密新的 etcd 内部备份。

etcd 内部备份使用主密钥版本,并按以下时间间隔进行:

  • 对于可用区级集群,每 30 分钟一次。
  • 对于 Autopilot 集群和区域级 Standard 集群,每 10 分钟一次。

轮替密钥后,请勿立即停用或销毁先前的密钥版本。等待足够长的时间,以便 GKE 创建使用新密钥版本的新 etcd 内部备份。

  • 为 etcd 内部备份加密密钥创建新的主密钥版本:

    gcloud kms keys versions create \
        --key=ETCD_BACKUP_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --primary
    

    替换以下内容:

    • ETCD_BACKUP_KEY_NAME:etcd 内部备份加密密钥的名称。
    • KEYRING_NAME:包含密钥的密钥环的名称。
    • LOCATION:钥匙环的 Google Cloud 位置。此位置必须与您的集群位置相同。如需查看区域列表,请在 Cloud KMS 位置表中针对“区域”进行过滤。
    • KEY_PROJECT_ID:您的密钥项目的项目 ID

后续步骤