建立自訂的受防護映像檔

本主題說明如何準備磁碟、產生安全憑證,以及啟用任何必要的作業系統 (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]
        },
        ...
    ]
}

預設憑證

請注意,pkkeksdbxsdbs 為選填欄位。如果您提供初始狀態設定,系統可能會取消設定部分或所有這些欄位。從圖片建立新執行個體時, Google Cloud 會為 PKKEKdbdbx 提供預設值,除非在任何未設定的欄位中設定自訂值。如果未提供初始狀態設定 (也就是缺少設定,而不只是空白),映像檔會採用來源映像檔的初始狀態設定。

這些欄位的預設值如下:

  • PK:與 Google 建立的預設私密金鑰相關聯的憑證。
  • KEK:預設 Microsoft KEK 憑證。

    • MicCorKEKCA2011_2011-06-24.crt:從 MicrosoftGitHub 下載。

      SHA-1:31590bfd89c9d74ed087dfac66334b3931254b30

    • microsoft corporation kek 2k ca 2023.der:從 MicrosoftGitHub 下載。

      SHA-1:459ab6fb5e284d272d5e3e6abc8ed663829d632b

  • dbx:預設的 Microsoft DBX 撤銷清單。從統一可延伸韌體介面論壇下載:UEFI 撤銷清單檔案

  • db:下列四個憑證:

    • MicWinProPCA2011_2011-10-19.der:從 MicrosoftGitHub 下載。

      SHA-1:580a6f4cc4e4b669b9ebdc1b2b3e087b80d0678d

    • MicCorUEFCA2011_2011-06-27.der:從 MicrosoftGitHub 下載。

      SHA-1:46def63b5ce61cf8ba0de2e6639c1019d0ed14f3

    • microsoft uefi ca 2023.der:從 MicrosoftGitHub 下載。

      SHA-1:b5eeb4a6706048073f0ed296e7f580a790b59eaa

    • windows uefi ca 2023.der:從 MicrosoftGitHub 下載。

      SHA-1:45a0fa32604773c82433c3b7d59e7466b3ac0c67

請注意,新增自有憑證會覆寫預設憑證,而不是與您提供的憑證合併。