密钥轮替
密钥轮替是指更改密钥加密密钥 (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 密钥。 如需了解详情,请参阅启用和停用密钥。