Google Distributed Cloud 1.10 版支持无需使用外部 KMS(密钥管理服务)或任何其他依赖项加密 Secret。
启用始终开启的 Secret 加密
“始终开启的 Secret 加密”功能的工作原理是在 Secret 存储到集群的 etcd 数据库之前自动生成用于加密 Secret 的加密密钥。 Secret 使用针对每次 Secret 写入生成的数据加密密钥 (DEK) 进行加密。在 AES-GCM 模式下使用此 DEK 对 Secret 对象进行加密。DEK 又使用密钥加密密钥 (KEK) 进行加密。加密算法为 A256GCM(使用 256 位密钥的 AES GCM)。
密钥版本是指示当前正在使用的密钥的版本号。
您可以在创建集群后启用 Secret 加密。
对于管理员集群:
修改管理员集群配置文件以添加
secretsEncryption
部分。运行
gkectl update
命令。gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG
对于用户集群:
修改用户集群配置文件以添加
secretsEncryption
部分。运行
gkectl update
命令。gkectl update cluster --config USER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG
替换以下内容:
- 将
ADMIN_KUBECONFIG
替换为管理员集群 kubeconfig 文件的路径。 - 将
ADMIN_CLUSTER_CONFIG
替换为管理员集群配置文件的路径。 - 将
USER_CLUSTER_CONFIG
替换为用户集群配置文件的路径。
本部分中提供的 gkectl update
命令还可用于相应集群的任何其他更新。
密钥存储
管理员集群的加密密钥存储在管理员集群数据磁盘上。该磁盘装载在管理员主机器的 /opt/data 中,加密密钥位于 /opt/data/gke-k8s-kms-plugin/generatedkeys/。必须备份这些密钥,以便保留对该密钥使用的加密 Secret 的访问权限。 您应在 Hypervisor 中启用虚拟机/存储加密或采取类似措施,以确保控制平面虚拟机磁盘受到保护。
密钥轮替
如需轮替集群的现有加密密钥,请递增相应的管理员集群配置文件或用户集群配置文件中的 keyVersion
,然后运行适当的 gkectl update
命令。这将创建与新版本号匹配的新密钥,重新加密每个 Secret,并安全地清除旧密钥。所有后续的新 Secret 均使用新的加密密钥进行加密。
停用始终开启的 Secret 加密
如需在现有集群上停用 Secret 加密,请添加 disabled: true
字段。然后,运行相应的 gkectl update
命令。此更新会解密每个现有 Secret 并以纯文本形式存储每个 Secret。所有后续的新 Secret 均以纯文本形式存储。
secretsEncryption: mode: GeneratedKey generatedKey: keyVersion: KEY_VERSION disabled: true