无论您使用哪种密钥提供程序,通过 vSphere 虚拟机加密,都可以创建加密虚拟机并加密现有虚拟机。由于所有包含敏感信息的虚拟机文件都会加密,因此虚拟机受保护。只有具备加密特权的管理员才能执行加密和解密任务。

重要说明: ESXi Shell 用户还具有加密操作特权。有关详细信息,请参见 虚拟机加密任务的必备条件和必需特权

vSphere 虚拟机加密支持哪些存储

vSphere 虚拟机加密适用于任何支持的存储类型(NFS、iSCSI、光纤通道、直接连接的存储等),包括 VMware vSAN。有关在 vSAN 集群上使用加密的详细信息,请参见 《管理 VMware vSAN》 文档。

vSphere 虚拟机加密和 vSAN 使用相同的加密库,但具有不同的配置文件。虚拟机加密是虚拟机级加密,vSAN 是数据存储级加密。

vSphere 加密密钥和密钥提供程序

vSphere 以密钥加密密钥 (KEK) 和数据加密密钥 (DEK) 的形式使用两级加密。简单来说,ESXi 主机生成 DEK,用于加密虚拟机和磁盘。KEK 由密钥服务器提供,对 DEK 进行加密(或“封装”)。KEK 使用 AES256 算法进行加密,DEK 使用 XTS-AES-256 算法进行加密。根据密钥提供程序的类型,使用不同的方法创建和管理 DEK 和 KEK。

标准密钥提供程序的运行方式如下。
  1. ESXi 主机会生成内部密钥并使用这些密钥加密虚拟机和磁盘。这些密钥用作 DEK。
  2. vCenter Server 从密钥服务器 (KMS) 请求密钥。这些密钥用作 KEK。vCenter Server 仅存储每个 KEK 的 ID,但不存储密钥本身。
  3. ESXi 使用 KEK 加密内部密钥,并将已加密的内部密钥存储在磁盘上。ESXi 不会将 KEK 存储在磁盘上。如果主机重新引导,vCenter Server 会从密钥服务器请求具有相应 ID 的 KEK,并将其提供给 ESXi。然后,ESXi 可以根据需要解密内部密钥。

vSphere Trust Authority 可信密钥提供程序的运行方式如下。

  1. 受信任集群的 vCenter Server 检查要在其中创建加密虚拟机的 ESXi 主机是否可以访问默认可信密钥提供程序。
  2. 受信任集群的 vCenter Server 将可信密钥提供程序添加到虚拟机 ConfigSpec。
  3. 虚拟机创建请求发送到 ESXi 主机。
  4. 如果 ESXi 主机尚无可用的证明令牌,则会从证明服务请求一个证明令牌。
  5. 密钥提供程序服务验证证明令牌,并创建要发送到 ESXi 主机的 KEK。使用在密钥提供程序上配置的主要密钥对 KEK 进行封装(加密)。KEK 密码文本和 KEK 纯文本都返回到受信任主机。
  6. ESXi 主机生成 DEK,对虚拟机磁盘进行加密。
  7. KEK 用于封装 ESXi 主机生成的 DEK,且密钥提供程序中的密码文本与加密数据一起存储。
  8. 虚拟机会进行加密并写入存储。
注:

vSphere 集群中的 ESXi 主机将加密虚拟机的 KEK 保存在主机内存中,以启用高可用性、vMotion、DRS 等可用性功能。删除或取消注册虚拟机时,集群中的 ESXi 主机会从其内存中删除 KEK。因此,ESXi 主机将无法再使用 KEK。对于标准密钥提供程序和可信密钥提供程序,此行为是一样的。

vSphere Native Key Provider 的运行方式如下。

  1. 创建密钥提供程序时,vCenter Server 会生成主密钥,并将其推送到集群中的 ESXi 主机。(不涉及外部密钥服务器。)
  2. ESXi 主机按需生成 DEK。
  3. 执行加密活动时,数据会通过 DEK 进行加密。

    加密的 DEK 与加密数据存储在一起。

  4. 解密数据时,主密钥用于解密 DEK,然后解密数据。

vSphere 虚拟机加密可以对哪些组件加密

vSphere 虚拟机加密功能支持加密虚拟机文件、虚拟磁盘文件以及核心转储文件。
虚拟机文件
大多数虚拟机文件(特别是未存储在 VMDK 文件中的客户机数据)都会加密。这组文件包括但不限于 NVRAM、VSWP 和 VMSN 文件。密钥提供程序中的密钥会解锁 VMX 文件中包含内部密钥和其他密钥的加密包。密钥检索的工作方式如下,具体取决于密钥提供程序:
  • 标准密钥提供程序:vCenter Server 管理来自密钥服务器的密钥,ESXi 主机无法直接访问密钥提供程序。主机等待 vCenter Server 推送密钥。
  • 可信密钥提供程序和 vSphere Native Key Provider:ESXi 主机直接访问密钥提供程序,因此可以直接从 vSphere Trust Authority 服务或 vSphere Native Key Provider 获取请求的密钥。
