面对越来越猖獗的黑客攻击,企业数据安全已经成为 CIO 们日程表中头等重要的大事。数据安全是一个系统性的工程,从用户终端到后台数据中心有着几十个环节,防火墙、身份认证、应用数据加密每一种技术都只能解决某些环节的安全问题,只要有一个环节没有做好安全防护,还是会留下安全隐患。
虚机加密工作原理
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 指令集。
对一个虚机进行加密是通过修改存储策略来完成的,虚机本身不需要做任何修改和配置。管理员可以很方便地把一个现有的虚机进行加密,或者是把已经加密的虚机改成不加密的。
密钥管理
对称加密算法 XTS-AES-256 需要两个密钥:
- 数据密钥 DEK (Data Encryption Key):用于加密虚机数据文件,每个虚机都有一个唯一的数据密钥,存放在虚机数据文件中,为了不让别人看到这个密钥,所以我们需要另一个密钥 KEK 来对数据密钥进行加密。
- 加密密钥的密钥 KEK (Key Encryption Key):用于对上面的数据密钥 DEK 进行加密,这个密钥是从第三方的密钥管理服务器 KMS (Key Management Server) 上获得的。因为 KMS 也支持多租户架构,我们通常把这个密钥称为租户密钥(Tenant Key)。注意:租户密钥只保存在 KMS 服务器上。
vSphere 在虚拟机加密和解密过程中对于密钥的管理流程是这样的:1. 未加密虚机(必须是处于关机状态)在对应的服务器上随机生成一个数据密钥 DEK;通过 vCenter 从 KMS 上获得租户密钥 KEK;使用租户密钥 KEK 对数据密钥 DEK 进行加密,并写入虚机的 vmx 文件;使用数据密钥 DEK 来加密整个虚机数据文件。
2. 已经加密的虚机从虚机的 vmx 文件中获得 KEK ID 和加密的数据密钥;通过 vCenter 从第三方密钥服务器上根据 KEK ID 获得租户密钥 KEK;利用 KEK 解密获得数据密钥 DEK;利用数据密钥 DEK 来解密虚机数据文件。
下面就是一个存放在 vmx 文件中的数据密钥例子,其中 encryption.keySafe 那一行是 KEY ID,下一行 encryption.data 是被加密的数据密钥的数据部分。
指定第三方 KMS 服务器
vSphere 虚机加密采用的是客户自带密钥 (Bring-Your-Own-Key) 的策略,有这方面要求的客户大部分都已经部署了密钥管理服务器,我们只需要在 vCenter 中指定客户现有的 KMS 服务器就可以了。当然必须要考虑 KMS 服务器高可靠和灾备的方案,不然一旦发生故障,取不到 KEK 密钥,所有的加密虚机可就启动不起来了。
理论上,凡是兼容 KMIP (Key Management Interoperability Protocol) 1.1 的 KMS 服务器都可以接入 vCenter,以下是 vSphere 6.5 支持的部分 KMS 厂商。
加密的 VMOTION
虚机加密了,自然引入了一个新的概念 - “加密的 vMotion”,虚机数据不但在存储里面是加密的,而且在 vMotion 的过程中也是加密的。vCenter 中关于虚机的配置也多了一个加密的 vMotion 选项,总共有三个选择:
- Disabled(关闭):vMotion 所传输的虚机数据不加密。
- Opportunistic(看情况):如果源和目标服务器都支持虚机加密,就使用加密 vMotion;只要有一方不支持,vMotion 就不采用加密数据。
- Required(强制要求):仅允许加密的 vMotion,源和目标服务器只要有一方不支持虚机加密,vMotion 就不会发生,这适用于高安全循规要求。
,