就像电影《碟中谍》中汤姆·克鲁斯潜入中情局兰利总部复制情报一样,如果有人潜入企业数据中心把虚拟机文件拷走怎么办?别担心,vSphere 6.5 推出了虚拟机加密功能,来满足数据中心不断提高的安全需求。
![\](http://www.ctiforum.com/uploadfile/2016/1116/20161116032755544.jpg)
虚机加密工作原理
vSphere 采用对称加密算法 XTS-AES-256 来对虚机进行加密,对虚机文件和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密数据。高级加密标准 AES (Advanced Encryption Standard) 是美国联邦政府采用的一种区块加密标准。XTS-AES 算法是 2008 年发布的,是目前数据存储领域广泛使用的一种加密算法。AES 加密密钥长度可以是128比特、192比特、256比特中的任意一个,密钥长度越长越难破解,XTS-AES-256 采用的是256比特长度密钥。
虚机加密是通过 ESXi 内核完成的,为了优化性能,ESXi 会调用 CPU 的 AES-NI (Advanced Encryption Standard - New Instruction) 指令集,通过硬件来加速加密算法,Intel 的 CPU 从 Westmere 开始就全面支持 ASE-NI 指令集。
对一个虚机进行加密是通过修改存储策略来完成的,虚机本身不需要做任何修改和配置。管理员可以很方便地把一个现有的虚机进行加密,或者是把已经加密的虚机改成不加密的。
![\](http://www.ctiforum.com/uploadfile/2016/1116/20161116032837920.jpg)
密钥管理
对称加密算法 XTS-AES-256 需要两个密钥:
- 数据密钥 DEK (Data Encryption Key):用于加密虚机数据文件,每个虚机都有一个唯一的数据密钥,存放在虚机数据文件中,为了不让别人看到这个密钥,所以我们需要另一个密钥 KEK 来对数据密钥进行加密。
- 加密密钥的密钥 KEK (Key Encryption Key):用于对上面的数据密钥 DEK 进行加密,这个密钥是从第三方的密钥管理服务器 KMS (Key Management Server) 上获得的。因为 KMS 也支持多租户架构,我们通常把这个密钥称为租户密钥(Tenant Key)。注意:租户密钥只保存在 KMS 服务器上。
vSphere 在虚拟机加密和解密过程中对于密钥的管理流程是这样的:
未加密虚机(必须是处于关机状态)
- 在对应的服务器上随机生成一个数据密钥 DEK;
- 通过 vCenter 从 KMS 上获得租户密钥 KEK;
- 使用租户密钥 KEK 对数据密钥 DEK 进行加密,并写入虚机的 vmx 文件;
- 使用数据密钥 DEK 来加密整个虚机数据文件。
- 从虚机的 vmx 文件中获得 KEK ID 和加密的数据密钥
- 通过 vCenter 从第三方密钥服务器上根据 KEK ID 获得租户密钥 KEK
- 利用 KEK 解密获得数据密钥 DEK
- 利用数据密钥 DEK 来解密虚机数据文件。
![\](http://www.ctiforum.com/uploadfile/2016/1116/20161116032930394.jpg)
下面就是一个存放在 vmx 文件中的数据密钥例子,其中 encryption.keySafe 那一行是 KEY ID,下一行 encryption.data 是被加密的数据密钥的数据部分。
![\](http://www.ctiforum.com/uploadfile/2016/1116/20161116033022985.jpg)
指定第三方 KMS 服务器
vSphere 虚机加密采用的是客户自带密钥(Bring-Your-Own-Key)的策略,有这方面要求的客户大部分都已经部署了密钥管理服务器,我们只需要在 vCenter 中指定客户现有的 KMS 服务器就可以了。当然必须要考虑 KMS 服务器高可靠和灾备的方案,不然一旦发生故障,取不到 KEK 密钥,所有的加密虚机可就启动不起来了。
![\](http://www.ctiforum.com/uploadfile/2016/1116/20161116033202301.jpg)
理论上,凡是兼容 KMIP (Key Management Interoperability Protocol) 1.1 的 KMS 服务器都可以接入 vCenter,以下是 vSphere 6.5 支持的部分 KMS 厂商。
![\](http://www.ctiforum.com/uploadfile/2016/1116/20161116033258308.jpg)
加密的 vMotion
虚机加密了,自然引入了一个新的概念 - “加密的 vMotion”,虚机数据不但在存储里面是加密的,而且在 vMotion 的过程中也是加密的。vCenter 中关于虚机的配置也多了一个加密的 vMotion 选项,总共有三个选择:- Disabled(关闭):vMotion 所传输的虚机数据不加密。
- Opportunistic(看情况):如果源和目标服务器都支持虚机加密,就使用加密 vMotion;只要有一方不支持,vMotion 就不采用加密数据。
- Required(强制要求):仅允许加密的 vMotion,源和目标服务器只要有一方不支持虚机加密,vMotion 就不会发生,这适用于高安全循规要求。
![\](http://www.ctiforum.com/uploadfile/2016/1116/20161116033421221.jpg)