就像電影《碟中諜》中湯姆·克魯斯潛入中情局蘭利總部復制情報一樣,如果有人潛入企業(yè)數據中心把虛擬機文件拷走怎么辦?別擔心,vSphere 6.5 推出了虛擬機加密功能,來(lái)滿(mǎn)足數據中心不斷提高的安全需求。

虛機加密工作原理
vSphere 采用對稱(chēng)加密算法 XTS-AES-256 來(lái)對虛機進(jìn)行加密,對虛機文件和加密密鑰一起經(jīng)過(guò)特殊加密算法處理后,使其變成復雜的加密數據。高級加密標準 AES (Advanced Encryption Standard) 是美國聯(lián)邦政府采用的一種區塊加密標準。XTS-AES 算法是 2008 年發(fā)布的,是目前數據存儲領(lǐng)域廣泛使用的一種加密算法。AES 加密密鑰長(cháng)度可以是128比特、192比特、256比特中的任意一個(gè),密鑰長(cháng)度越長(cháng)越難破解,XTS-AES-256 采用的是256比特長(cháng)度密鑰。
虛機加密是通過(guò) ESXi 內核完成的,為了優(yōu)化性能,ESXi 會(huì )調用 CPU 的 AES-NI (Advanced Encryption Standard - New Instruction) 指令集,通過(guò)硬件來(lái)加速加密算法,Intel 的 CPU 從 Westmere 開(kāi)始就全面支持 ASE-NI 指令集。
對一個(gè)虛機進(jìn)行加密是通過(guò)修改存儲策略來(lái)完成的,虛機本身不需要做任何修改和配置。管理員可以很方便地把一個(gè)現有的虛機進(jìn)行加密,或者是把已經(jīng)加密的虛機改成不加密的。

密鑰管理
對稱(chēng)加密算法 XTS-AES-256 需要兩個(gè)密鑰:
- 數據密鑰 DEK (Data Encryption Key):用于加密虛機數據文件,每個(gè)虛機都有一個(gè)唯一的數據密鑰,存放在虛機數據文件中,為了不讓別人看到這個(gè)密鑰,所以我們需要另一個(gè)密鑰 KEK 來(lái)對數據密鑰進(jìn)行加密。
- 加密密鑰的密鑰 KEK (Key Encryption Key):用于對上面的數據密鑰 DEK 進(jìn)行加密,這個(gè)密鑰是從第三方的密鑰管理服務(wù)器 KMS (Key Management Server) 上獲得的。因為 KMS 也支持多租戶(hù)架構,我們通常把這個(gè)密鑰稱(chēng)為租戶(hù)密鑰(Tenant Key)。注意:租戶(hù)密鑰只保存在 KMS 服務(wù)器上。
vSphere 在虛擬機加密和解密過(guò)程中對于密鑰的管理流程是這樣的:
未加密虛機(必須是處于關(guān)機狀態(tài))
- 在對應的服務(wù)器上隨機生成一個(gè)數據密鑰 DEK;
- 通過(guò) vCenter 從 KMS 上獲得租戶(hù)密鑰 KEK;
- 使用租戶(hù)密鑰 KEK 對數據密鑰 DEK 進(jìn)行加密,并寫(xiě)入虛機的 vmx 文件;
- 使用數據密鑰 DEK 來(lái)加密整個(gè)虛機數據文件。
- 從虛機的 vmx 文件中獲得 KEK ID 和加密的數據密鑰
- 通過(guò) vCenter 從第三方密鑰服務(wù)器上根據 KEK ID 獲得租戶(hù)密鑰 KEK
- 利用 KEK 解密獲得數據密鑰 DEK
- 利用數據密鑰 DEK 來(lái)解密虛機數據文件。

下面就是一個(gè)存放在 vmx 文件中的數據密鑰例子,其中 encryption.keySafe 那一行是 KEY ID,下一行 encryption.data 是被加密的數據密鑰的數據部分。

指定第三方 KMS 服務(wù)器
vSphere 虛機加密采用的是客戶(hù)自帶密鑰(Bring-Your-Own-Key)的策略,有這方面要求的客戶(hù)大部分都已經(jīng)部署了密鑰管理服務(wù)器,我們只需要在 vCenter 中指定客戶(hù)現有的 KMS 服務(wù)器就可以了。當然必須要考慮 KMS 服務(wù)器高可靠和災備的方案,不然一旦發(fā)生故障,取不到 KEK 密鑰,所有的加密虛機可就啟動(dòng)不起來(lái)了。

理論上,凡是兼容 KMIP (Key Management Interoperability Protocol) 1.1 的 KMS 服務(wù)器都可以接入 vCenter,以下是 vSphere 6.5 支持的部分 KMS 廠(chǎng)商。

加密的 vMotion
虛機加密了,自然引入了一個(gè)新的概念 - “加密的 vMotion”,虛機數據不但在存儲里面是加密的,而且在 vMotion 的過(guò)程中也是加密的。vCenter 中關(guān)于虛機的配置也多了一個(gè)加密的 vMotion 選項,總共有三個(gè)選擇:- Disabled(關(guān)閉):vMotion 所傳輸的虛機數據不加密。
- Opportunistic(看情況):如果源和目標服務(wù)器都支持虛機加密,就使用加密 vMotion;只要有一方不支持,vMotion 就不采用加密數據。
- Required(強制要求):僅允許加密的 vMotion,源和目標服務(wù)器只要有一方不支持虛機加密,vMotion 就不會(huì )發(fā)生,這適用于高安全循規要求。
