安全啟動 VM

安全啟動功能會驗證所有啟動元件的數位簽章。如果簽章未通過驗證,啟動程序就會停止,這樣即可確保系統執行的軟體均真實可信。

Google Distributed Cloud (GDC) 實體隔離方案使用統一可延伸韌體介面 (UEFI) 韌體,管理用於簽署軟體的憑證和金鑰。

UEFI 韌體會安全地管理憑證,這類憑證內有軟體製造商用來簽署系統韌體、系統啟動載入程式和任何載入的二進位檔的金鑰。如要查看 UEFI 說明文件,請前往 https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf

每次啟動時,UEFI 韌體會將每個啟動元件的數位簽章與安全存放區的核准金鑰相互比對。只要是並未適當簽署或完全未簽署的啟動元件,系統就不允許執行。如要啟用安全啟動功能,您必須將 VM 的 bootloader 類型設為 uefi

vTPM 是虛擬化的信任平台模組。如要進一步瞭解 vTPM,請參閱 https://trustedcomputinggroup.org/trusted-platform-module-tpm-summary/。 這是一種專用電腦晶片,可用於保護物件 (例如金鑰和憑證),這些物件可用於驗證系統存取權。您也可以使用 vTPM,透過防護或封存來保護密碼。如要進一步瞭解密封儲存空間,請參閱 https://en.wikipedia.org/wiki/Trusted_Computing#SEALED-STORAGE。如需說明如何使用 vTPM 達成此目的的 Go 語言範例,請參閱 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

要求權限和存取權

如要執行本頁列出的工作,您必須具備專案虛擬機器管理員角色。按照步驟驗證您在 VM 所在專案的命名空間中,是否具備專案 VirtualMachine 管理員 (project-vm-admin) 角色。

啟用安全啟動功能

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

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

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
     shieldConfig:
       bootType: uefi
       enableSecureBoot: true
    '
    
  2. 如果 VM 正在執行,請按照重新啟動 VM 的操作說明重新啟動 VM。

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

    mokutil --sb-state
    

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

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

排解安全啟動設定問題

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

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

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

  4. 儲存檔案。

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

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

啟用虛擬信任平台模組 (vTPM)

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

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

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
       shieldConfig:
          enableVtpm: true
    '
    
  2. 如果 VM 正在執行,請按照重新啟動 VM 的操作說明重新啟動 VM。

  3. 確認您已啟用 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 edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. 如「spec」欄位所示,找出缺少的欄位或值。執行下列指令。這些是必要資訊。

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

  4. 儲存檔案。

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

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