本页面介绍了如何轮替您为 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 角色:
-
管理密钥或密钥版本:密钥项目的 Cloud KMS Admin (
roles/cloudkms.admin
) -
配置集群以使用新密钥:集群项目的 Kubernetes Engine Cluster Admin (
roles/container.clusterAdmin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
限制
您可以将集群更新为现有密钥的新版本,但无法将集群更新为使用全新的密钥进行这些加密操作。
向 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 和控制平面启动磁盘的密钥
为启动磁盘和 etcd 加密密钥创建新的主密钥版本:
gcloud kms keys versions create \ --key=KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --primary
更改最多可能需要 10 分钟才能在项目中生效。
查找集群控制平面的当前补丁版本:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format='value(currentMasterVersion)'
替换以下内容:
CLUSTER_NAME
:GKE 集群的名称。LOCATION
:GKE 集群控制平面的位置,例如us-central1
。
将集群控制平面升级到其已在使用的同一版本。
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。