本文說明如何在 Google Distributed Cloud (GDC) 實體隔離方案的虛擬機器 (VM) 執行個體上,啟用安全啟動或虛擬化信任平台模組 (vTPM)。
本文適用對象為平台管理員或應用程式操作員群組中的開發人員,他們會在 GDC 環境中設定 VM 的安全啟動和 vTPM。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。
關於安全啟動
安全啟動功能會驗證所有啟動元件的數位簽章,確保系統只執行真實可信的軟體。如果驗證失敗,就會停止啟動程序。這項功能會使用統一可延伸韌體介面 (UEFI) 韌體,管理製造商用來簽署系統韌體、開機載入器和載入二進位檔的憑證和金鑰。
每次啟動時,UEFI 韌體都會根據儲存的核准金鑰驗證每個元件的數位簽章,並封鎖任何未簽署或簽署不當的元件。如要在 VM 執行個體上啟用安全啟動功能,您必須將 VM 的 shieldConfig.bootType 欄位設為 uefi,並將 shieldConfig.enableSecureBoot 設為 true。
如要查看官方 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。請參閱 GitHub 上的 Go-TPM 專案 (https://github.com/google/go-tpm),瞭解如何使用 vTPM 達成這個目的。
事前準備
如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。Distributed Cloud 的所有指令都使用 gdcloud 或 kubectl CLI,且需要作業系統 (OS) 環境。
取得 kubeconfig 檔案路徑
如要對 Management API 伺服器執行指令,請確認您具備下列資源:
如果沒有 Management API 伺服器的 kubeconfig 檔案,請登入並產生該檔案。
請使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的
MANAGEMENT_API_SERVER。
要求 IAM 角色
如要取得在 VM 上啟用安全啟動或 vTPM 所需的權限,請要求 IAM 專案管理員授予您虛擬機器專案管理員 (project-vm-admin) 角色。
所有 VM 角色都必須繫結至 VM 所在專案的命名空間。按照步驟驗證存取權。
啟用安全啟動功能
為 VM 啟用安全啟動功能。請按照下列操作說明,在專案的命名空間 (PROJECT_NAMESPACE) 中建立名為 VM_NAME 的 VM。
如果 VM 正在運作,請先停止 VM,再套用修補程式。如果在 VM 執行期間嘗試修補
shieldConfig,API 會傳回Forbidden錯誤:Changes to shieldConfig are not allowed while the VM is running。如需操作說明,請參閱「停止 VM」。更新 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 '請替換下列變數:
MANAGEMENT_API_SERVER:管理 API 伺服器的 kubeconfig 檔案。PROJECT_NAMESPACE:VM 所在專案的命名空間。VM_NAME:VM 的名稱。
成功套用修補程式後,請按照啟動 VM 的操作說明啟動 VM。
確認您已啟用安全啟動功能。建立與 VM 的 SSH 連線,然後執行下列指令:
mokutil --sb-state如果成功啟用安全啟動功能,指令會傳回
SecureBoot enabled。如果
mokutil工具回報您尚未啟用安全啟動功能,請按照「排解安全啟動設定問題」一節中的步驟操作。
排解安全啟動設定問題
在編輯器中開啟 VM 自訂資源:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT_NAMESPACE \ edit virtualmachines.virtualmachine.gdc.goog VM_NAME請替換下列變數:
MANAGEMENT_API_SERVER:管理 API 伺服器的 kubeconfig 檔案。PROJECT_NAMESPACE:VM 所在專案的命名空間。VM_NAME:VM 的名稱。
請查看「啟用安全啟動功能」中的
spec欄位,找出缺少的欄位或值。這些是必要資訊。如有缺漏或不正確,請編輯
spec,新增缺少的欄位並修正錯誤的值。儲存檔案。
按照「重新啟動 VM」中的步驟操作。
如果上述步驟無法解決問題,請查看 VM 作業系統 (OS) 的說明文件,確認 OS 版本支援安全啟動。
啟用 vTPM
為 VM 啟用 vTPM。請按照下列操作說明,在專案的命名空間 (PROJECT_NAMESPACE) 中建立名為 VM_NAME 的 VM。
如果 VM 正在運作,請先停止 VM,再套用修補程式。如果在 VM 執行期間嘗試修補
shieldConfig,API 會傳回Forbidden錯誤:Changes to shieldConfig are not allowed while the VM is running。如需操作說明,請參閱「停止 VM」。更新 VM 自訂資源,啟用 vTPM:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT_NAMESPACE \ patch virtualmachines.virtualmachine.gdc.goog VM_NAME \ --type merge --patch $' spec: shieldConfig: enableVtpm: true '請替換下列變數:
MANAGEMENT_API_SERVER:管理 API 伺服器的 kubeconfig 檔案。PROJECT_NAMESPACE:VM 所在專案的命名空間。VM_NAME: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 \ -n PROJECT_NAMESPACE \ edit virtualmachines.virtualmachine.gdc.goog VM_NAME請替換下列變數:
MANAGEMENT_API_SERVER:管理 API 伺服器的 kubeconfig 檔案。PROJECT_NAMESPACE:VM 所在專案的命名空間。VM_NAME:VM 的名稱。
找出缺少的欄位或值,如「啟用 vTPM」中的
spec欄位所示。這些是必要資訊。如有缺漏或不正確,請編輯
spec,新增缺少的欄位並修正錯誤的值。儲存檔案。
按照「重新啟動 VM」中的步驟操作。
如果上述步驟無法解決問題,請查看 VM 作業系統 (OS) 的對應說明文件,確認 OS 版本支援 vTPM。