使用始终开启的 Secret 加密

Google Distributed Cloud 1.10 版支持对 Secret 进行加密,而无需外部 KMS (Key Management Service) 或任何其他依赖项。

启用始终开启的 Secret 加密

“始终开启的 Secret 加密”功能的工作原理是在 Secret 存储到集群的 etcd 数据库之前自动生成用于加密 Secret 的加密密钥。 Secret 使用针对每次 Secret 写入生成的数据加密密钥 (DEK) 进行加密。此 DEK 在 AES-GCM 模式下用于加密 Secret 对象。DEK 又使用密钥加密密钥 (KEK) 进行加密。加密算法为 A256GCM(使用 256 位密钥的 AES GCM)。

密钥版本是指示当前正在使用的密钥的版本号。

您可以在创建集群后启用 Secret 加密。

  • 对于管理员集群:

    1. 修改管理员集群配置文件以添加 secretsEncryption 部分。

    2. 运行 gkectl update 命令。

      gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG
  • 对于用户集群:

    1. 修改用户集群配置文件以添加 secretsEncryption 部分。

    2. 运行 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