安全啟動 VM

本文說明如何在 Google Distributed Cloud (GDC) 氣隙環境中,為虛擬機器 (VM) 執行個體啟用安全啟動或虛擬化信任平台模組 (vTPM)。

本文適用於平台管理員或應用程式運算子群組的開發人員,這些人員負責在 Distributed Cloud 環境中設定 VM 的安全啟動和 vTPM。詳情請參閱 GDC 氣隙環境適用的目標對象說明文件

關於安全啟動

安全啟動功能會驗證所有啟動元件的數位簽章,如果驗證失敗,就會停止啟動程序,確保系統執行的軟體均真實可信。並使用統一可延伸韌體介面 (UEFI) 韌體,管理製造商用來簽署系統韌體、啟動載入程式和載入二進位檔的憑證和金鑰。

每次啟動時,UEFI 韌體會將每個元件的數位簽章與儲存的核准金鑰相互比對,並封鎖任何未簽署或簽署不當的元件。如要在 VM 執行個體上啟用安全啟動,您必須將 VM 的 bootloader 類型設為 uefi

如要查看官方 UEFI 說明文件,請參閱 https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf

關於虛擬信任平台模組

vTPM 是專用的虛擬電腦晶片,可保護用於驗證系統存取權的金鑰和憑證。如要進一步瞭解 vTPM,請參閱 https://trustedcomputinggroup.org/trusted-platform-module-tpm-summary/

您也可以使用 vTPM,透過遮蔽或封存來保護密鑰。如要進一步瞭解密封儲存空間,請參閱 https://en.wikipedia.org/wiki/Trusted_Computing#SEALED-STORAGE。 如需 Go 語言範例,瞭解如何使用 vTPM 達成此目的,請參閱 GitHub 上的 Go-TPM 專案 - https://github.com/google/go-tpm

事前準備

如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。Distributed Cloud 的所有指令都使用 gdcloudkubectl CLI,且需要作業系統 (OS) 環境。

取得 kubeconfig 檔案路徑

如要對 Management API 伺服器執行指令,請確認您具備下列資源:

  1. 登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。

  2. 使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的 MANAGEMENT_API_SERVER

要求 IAM 角色

如要在 VM 上啟用安全啟動或 vTPM,請聯絡專案 IAM 管理員,要求「虛擬機器專案管理員」 (project-vm-admin) 角色。

所有 VM 角色都必須繫結至 VM 所在的專案命名空間。 按照步驟驗證存取權。

啟用安全啟動功能

為 VM 啟用安全啟動功能。請按照下列操作說明,為專案命名空間 (PROJECT_NAMESPACE) 中名為 VM_NAME 的 VM 建立別名。

  1. 套用修補程式前,請先停止執行中的 VM。如果您嘗試在 VM 執行時修補 shieldConfig,API 會傳回 Forbidden 錯誤:Changes to shieldConfig are not allowed while the VM is running。如需操作說明,請參閱「停止 VM」。

  2. 更新 VM 自訂資源,啟用安全啟動功能

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      patch virtualmachines.virtualmachine.gdc.goog VM_NAME \
      --type merge --patch $'
    spec:
      shieldConfig:
        bootType: uefi
        enableSecureBoot: true
    '
    
  3. 成功套用修補程式後,請按照啟動 VM 的操作說明啟動 VM。

  4. 確認您已啟用安全啟動功能。與 VM 建立 SSH 連線,然後執行下列指令:

    mokutil --sb-state
    

    如果已成功啟用安全啟動,指令會傳回 SecureBoot enabled

    如果 mokutil 工具回報您尚未啟用安全啟動,請按照「排解安全啟動設定問題」一節的步驟操作。

排解安全啟動設定問題

  1. 在編輯器中開啟 VM 自訂資源:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    
  2. 如「執行下列指令」的「spec」欄位所示,找出缺少的欄位或值。這些是必要資訊。

  3. 如有任何遺漏或錯誤,請編輯 spec,新增遺漏的欄位並修正錯誤值。

  4. 儲存檔案。

  5. 按照「重新啟動 VM」中的步驟操作。

如果上述步驟無法解決問題,請查看 VM 作業系統 (OS) 的相關文件,確認 OS 版本支援安全啟動。

啟用 vTPM

為 VM 啟用 vTPM。請按照下列指示操作,為專案命名空間 (PROJECT_NAMESPACE) 中的 VM 命名為 VM_NAME

  1. 套用修補程式前,請先停止執行中的 VM。如果您嘗試在 VM 執行時修補 shieldConfig,API 會傳回 Forbidden 錯誤:Changes to shieldConfig are not allowed while the VM is running。如需操作說明,請參閱「停止 VM」。

  2. 更新 VM 自訂資源以啟用 vTPM

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      patch virtualmachines.virtualmachine.gdc.goog VM_NAME \
      --type merge --patch $'
    spec:
      shieldConfig:
        enableVtpm: true
    '
    
  3. 成功套用修補程式後,請按照啟動 VM 的操作說明啟動 VM。

  4. 確認您已啟用 vTPM。與 VM 建立 SSH 連線,然後執行下列指令:

    dmesg | grep -i tpm
    

    如果已成功啟用 vTPM,指令會將 TPM 模組做為 ACPI 表格的一部分傳回。輸出看起來類似以下內容:

    [    7.620985] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1, rev-id 1)
    

    如果「ACPI tables」未顯示 TPM 模組,請按照「排解 vTPM 設定問題」一節中的步驟操作。

排解 vTPM 設定問題

  1. 在編輯器中開啟 VM 自訂資源:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    
  2. 執行下列指令所示,在「spec」欄位中尋找缺少的欄位或值。這些是必要資訊。

  3. 如有任何遺漏或錯誤,請編輯 spec,新增遺漏的欄位並修正錯誤值。

  4. 儲存檔案。

  5. 按照「重新啟動 VM」中的步驟操作。

如果上述步驟無法解決問題,請查看 VM 作業系統 (OS) 的相關文件,確認 OS 版本是否支援 vTPM。