vSAN 加密简介

加密 vSAN 静态数据需要密钥管理系统 (KMS)。Google Cloud VMware Engine 提供了多种密钥管理选项,用于 vSAN 数据加密:

  • Google-owned and Google-managed encryption keys (GMEK):默认情况下,vSAN 数据加密会使用Cloud Key Management Service 中的 Google-owned and Google-managed encryption keys ,无需额外费用。
  • 客户管理的加密密钥 (CMEK):您可以在 Cloud Key Management Service 中使用 CMEK 来管理各个私有云的加密密钥。
  • 外部 KMS:您可以部署外部 KMS 以加密静态 vSAN 数据,以下是受支持的供应商。

选择密钥管理解决方案

为帮助您选择密钥管理解决方案,请查看以下比较:

功能 GMEK(默认) CMEK 外部 KMS
密钥管理责任 Google 客户 客户
密钥存储 Cloud Key Management Service(Google 项目) Cloud Key Management Service(客户项目) 外部 KMS
隔离级别 区域级服务 个人私有云 个人私有云
旋转自动化 由 Google 自动执行 在 KMS 轮替时由 Google 自动完成 由客户管理
额外许可费用 Google Cloud 需要支付 KMS 费用 第三方 KMS 许可

本页面介绍了 vSAN 加密行为,并总结了如何使用外部 KMS 在 VMware Engine 中加密虚拟机静态数据。

vSAN 数据加密

默认情况下,VMware Engine 会对主要集群和随后添加到私有云的集群中的数据启用 vSAN 加密。vSAN 静态数据加密使用数据加密密钥 (DEK),该密钥在加密后存储在集群的本地物理磁盘上。DEK 是由 ESXi 主机自动生成的符合 FIPS 140-2 Level 1 的 AES-256 位加密密钥。系统使用 Cloud Key Management Service 或外部 KMS 提供的密钥加密密钥 (KEK) 来加密 DEK。

我们强烈建议不要对静态数据停用 vSAN 加密功能,因为它可能会导致您违反 Google Cloud VMware Engine 的服务专用条款。如果在集群上对静态数据停用 vSAN 加密功能,则 VMware Engine 监控逻辑会引发提醒。为了帮助您防止违反服务条款,此提醒会触发 Cloud Customer Care 驱动的操作,以在受影响的集群上重新启用 vSAN 加密功能。

同样,如果您配置外部 KMS,我们强烈建议不要在 vCenter 服务器中删除 Cloud Key Management Service 的密钥提供商配置。

Google-owned and Google-managed encryption keys (GMEK)

默认情况下,私有云使用 Google-owned and Google-managed encryption keys (GMEK)。 借助 GMEK,VMware Engine 会配置 vCenter Server 以连接到 GMEK 提供商。VMware Engine 会为每个区域创建一个密钥提供商实例,密钥提供商使用 Cloud KMS 对 KEK 进行加密。VMware Engine 可全面管理密钥提供商,并将其配置为在所有区域中都具备高可用性。

GMEK 提供商是对 vCenter 服务器中的内置密钥提供商的补充(在 vSphere 7.0 Update 2 及更高版本中),这是针对生产环境的推荐方法。内置密钥提供商在 vCenter 服务器中作为进程运行,该服务器在 VMware Engine 中的 vSphere 集群上运行。VMware 建议不要使用内置密钥提供商来加密托管 vCenter 服务器的集群。请改为使用 GMEK、CMEK 或外部 KMS。

GMEK 自动密钥轮替

Google Cloud VMware Engine 会定期触发所有集群的 GMEK 自动密钥轮替。这是一项后台维护任务,无需用户干预,也不会影响集群可用性。

客户管理的加密密钥 (CMEK)

Google Cloud VMware Engine 支持使用 Cloud Key Management Service 为各个私有云提供客户管理的加密密钥 (CMEK)。您可以为每个私有云配置不同的 CMEK 密钥,而不是在整个项目中共享单个密钥。这样做具有以下优势:

  • 增强隔离性:一个私有云的密钥泄露或轮替不会影响其他私有云。
  • 精细的合规性:根据每个私有云内工作负载的具体数据驻留或合规性要求分配密钥。

管理 CMEK 加密

您可以使用 Google Cloud 控制台和 VMware Engine API 为私有云配置和管理客户管理的加密密钥 (CMEK)。如需使用 CMEK,您必须向 VMware Engine 服务账号 (service-<var>PROJECT_NUMBER</var>@gcp-sa-vmwareengine.iam.gserviceaccount.com) 授予 roles/cloudkms.cryptoKeyEncrypterDecrypter IAM 角色,以便该服务账号能够使用您打算使用的特定 Cloud KMS 密钥。此权限允许 VMware Engine 使用您项目中所选的 Cloud KMS 密钥来加密和解密保护 vSAN 数据的密钥加密密钥 (KEK)。

分配密钥权限

