本主題說明如何準備磁碟、產生安全憑證,以及啟用任何必要的作業系統 (OS) 功能,以建立自訂的防護映像檔。
根據預設,受防護的 VM 支援 Container-Optimized OS、各種 Linux 發行版,以及多個版本的 Windows Server。但如果您需要應用程式的自訂映像檔,仍可使用 Shielded VM。
準備磁碟
受防護的 VM 採用符合統一可延伸韌體介面 (UEFI) 標準的韌體,支援安全啟動等功能。受防護的 VM 需要 GUID 分區表 (GPT) 配置,不支援主開機記錄 (MBR)。
磁碟必須至少有兩個分區:
- EFI 系統分割區 (ESP):這個分割區只要 100 MB 就夠用,這只是建議。如有需要,可以建立較大的磁碟分割區。ESP 的唯一規定是必須以檔案配置表 (FAT) 檔案系統格式化。
- 作業系統磁碟分割區:磁碟的其餘部分。這個磁碟分割區包含開機 OS (Linux 或 Windows)。這個磁碟分割區的大小沒有限制。
您可以視需要建立更多資料分割區。
將作業系統複製到作業系統分區
磁碟格式化並分割完成後,請將 OS 檔案複製到 OS 分割區。作業系統的開機載入程式必須位於 ESP 的有效路徑,如 UEFI 規格中所述:\EFI\Boot\bootx64.efi。請注意,您可能需要將 OS 開機載入程式複製到指定位置。
在 Windows 中,您可以使用 bcdboot 指令將 OS 開機載入程式複製到正確位置,以及執行 Windows 要求的其他動作 (例如複製 BCD 存放區)。如需更多資訊,請參閱 Microsoft Hardware Dev Center 的「BCDBoot Command-Line Options」。
使用受防護的 VM 映像檔時,您也可以運用另外兩項安全性功能:虛擬信任平台模組 (vTPM) 和完整性監控。以下各節將說明這些功能的優點和作業系統需求。
虛擬信任平台模組 (vTPM)
可信任平台模組是一種專門用來保護物件 (例如金鑰和憑證) 的裝置,您可以使用這些物件驗證系統存取權。在受防護的 VM 映像檔上,TPM 裝置的虛擬化版本會用於啟用測量啟動。簡而言之,測量啟動可確保啟動和核心驅動程式重要載入路徑的完整性。如要進一步瞭解 vTPM 和測量啟動,請參閱 Shielded VM 說明文件。
如要使用 vTPM 和測量啟動功能,必須安裝驅動程式。支援 TPM 2.0 的最低 OS 版本如下:
- Windows Server 2012
- Linux 3.20 版
- Red Hat Enterprise Linux 7.3
完整性監控
完整性監控功能可協助您瞭解 VM 執行個體的狀態,並做出相關決策。監控服務會使用「測量啟動」產生的資料,回報 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 變數中,並用於建立平台、韌體和 OS 之間的信任關係。憑證是唯一編碼規則 (DER) 編碼的 X.509 憑證。資料庫可以是憑證或原始二進位檔。共有四個值:
- 平台金鑰 (
pk):用於在平台擁有者和韌體之間建立信任關係的金鑰。您只能指定一個平台金鑰,且必須是有效的 X.509 憑證。 - 金鑰交換金鑰 (
kek):用於在韌體和 OS 之間建立信任關係的金鑰。你可以為這個值指定多個鍵。 - 禁止使用的金鑰資料庫 (
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 憑證。dbx:預設的 Microsoft DBX 撤銷清單。從統一可延伸韌體介面論壇下載:UEFI 撤銷清單檔案db:下列四個憑證:MicWinProPCA2011_2011-10-19.der:從 Microsoft 或 GitHub 下載。SHA-1:
580a6f4cc4e4b669b9ebdc1b2b3e087b80d0678dMicCorUEFCA2011_2011-06-27.der:從 Microsoft 或 GitHub 下載。SHA-1:
46def63b5ce61cf8ba0de2e6639c1019d0ed14f3microsoft uefi ca 2023.der:從 Microsoft 或 GitHub 下載。SHA-1:
b5eeb4a6706048073f0ed296e7f580a790b59eaawindows uefi ca 2023.der:從 Microsoft 或 GitHub 下載。SHA-1:
45a0fa32604773c82433c3b7d59e7466b3ac0c67
請注意,新增自有憑證會覆寫預設憑證,而不是與您提供的憑證合併。