本主題說明如何準備磁碟、產生安全性憑證,以及啟用任何必要的作業系統 (OS) 功能,以建立自訂的遮罩映像檔。
根據預設,受防護的 VM 支援 Container-Optimized OS、各種 Linux 發行版,以及多個版本的 Windows Server。不過,如果您需要為應用程式建立自訂映像檔,仍可利用遮罩式 VM。
準備磁碟
受防護的 VM 會使用符合 統一可延伸韌體介面 (UEFI) 標準的韌體,支援安全啟動等功能。受防護的 VM 需要 GUID 分區表 (GPT) 配置,不支援主開機記錄 (MBR)。
磁碟至少須有兩個分區:
- EFI 系統分割區 (ESP):這個分割區只要 100 兆位元組 (MB) 就足夠,這只是建議。您可以視需要建立較大的分割區。ESP 唯一的要求是,應使用檔案分配表 (FAT) 檔案系統格式化。
- 作業系統分區:磁碟的其餘部分。這個分割區包含啟動作業系統 (Linux 或 Windows)。這個分區的大小沒有限制。
您可以視需要建立更多資料分割區。
將 OS 複製到 OS 分區
磁碟格式正確且已正確劃分磁碟區後,請將 OS 檔案複製到 OS 磁碟區。作業系統具有啟動載入程式,必須位於 ESP 上的有效路徑,如 UEFI 規格:\EFI\Boot\bootx64.efi
所述。請注意,您可能需要將 OS 啟動載入器複製到指定位置。
針對 Windows,除了 Windows 需要的其他動作 (例如複製 BCD 儲存庫) 之外,還有一個名為 bcdboot
的指令,可用於將作業系統啟動載入程式複製到正確的位置。如需更多資訊,請參閱 Microsoft Hardware Dev Center 上的「BCDBoot 指令列選項」。
使用受防護的 VM 映像檔時,您也可以利用兩項額外的安全性功能:虛擬信任平台模組 (vTPM) 和完整性監控。以下各節將概略說明這些功能的優點和 OS 需求。
虛擬信任平台模組 (vTPM)
可信任的平台模組是一種專用裝置,可保護用於驗證系統存取權的物件,例如金鑰和憑證。在受防護的 VM 映像檔中,會使用虛擬化的 TPM 裝置版本來啟用測量啟動。簡而言之,測量啟動可確保啟動和核心驅動程式的關鍵載入路徑完整性。如要進一步瞭解 vTPM 和測量啟動,請參閱 隔離的 VM 說明文件。
如要充分運用 vTPM 和測量啟動功能,您必須安裝驅動程式。支援 TPM 2.0 的最低 OS 版本如下:
- Windows Server 2012
- Linux 版本 3.20
- Red Hat Enterprise Linux 7.3
完整性監控
完整性監控功能可讓您瞭解 VM 執行個體的狀態,並據此做出決策。監控功能會使用 Measured Boot 產生的資料,針對 VM 執行個體回報。如要進一步瞭解完整性監控和自動發出對完整性驗證失敗的回應,請參閱受防護 VM 說明文件。
如要支援受防護的 VM 完整性監控功能,映像檔必須產生完整性信號:
- Windows 會根據預設產生完整性信號。
- Linux 必須安裝並啟用完整性評估架構 (IMA) 模組。模組必須將
CONFIG_IMA_MEASURE_PCR_IDX
設為 10。這是 IMA 模組的預設值。
將磁碟映像檔匯入至 Compute Engine
準備好映像檔後,您必須將映像檔上傳至 Compute Engine。如要瞭解將映像檔上傳至Google Cloud的必要步驟,請參閱「將開機磁碟映像檔匯入 Compute Engine」。
設定安全啟動功能的憑證
新增受防護的 VM 映像檔時,一組安全啟動公開憑證和資料庫會傳遞至 Compute Engine。這些檔案會儲存在對應的 UEFI 變數中,用於在平台、韌體和作業系統之間建立信任關係。憑證是使用唯一編碼規則 (DER) 編碼的 X.509 憑證。資料庫可以是憑證或原始二進位檔。共有四個值:
- 平台金鑰 (
pk
):用於在平台擁有者和韌體之間建立信任關係的金鑰。您只能指定一個平台金鑰,且該金鑰必須是有效的 X.509 憑證。 - 金鑰交換金鑰 (
kek
):用於在韌體和作業系統之間建立信任關係的金鑰。您可以為這個值指定多個鍵。 - 禁止使用金鑰資料庫 (
dbx
):已撤銷的憑證資料庫,如果開機檔案使用其中一個憑證簽署,系統就會停止開機。您可以為這個值指定單一或多個值。 - 金鑰資料庫 (
db
):可信任且可用於簽署啟動檔案的憑證資料庫。您可以為這個值指定單一或多個值。
UEFI 規格會進一步說明這些值的運作方式。
在以下範例中,OpenSSL 用於建立安全啟動金鑰和憑證。
產生 2048 位元 RSA 金鑰組
openssl genrsa -out secure-boot-key.rsa 2048
使用 DER 格式的金鑰產生自行簽署的 X.509 憑證
openssl req -new -x509 -sha256 \ -subj '/CN=secure-boot' \ -key secure-boot-key.rsa \ -outform DER \ -out secure-boot-cert.pem
將受防護的圖片新增至 Google Cloud
您現在可以使用上傳的映像檔和憑證,將映像檔新增至 Compute Engine。您可以使用 Google Cloud CLI 或 Compute Engine API 新增映像檔。
gcloud
將自訂映像檔新增至 Compute Engine:
gcloud compute images create [IMAGE_NAME] \ --source-disk [SOURCE_DISK] \ --source-disk-zone [ZONE] \ --platform-key-file=\ --key-exchange-key-file= \ --signature-database-file= , \ --forbidden-database-file= \ --guest-os-features="UEFI_COMPATIBLE[,WINDOWS]"
其中:
[IMAGE_NAME]
是新映像檔的名稱。[SOURCE_DISK]
是您要在其中建立新映像檔的磁碟。[ZONE]
是磁碟所在的區域。
只有在使用 Windows 映像檔時,才需要 guest-os-features
的 WINDOWS
選項。如要進一步瞭解如何建立映像檔,請參閱 gcloud create
參考資料。
REST
請按照操作說明從永久磁碟建立映像檔,但須在要求主體中指定 initial_state_config
。
...
"sourceDisk": "/zones/[ZONE]/disks/[SOURCE_DISK]",
"initial_state_config": {
"pk": {
"content": [KEY],
"fileType": [BIN,X509]
},
"keks": [
{
"content": [KEY],
"fileType": [BIN,X509]
},
...
],
"dbxs": [
{
"content": [KEY],
"fileType": [BIN,X509]
},
...
],
"dbs": [
{
"content": [KEY],
"fileType": [BIN,X509]
},
...
]
}
預設憑證
請注意,pk
、keks
、dbxs
和 dbs
為選填欄位。如果您提供初始狀態設定,系統可能會取消設定部分或所有這些欄位。從映像檔建立新例項時,除非在任何未設定的欄位上設定自訂值,否則 Google Cloud 會為 PK
、KEK
、db
和 dbx
提供預設值。如果您未提供初始狀態設定 (也就是說,設定遺漏,而非只是空白),圖片就會採用來源圖片的初始狀態設定。
這些欄位的預設值如下:
PK
:與 Google 建立的預設私密金鑰相關聯的憑證。KEK
:預設的 Microsoft KEK 憑證。從 Microsoft 下載:MicCorKEKCA2011_2011-06-24.crt
dbx
:預設的 Microsoft DBX 撤銷清單。從統一可延伸韌體介面論壇下載:UEFI 撤銷清單檔案db
:下列兩張證書:- Microsoft Windows 正式版 PCA 2011,SHA-1 憑證雜湊值為
58 0a 6f 4c c4 e4 b6 69 b9 eb dc 1b 2b 3e 08 7b 80 d0 67 8d
。從 Microsoft 下載:MicWinProPCA2011_2011-10-19.crt
- Microsoft Corporation UEFI CA 2011,SHA-1 憑證雜湊為
46 de f6 3b 5c e6 1c f8 ba 0d e2 e6 63 9c 10 19 d0 ed 14 f3
。從 Microsoft 下載:MicCorUEFCA2011_2011-06-27.crt
- Microsoft Windows 正式版 PCA 2011,SHA-1 憑證雜湊值為
請小心,因為新增自己的憑證會覆寫預設憑證,而非與您提供的憑證合併。