您必须先分配必要的权限,然后才能启用 CMEK:

  1. 确定您的 KMS 资源:前往Google Cloud 控制台中的密钥管理页面,找到要用于数据保护的特定 Cloud KMS 密钥。

    前往“密钥管理”

  2. 设置 IAM 角色:在 Cloud KMS 密钥信息中心内,直接向 VMware Engine 服务账号 (service-<var>PROJECT_NUMBER</var>@gcp-sa-vmwareengine.iam.gserviceaccount.com) 授予 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色。

Google Cloud 有关使用控制台和 VMware Engine API 管理 CMEK 的说明:

Google Cloud 控制台

如需使用 Google Cloud 控制台配置客户管理的加密密钥 (CMEK),请执行以下操作:

创建具有 CMEK 的私有云

如需使用 Google Cloud 控制台创建具有 CMEK 的私有云,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往私有云页面。

    前往“Private Cloud”页面

  2. 点击创建

  3. 加密部分中,选择客户管理的加密密钥 (CMEK)

  4. 输入 Cloud KMS 密钥的完整资源名称。

  5. 点击创建保存

更新现有私有云的 CMEK 密钥

如需使用 Google Cloud 控制台更新现有私有云的 CMEK 密钥,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往私有云页面。

    前往“Private Cloud”页面

  2. 选择要更新的现有私有云。

  3. 加密部分中,选择客户管理的加密密钥 (CMEK)

  4. 输入 Cloud KMS 密钥的完整资源名称。

  5. 点击创建保存

将现有私有云的加密更新为 GMEK

如需使用 Google Cloud 控制台将现有私有云的加密类型更新为 GMEK,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往私有云页面。

    前往“Private Cloud”页面

  2. 选择要更新的现有私有云。

  3. 加密部分中,选择 Google-owned and Google-managed encryption keys (GMEK)

  4. 点击创建保存

VMware Engine API

如需使用 API 命令,请先将以下变量替换为您环境中的值:

  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • LOCATION:VMware Engine 区域,例如 us-east4
  • PC_ID:新私有云的 ID。
  • NETWORK_ID:VPC 网络的 ID。
  • CIDR_RANGE:私有云的管理 CIDR 范围。
  • CLUSTER_ID:管理集群的 ID。
  • NODE_TYPE:节点类型,例如 standard-72
  • COUNT:集群中的节点数。
  • RING:Cloud KMS 密钥环的名称。
  • KEY:Cloud KMS 加密密钥的名称。
  • PC_NAME:现有私有云的名称。

如需创建使用 CMEK 的私有云,请使用 privateClouds.create 方法并指定 encryptionConfig 参数:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json; charset=utf-8" \
  "https://vmwareengine.googleapis.com/v1/projects//locations//privateClouds?private_cloud_id=" \
  -d '{
  "networkConfig": {
    "vmwareEngineNetwork": "projects//locations/global/vmwareEngineNetworks/",
    "managementCidr": ""
  },
  "managementCluster": {
    "clusterId": "",
    "nodeTypeConfigs": {
      "": {
        "nodeCount": 
      }
    }
  },
  "encryptionConfig": {
    "cryptoKeyName": "projects//locations//keyRings//cryptoKeys/"
  }
}'

如需更新现有私有云的 CMEK 密钥,请使用 privateClouds.patch 方法:

curl -X PATCH \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json; charset=utf-8" \
  "https://vmwareengine.googleapis.com/v1/projects//locations//privateClouds/?updateMask=encryptionConfig" \
  -d '{
  "encryptionConfig": {
    "cryptoKeyName": "projects//locations//keyRings//cryptoKeys/"
  }
}'

如需将现有私有云切换回 GMEK (Google-owned and Google-managed encryption keys),请使用 privateClouds.patch 方法并提供一个空的 encryptionConfig 对象:

curl -X PATCH \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json; charset=utf-8" \
  "https://vmwareengine.googleapis.com/v1/projects//locations//privateClouds/?updateMask=encryptionConfig" \
  -d '\''{
  "encryptionConfig": {}
}'\''

了解 CMEK 约束和限制

  • 区域要求:私有云和所选 Cloud KMS 密钥必须位于同一区域。请注意,Google Cloud KMS 全局密钥不支持用于 vSAN 加密。
  • 密钥可用性:如果加密密钥因被停用或撤消而无法访问,所有依赖的 vSAN 操作都将失败。在成功重新建立密钥访问权限之前,无法继续执行重要程序,包括主机重启和浅层重新密钥化。

通过 CMEK 自动 KEK 轮替提高运营效率

对于选择 CMEK 的组织,vSAN 静态数据加密的自动 KEK 轮替功能可自动执行手动安全任务:

  • 自动同步:系统会监控 Cloud KMS 并自动检测密钥轮替。
  • 无缝后台 KEK 轮替:轮替时,系统会启动浅层 KEK 轮替,确保持续保护,而无需在 vCenter 中进行人工干预。此操作会使用新的密钥加密密钥 (KEK) 更新数据加密密钥 (DEK) 的密钥加密密钥。由于 DEK 直接加密 vSAN 数据,因此此过程不需要对 vSAN 数据进行完全重新加密。
  • 零停机时间管理:系统在后台生成并应用 KEK,从而保持工作负载的性能和可用性。此过程通常会在 Cloud KMS 密钥轮替后的 48 小时内完成。

