本文說明如何在 Google Distributed Cloud (GDC) 無網路連線裝置的虛擬機器 (VM) 執行個體上,啟用安全啟動或虛擬化信任平台模組 (vTPM)。
本文適用對象為平台管理員或應用程式運算子群組的開發人員,這些人員會在 GDC 氣隙式設備環境中,設定 VM 的安全啟動和 vTPM。
關於安全啟動
安全啟動功能會驗證所有啟動元件的數位簽章,如果驗證失敗,就會停止程序,確保系統只執行真實可信的軟體。並使用統一可延伸韌體介面 (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。GDC 氣隙裝置的所有指令都使用 gdcloud 或 kubectl CLI,且需要作業系統 (OS) 環境。
取得 kubeconfig 檔案路徑
如要對 Management API 伺服器執行指令,請確認您具備下列資源:
找出 Management API 伺服器名稱,或詢問平台管理員 (PA) 伺服器名稱。
登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。
請使用路徑取代這些操作說明中的
MANAGEMENT_API_SERVER{"</var>"}}。
要求 IAM 角色
如要在 VM 上啟用安全啟動或 vTPM,請聯絡專案 IAM 管理員,要求「專案 VirtualMachine 管理員」(project-vm-admin) 角色。
所有 VM 角色都必須繫結至 VM 所在的專案命名空間。 按照步驟驗證存取權。
啟用安全啟動功能
為 VM 啟用安全啟動功能。請按照下列操作說明,為專案命名空間 (PROJECT_NAMESPACE) 中名為 VM_NAME 的 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 ' 如果 VM 正在執行,請按照重新啟動 VM 的操作說明重新啟動 VM。
確認您已啟用安全啟動功能。與 VM 建立 SSH 連線,然後執行下列指令:
mokutil --sb-state如果已成功啟用安全啟動,指令會傳回
SecureBoot enabled。如果
mokutil工具回報您尚未啟用安全啟動,請按照「排解安全啟動設定問題」一節的步驟操作。
排解安全啟動設定問題
在編輯器中開啟 VM 自訂資源:
kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE如有任何遺漏或錯誤,請編輯
spec,新增遺漏的欄位並修正錯誤值。儲存檔案。
按照「重新啟動 VM」中的步驟操作。
如果上述步驟無法解決問題,請查看 VM 作業系統 (OS) 的相關文件,確認 OS 版本支援安全啟動。
啟用虛擬信任平台模組 (vTPM)
為 VM 啟用 vTPM。請按照下列指示操作,為專案命名空間 (PROJECT_NAMESPACE) 中的 VM 命名為 VM_NAME。
-
kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $' spec: shieldConfig: enableVtpm: true ' 如果 VM 正在執行,請按照重新啟動 VM 的操作說明重新啟動 VM。
確認您已啟用 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 設定問題
在編輯器中開啟 VM 自訂資源:
kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE如執行下列指令所示,在「
spec」欄位中尋找缺少的欄位或值。這些是必要資訊。如有任何遺漏或錯誤,請編輯
spec,新增遺漏的欄位並修正錯誤值。儲存檔案。
按照「重新啟動 VM」中的步驟操作。
如果上述步驟無法解決問題,請查看 VM 作業系統 (OS) 的相關文件,確認 OS 版本是否支援 vTPM。