密钥轮替
密钥轮替是指更改密钥加密密钥 (KEK) 中包含的底层加密材料的行为。它可作为计划轮替的一部分自动触发,也可手动触发。通常是在出现安全突发事件导致密钥可能被破解后进行手动触发。密钥轮替仅替换包含原始加密/解密密钥数据的密钥中的单个字段。
自动轮替密钥
AWS Key Management Service (KMS) 支持自动轮替 KMS 密钥。启用后,AWS 每年自动为密钥生成一次新的加密密钥材料。您无需采取任何手动操作。
密钥轮替后,GKE on AWS 会使用新密钥加密每个新 Secret。之前创建的所有 Secret 仍使用其原始密钥进行解密。因此,AWS 会永久保留 CMK 的旧密钥材料,以便在读取旧 Secret 时解密旧 DEK。
您可以使用以下命令查看 KMS 密钥是否启用了自动轮替:
aws kms get-key-rotation --key-id KMS_KEY_ID
将 KMS_KEY_ID 替换为您的 AWS KMS 密钥 ID。
您可以通过运行以下命令来启用自动密钥轮替:
aws kms enable-key-rotation --key-id KMS_KEY_ID
手动轮替密钥
本部分介绍如何手动轮替控制平面或节点池配置密钥。
控制层面配置密钥
如需手动轮替控制层面配置密钥,请执行以下步骤:
- 创建一个新 Cloud Key Management Service 密钥。 保存 KMS 密钥 ARN 的值。您稍后会用到该值。 
- 确保与集群关联的 IAM 角色有权使用新密钥进行加密和解密。 
- 使用 - gcloud container aws clusters update命令更新加密密钥。- gcloud container aws clusters update CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --config-encryption-kms-key-arn=CONFIG_ENCRYPTION_KMS_KEY_ARN- 替换以下内容: - CLUSTER_NAME:您的集群的名称
- GOOGLE_CLOUD_LOCATION:管理集群的受支持 Google Cloud 区域,例如- us-west1
- CONFIG_ENCRYPTION_KMS_KEY_ARN:您的新 KMS 密钥 ARN
 
控制层面根卷
如需手动轮替控制平面根卷密钥,请执行以下步骤:
- 创建一个新 Cloud Key Management Service 密钥。 保存 KMS 密钥 ARN 的值。您稍后会用到该值。 
- 确保与集群关联的 IAM 角色有权使用新密钥进行加密和解密。 
- 使用 - gcloud container aws clusters update命令更新加密密钥。- gcloud container aws clusters update CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --root-volume-kms-key-arn=ROOT_VOLUME_KMS_KEY_ARN- 替换以下内容: - CLUSTER_NAME:您的集群的名称
- GOOGLE_CLOUD_LOCATION:管理集群的受支持 Google Cloud 区域,例如- us-west1
- ROOT_VOLUME_KMS_KEY_ARN:用于加密根卷的 AWS KMS 密钥的 Amazon 资源名称 (ARN)
 
节点池配置密钥
如需手动轮替节点池配置密钥,请执行以下步骤:
- 确保与集群关联的 IAM 角色有权使用新密钥进行加密和解密。 
- 更新正在使用的 KMS 别名: - aws kms update-alias --alias-name KEY_ALIAS \ --target-key-id CONFIG_ENCRYPTION_KMS_KEY_ARN- 替换以下内容: - KEY_ALIAS:现有密钥的别名
- CONFIG_ENCRYPTION_KMS_KEY_ARN:您的新 KMS 密钥 ARN
 
- 强制集群使用新的加密密钥重新加密所有集群 Secret: - kubectl get secrets --all-namespaces -o json | \ kubectl annotate --overwrite -f - encryption-key-rotation-time=`date +"%Y%m%d-%H%M%S"`
- 停用旧的 AWS KMS 密钥。 如需了解详情,请参阅启用和停用密钥。 
节点池根卷
如需手动轮替节点池根卷密钥,请执行以下步骤:
- 确保与集群关联的 IAM 角色有权使用新密钥进行加密和解密。 
- 更新正在使用的 KMS 别名: - aws kms update-alias --alias-name KEY_ALIAS \ --target-key-id ROOT_VOLUME_KMS_KEY_ARN- 替换以下内容: - KEY_ALIAS:现有密钥的别名
- ROOT_ENCRYPTION_KMS_KEY_ARN:您的新 KMS 密钥 ARN
 
- 更新节点池: - gcloud container aws node-pools update NODE_POOL_NAME \ --root-volume-kms-key-arn=ROOT_VOLUME_KMS_KEY_ARN- 替换以下内容: - NODE_POOL_NAME:节点池的名称
- ROOT_VOLUME_KMS_KEY_ARN:用于加密根卷的 AWS KMS 密钥的 Amazon 资源名称 (ARN)
 
- 停用旧的 AWS KMS 密钥。 如需了解详情,请参阅启用和停用密钥。