加密虚拟机的要求

您可以使用默认的Google-owned and managed key 提供程序或 Cloud Key Management Service 来管理虚拟机的加密密钥。

如果您为私有云中的任何虚拟机启用了 VM 加密(或 vTPM),并使用 KMS 管理加密密钥,则在轮替 KMS 密钥后,您必须重新加密(浅层重新设置密钥)每个虚拟机。

浅层重新设置密钥仅替换密钥加密密钥 (KEK),不会更改虚拟机的加密密钥 (DEK)。您通常会在 vSphere Client 中使用重新加密操作来触发浅层重新加密。

在此操作期间,系统会使用新的 KEK 重新封装(重新加密)现有 DEK。此过程非常快速,因为它不会重写磁盘上的实际数据,而只会更新包含加密 DEK 的小型密钥包。如需了解详情,请参阅以下 VMware 文档:

未能重新设置加密虚拟机的密钥的风险

如果您在删除轮替后的(旧)KMS 密钥版本之前未能重新设置加密虚拟机的密钥,可能会导致以下问题:

  • vMotion 失败:如果您在 KMS 密钥轮换后但在执行虚拟机重新密钥之前重新启动目标主机或将目标主机添加到集群,则 ESXi 主机在 vMotion 期间无法解密虚拟机 DEK。
  • 开机失败:如果主机重新启动或清除其本地密钥缓存,则无法从 KMS 重新获取密钥。如果您从 KMS 中删除了必需的密钥,主机将无法解密 DEK,从而导致加密虚拟机无法开机。

在工作负载虚拟机上执行重新设置密钥操作的步骤

  1. 在 vSphere Client 中,右键点击虚拟机。
  2. 依次选择 VM Policies > Re-encrypt
  3. 在随即显示的对话框中确认重新加密请求。
  4. 等待任务完成。
  5. 通过将虚拟机迁移到您在 KMS 密钥轮替后重启或添加到集群的主机来验证重新密钥。

外部 KMS

您也可以选择符合 KMIP 1.1 且经过 VMware for vSAN 认证的第三方 KMS 解决方案。以下供应商已使用 VMware Engine 验证其 KMS 解决方案,并发布了部署指南和支持语句:

如需获取配置说明,请参阅以下文档:

使用支持的供应商

外部 KMS 的每次部署都需要执行相同的基本步骤:

  • 创建 Google Cloud 项目或使用现有项目。
  • 创建新的虚拟私有云 (VPC) 网络或选择现有的 VPC 网络。
  • 将您选择的 VPC 网络连接到 VMware Engine 网络。

然后,在 Compute Engine 虚拟机实例中部署 KMS:

  1. 设置部署 Compute Engine 虚拟机实例所需的 IAM 权限。
  2. 在 Compute Engine 中部署 KMS。
  3. 在 vCenter 和 KMS 之间建立信任关系。
  4. 启用 vSAN 数据加密。

以下部分简要描述了使用某个受支持的供应商的过程。

设置 IAM 权限

您需要足够的权限在给定 Google Cloud 项目和 VPC 网络中部署 Compute Engine 虚拟机实例,将您的 VPC 网络连接到 VMware Engine,并为 VPC 网络配置防火墙规则。

拥有 Network Admin 角色的项目所有者和 IAM 主账号可以创建分配的 IP 范围并管理专用连接。如需详细了解角色,请参阅 Compute Engine IAM 角色

在 Compute Engine 中部署密钥管理系统

一些 KMS 解决方案在 Google Cloud Marketplace 中以设备类型提供。您可以通过直接在 VPC 网络或 Google Cloud 项目中导入 OVA 来部署此类设备。

对于基于软件的 KMS,请使用 KMS 供应商推荐的配置(vCPU 计数,vMem 和磁盘)部署 Compute Engine 虚拟机实例。在访客操作系统中安装 KMS 软件。在连接到 VMware Engine 网络的 VPC 网络中创建 Compute Engine 虚拟机实例。

在 vCenter 和 KMS 之间建立信任关系

在 Compute Engine 中部署 KMS 后,请配置 VMware Engine vCenter 以从 KMS 检索加密密钥。

首先将 KMS 连接详细信息添加到 vCenter。然后,在 vCenter 和 KMS 之间建立信任关系。如需在 vCenter 和 KMS 之间建立信任关系,请执行以下操作:

  1. 在 vCenter 中生成证书。
  2. 使用 KMS 生成的令牌或密钥对其进行签名。
  3. 将该证书提供或上传到 vCenter。
  4. 通过检查 vCenter 服务器配置页面中的 KMS 设置和状态确认连接状态。

启用 vSAN 数据加密

在 vCenter 中,默认的 CloudOwner 用户具有启用和管理 vSAN 数据加密所需的足够权限。

如需从外部 KMS 切换回默认的Google-owned and managed key 提供商,请按照 VMware 文档配置和管理标准密钥提供商中提供的更改密钥提供商相关步骤操作。

后续步骤