使用 vSphere Client 创建加密虚拟机时,可以独立于虚拟机文件加密和解密虚拟磁盘。默认情况下,将加密所有虚拟磁盘。对于其他加密任务(例如,加密现有虚拟机),您可以独立于虚拟机文件加密和解密虚拟磁盘。
注: 不能将已加密的虚拟磁盘与未加密的虚拟机相关联。
虚拟磁盘文件
加密虚拟磁盘 (VMDK) 文件中的数据不会以明文形式写入存储或物理磁盘,也不会以明文形式通过网络传输。VMDK 描述符文件主要是明文,但将 KEK 和内部密钥 (DEK) 的密钥 ID 包含在加密包中。
您可以使用 vSphere Client 或 vSphere API 通过新的 KEK 执行浅层重新加密操作,或者使用 vSphere API 通过新的内部密钥执行深层重新加密操作。
核心转储
启用了加密模式的 ESXi 主机上的核心转储始终都会加密。请参见 vSphere 虚拟机加密和核心转储vCenter Server 系统上的核心转储未加密。可保护对 vCenter Server 系统的访问。
虚拟机交换文件
将 vTPM 添加到虚拟机时,虚拟机交换文件将加密。RAM 不足的环境可能会遇到与加密相关的分页,这可能会影响性能。
vTPM
配置 vTPM 时,虚拟机文件会进行加密,而不是磁盘加密。您可以选择为虚拟机及其磁盘明确添加加密。有关详细信息,请参见 使用虚拟可信平台模块保护虚拟机
注: 如需了解有关 vSphere 虚拟机加密可与之交互的设备和功能的限制信息,请参见 虚拟机加密互操作性

vSphere 虚拟机加密不对哪些组件加密

与虚拟机关联的某些文件未加密或部分加密。
日志文件
日志文件未加密,因为它们不包含敏感数据。
虚拟机配置文件
存储在 VMX 和 VMSD 文件中的大多数虚拟机配置信息未加密。
虚拟磁盘描述符文件
为了支持在不使用密钥的情况下管理磁盘,大多数虚拟磁盘描述符文件都不会加密。

执行加密操作需要哪些特权

只有分配了加密操作特权的用户可以执行加密操作。特权组非常精细。默认管理员系统角色包括加密操作特权。无加密管理员角色支持加密操作特权除外的所有管理员特权。

除了使用 Cryptographer.* 权限,vSphere Native Key Provider 还可以使用特定于 vSphere Native Key Provider 的 Cryptographer.ReadKeyServersInfo 特权。

有关详细信息,请参见加密操作特权

您可以创建其他自定义角色,例如,允许一组用户加密虚拟机、但是禁止其解密虚拟机。

如何执行加密操作

vSphere Client 支持许多加密操作。对于其他任务,您可以使用 PowerCLI 或 vSphere API。

表 1. 用于执行加密操作的界面
接口 操作 信息
vSphere Client 创建加密虚拟机

加密和解密虚拟机

执行虚拟机的浅层重新加密(使用不同的 KEK)

本书
PowerCLI 创建加密虚拟机

加密和解密虚拟机

配置 vSphere Trust Authority

VMware PowerCLI Cmdlets 参考
vSphere Web Services SDK 创建加密虚拟机

加密和解密虚拟机

执行虚拟机的深层重新加密(使用不同的 DEK)

执行虚拟机的浅层重新加密(使用不同的 KEK)

《vSphere Web Services SDK 编程指南》

《vSphere Web Services API 参考》

crypto-util 解密已加密的核心转储

检查文件是否已加密

直接在 ESXi 主机上执行其他管理任务

命令行帮助

vSphere 虚拟机加密和核心转储

如何重新加密已加密的虚拟机

您可以使用新密钥重新加密虚拟机,以防密钥过期或已泄漏等情况。可以使用以下重新加密选项。

  • 浅层重新加密,仅替换密钥加密密钥 (KEK)
  • 深层重新加密,将替换磁盘加密密钥 (DEK) 和 KEK

深层重新加密要求虚拟机已关闭电源且不包含任何快照。虚拟机打开电源时,如果虚拟机中存在快照,可以执行浅层重新加密操作。仅允许在单个快照分支(磁盘链)上对具有快照的加密虚拟机执行浅层重新加密。不支持多个快照分支。此外,在虚拟机或磁盘的链接克隆上不支持浅层重新加密。如果浅层重新加密在使用新 KEK 更新链中的所有链接之前失败,则仍然可以访问加密虚拟机(如果具有新旧 KEK)。但是,最好在执行任何快照操作之前重新发出浅层重新加密操作。

可以使用 vSphere Client、CLI 或 API 重新加密虚拟机。请参见使用 vSphere Client 对加密虚拟机进行重新加密使用 CLI 对加密虚拟机进行重新加密《vSphere Web Services SDK 编程指南》