受防護的 VM

受防護的 VM 能為您的 Compute Engine VM 執行個體提供可驗證的完整性,因此無須擔心執行個體遭受啟動或核心層級的惡意軟體Rootkit 入侵。受防護的 VM 會運用安全啟動啟用虛擬信任平台模組 (vTPM)測量啟動完整性監控等功能,達到可驗證的完整性。

受防護的 VM 是受防護的 Cloud 計劃中首項推出的服務。受防護的 Cloud 計劃提供了可驗證的完整性,並供應 vTPM 防護或加密這類可預防資料竊取的功能,旨在讓所有 Google Cloud Platform (GCP) 於根本上更加安全。

安全啟動

安全啟動功能會驗證所有啟動元件的數位簽名,若簽名驗證未通過,就會暫停啟動程序,如此可以確保系統所執行的軟體均經過驗證。

受防護的 VM 執行個體會執行經過 Google 憑證授權單位簽署和驗證的執行個體,確保該執行個體韌體未遭修改,並建立安全啟動功能的信任根統一可延伸韌體介面 (UEFI) 2.3.1 韌體能以安全的方式來管理憑證,這類憑證內有軟體製造商用來簽署系統韌體、系統啟動載入程式和任何載入的二進位檔的金鑰。受防護的 VM 執行個體會使用 UEFI 韌體。

每次啟動時,UEFI 韌體會將每個啟動元件的數位簽名與安全存放區的核准金鑰相互比對。只要是並未適當簽署或完全未簽署的啟動元件,系統就不允許執行。

如果發生這種情況,VM 執行個體會在 GCP 主控台上顯示錯誤狀態,接著 VM 的執行個體序列控制台記錄會出現含有「UEFI:無法載入圖片」(UEFI: Failed to load image) 和「狀態:違反安全性」(Status: Security Violation) 的字串,以及啟動選項已失敗的說明。如果要進行故障的疑難排解,請按照修正受防護的 VM 選項一文中的操作說明,停用安全啟動功能,如此即可啟動 VM 執行個體,再診斷並解決問題,接著就能重新啟動安全啟動功能。

虛擬信任平台模組 (vTPM)

vTPM 是虛擬化的信任平台模組,這是一種專屬的電腦晶片,可用來保護做為驗證系統存取權之用的金鑰和憑證等物件。受防護的 VM 的 vTPM 與受信任的運算群組 (TPM) 資料庫規格 2.0 完全相容,且使用的是通過 FIPS 140-2 L1 驗證的 BoringSSL 程式庫。

受防護的 VM 的 vTPM 會執行必要的測量作業,建立已知正常的啟動基準,藉此啟用測量啟動功能,此又稱為「完整性政策基準」。完整性政策基準是用來比較後續 VM 啟動的測量數據,並依此判斷是否有任何變更。

您也可以使用 vTPM 透過防護或加密功能來保護密鑰。請參閱 GitHub 上的 Go-TPM 專案,內有 Go 程式設計語言的範例,演示了如何針對此目的使用 vTPM。

測量啟動

在測量啟動期間,會在載入元件期間建立各元件 (如韌體、系統啟動載入程式或核心) 的雜湊碼,雜湊碼接著會串連在一起,並使用任何已載入元件的雜湊碼重新雜湊,如下所示:

測量啟動程序。

這項資訊顯示出兩個載入的元件以及載入順序。

在首次啟動 VM 執行個體時,測量啟動會依據第一組測量數據建立完整性政策基準,接著將這項資料安全地儲存起來。之後每次 VM 執行個體在執行完該項作業後啟動時,系統會再採用這些測量數據,並將其儲存於安全記憶體內,留待下次重新啟動時使用。系統存有兩組測量數據後,即可啟用完整性監控功能,以此功能判斷 VM 執行個體的啟動順序是否有變更。

完整性監控

完整性監控有助於瞭解 VM 執行個體的狀態,並據此下達決策。

完整性監控需仰賴由測量啟動所建立的測量數據,測量啟動使用平台設定暫存器 (PCR) 來儲存關於元件和元件載入順序的完整性政策基準 (即已知正常的啟動順序),以及最近的啟動順序。

完整性監控功能會將最近的啟動的測量數據與完整性政策基準互相比較,依據兩者是否相符傳回一對成功/失敗的結果,其中一個結果為早期啟動順序,另一個則是後期啟動順序。早期啟動順序是從 UEFI 韌體啟動開始,直到其將控制權交給系統啟動載入程式為止。後期啟動順序為系統啟動載入程式啟動直到將控制權交給作業系統核心為止。如果最近的啟動順序有任一不負與基準不符,就會傳回完整性驗證失敗的訊息。

如果本來就預期會出現失敗,例如在 VM 執行個體上套用系統更新時,則建議您更新完整性政策基準。只要更新完整性政策基準,即可將基準設為從最近一次的啟動順序擷取到的測量數據。如果失敗在您的預料之外,請先停止 VM 執行個體,並調查失敗的原因。

您可以檢視 Stackdriver Monitoring 的完整性報表,並設定完整性失敗的快訊,也可以在 Stackdriver Logging 上查看完整性監控的詳細資料。詳請請參閱監控受防護的 VM 執行個體的完整性一文。

完整性監控事件

受防護的 VM 會建立下列事件類型的記錄項目:

  • clearTPMEvent:識別 vTPM 是否已清除,清除 vTPM 也會刪除儲存在內的所有密鑰。這個動作不會對受防護的 VM 有任何影響,因此只有在您使用 vTPM 來保護機密資料時,才需要留意這一點,如虛擬信任平台模組 (vTPM) 一文所述。
  • earlyBootReportEvent:識別早期啟動順序是否通過完整性檢查,並提供基準和最近一次啟動順序的 PCR 值詳細資料,交互比對以做出判斷。
  • lateBootReportEvent:識別後期啟動順序是否通過完整性檢查,並提供基準和最近一次啟動順序的 PCR 值詳細資料,交互比對以做出判斷。
  • setShieldedInstanceIntegrityPolicy:每次更新完整性政策基準時都加以記錄。
  • shutdownEvent:每次 VM 執行個體停止時,即會記錄。
  • startupEvent:每次 VM 執行個體啟動時,即會記錄。此事件中最值得注意的資訊就是 bootCounter 值,可識別出這個執行個體重新啟動的次數。
  • updateShieldedInstanceConfig:每次在啟用或停用受防護的 VM 選項時加以記錄。

記錄中常見的事件進程有 startupEventearlyBootReportEventlateBootReportEvent,以及最終的 shutdownEvent,皆會使用相同的 bootCounter 值,以分辨其所描述的是相同的 VM 執行個體的啟動順序。

如果您為了因應預期之內 VM 執行個體上發生的完整性失敗,而更新了完整性政策基準,就會看到額外描述新完整性政策基準測量數據的 earlyBootReportEventlateBootReportEvent 事件。下列範例顯示出的是預期順序:

  • startupEvent
  • earlyBootReportEvent 用來比較原始基準和最近的啟動順序 (成功)
  • lateBootReportEvent 用來比較原始基準和最近的啟動順序 (失敗)
  • setShieldedInstanceIntegrityPolicy 當您更新完整性政策基準時,即可將基準設為從最近一次的啟動順序擷取到的測量數據。
  • earlyBootReportEvent 用來比較新基準和最近的啟動順序 (成功)
  • lateBootReportEvent 用來比較新基準和最近的啟動順序 (成功)

Windows

earlyBootReportEvent

這項在 earlyBootReportEvent 中的重要資訊位於 earlyBootReportEvent 區段,該區段中包含下列各區段與元素:

  • actualMeasurements:含有最近啟動順序的平台設定暫存器 (PCR) 值。這個 PCR 值是用來辨別最近啟動順序中使用的啟動元件和元件載入順序,也用於和完整性政策基準 (其值是從 policyMeasurements 區段擷取) 相互比對,以判斷 VM 執行個體啟動順序是否有任何變更。actualMeasurements 區段含有下列元素:

    • 0:含有 PCR0 的值,PCR0 中包含了韌體元件的相關資訊。系統不會使用這個 PCR,而其中具有靜態值。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 1:含有 PCR4 的值,PCR4 包含了 UEFI 啟動管理員代碼和啟動嘗試的相關資訊。
    • 2:含有 PCR5 的值,PCR5 包含了磁碟 GUID 分區表的相關資訊。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 3:含有 PCR7 的值,PCR7 包含了執行個體安全啟動政策的相關資訊。
  • policyEvaluationPassed:辨別指定的啟動順序區段是否通過與完整性政策基準比對的驗證程序。

  • policyMeasurements:含有完整性政策基準的 PCR 值,policyMeasurements 區段包含了下列元素:

    • 0:含有 PCR0 的值,PCR0 中包含了韌體元件的相關資訊。系統不會使用這個 PCR,而其中具有靜態值。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 1:含有 PCR4 的值,PCR4 包含了 UEFI 啟動管理員代碼和啟動嘗試的相關資訊。
    • 2:含有 PCR7 的值,PCR7 包含了執行個體安全啟動政策的相關資訊。

如要瞭解如何使用 earlyBootReportEvent PCR 值,以便診斷出啟動完整性的驗證失敗問題,請參閱判斷啟動完整性驗證失敗的原因一文。

lateBootReportEvent

這項在 lateBootReportEvent 中的重要資訊位於 lateBootReportEvent 區段,該區段中包含下列各區段與元素:

  • actualMeasurements:含有最近啟動順序的平台設定暫存器 (PCR) 值。這個 PCR 值是用來辨別最近啟動順序中使用的啟動元件和元件載入順序,也用於和完整性政策基準 (其值是從 policyMeasurements 區段擷取) 相互比對,以判斷 VM 執行個體啟動順序是否有任何變更。actualMeasurements 區段含有下列元素:

    • 0:含有 PCR0 的值,PCR0 中包含了韌體元件的相關資訊。系統不會使用這個 PCR,而其中具有靜態值。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 1:含有 PCR4 的值,PCR4 包含了 UEFI 啟動管理員代碼和啟動嘗試的相關資訊。
    • 2:含有 PCR5 的值,PCR5 包含了磁碟 GUID 分區表的相關資訊。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 3:含有 PCR7 的值,PCR7 包含了執行個體安全啟動政策的相關資訊。
    • 4:含有 PCR11 的值,PCR11 包含了 BitLocker 雲端硬碟加密存取權控管的相關資訊。
    • 5:含有 PCR12 的值,PCR12 包含了資料事件的相關資訊。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 6:含有 PCR13 的值,PCR13 包含了 Windows 核心和啟動驅動程式的相關資訊。
    • 7:含有 PCR14 的值,PCR14 包含了 Windows 啟動授權單位的相關資訊。
  • policyEvaluationPassed:辨別指定的啟動順序區段是否通過與完整性政策基準比對的驗證程序。

  • policyMeasurements:含有完整性政策基準的 PCR 值,policyMeasurements 區段包含了下列元素:

    • 0:含有 PCR0 的值,PCR0 中包含了韌體元件的相關資訊。系統不會使用這個 PCR,而其中具有靜態值。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 1:含有 PCR4 的值,PCR4 包含了 UEFI 啟動管理員代碼和啟動嘗試的相關資訊。
    • 2:含有 PCR7 的值,PCR7 包含了執行個體安全啟動政策的相關資訊。
    • 3:含有 PCR11 的值,PCR11 包含了 BitLocker 雲端硬碟加密存取權控管的相關資訊。
    • 4:含有 PCR13 的值,PCR13 包含了 Windows 核心和啟動驅動程式的相關資訊。
    • 5:含有 PCR14 的值,PCR14 包含了 Windows 啟動授權單位的相關資訊。

如要瞭解如何使用 lateBootReportEvent PCR 值,以便診斷出啟動完整性的驗證失敗問題,請參閱判斷啟動完整性驗證失敗的原因一文。

Linux

earlyBootReportEvent

這項在 earlyBootReportEvent 中的重要資訊位於 earlyBootReportEvent 區段,該區段中包含下列各區段與元素:

  • actualMeasurements:含有最近啟動順序的平台設定暫存器 (PCR) 值。這個 PCR 值是用來辨別最近啟動順序中使用的啟動元件和元件載入順序,也用於和完整性政策基準 (其值是從 policyMeasurements 區段擷取) 相互比對,以判斷 VM 執行個體啟動順序是否有任何變更。actualMeasurements 區段含有下列元素:

    • 0:含有 PCR0 的值,PCR0 中包含了韌體元件的相關資訊。系統不會使用這個 PCR,而其中具有靜態值。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 1:含有 PCR4 的值,PCR4 包含了作業系統填充碼的相關資訊。
    • 2:含有 PCR5 的值,PCR5 包含了磁碟 GUID 分區表的相關資訊。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 3:含有 PCR7 的值,PCR7 包含了執行個體安全啟動政策的相關資訊。
  • policyEvaluationPassed:辨別指定的啟動順序區段是否通過與完整性政策基準比對的驗證程序。

  • policyMeasurements:含有完整性政策基準的 PCR 值,policyMeasurements 區段包含了下列元素:

    • 0:含有 PCR0 的值,PCR0 中包含了韌體元件的相關資訊。系統不會使用這個 PCR,而其中具有靜態值。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 1:含有 PCR4 的值,PCR4 包含了作業系統填充碼的相關資訊。
    • 2:含有 PCR7 的值,PCR7 包含了執行個體安全啟動政策的相關資訊。

如要瞭解如何使用 earlyBootReportEvent PCR 值,以便診斷出啟動完整性的驗證失敗問題,請參閱判斷啟動完整性驗證失敗的原因一文。

lateBootReportEvent

這項在 lateBootReportEvent 中的重要資訊位於 lateBootReportEvent 區段,該區段中包含下列各區段與元素:

  • actualMeasurements:含有最近啟動順序的平台設定暫存器 (PCR) 值。這個 PCR 值是用來辨別最近啟動順序中使用的啟動元件和元件載入順序,也用於和完整性政策基準 (其值是從 policyMeasurements 區段擷取) 相互比對,以判斷 VM 執行個體啟動順序是否有任何變更。actualMeasurements 區段含有下列元素:

    • 0:含有 PCR0 的值,PCR0 中包含了韌體元件的相關資訊。系統不會使用這個 PCR,而其中具有靜態值。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 1:含有 PCR4 的值,PCR4 包含了第二階段系統啟動載入程式和其核心的相關資訊。
    • 2:含有 PCR5 的值,PCR5 包含了磁碟 GUID 分區表的相關資訊。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 3:含有 PCR7 的值,PCR7 包含了執行個體安全啟動政策的相關資訊。
  • policyEvaluationPassed:辨別指定的啟動順序區段是否通過與完整性政策基準比對的驗證程序。

  • policyMeasurements:含有完整性政策基準的 PCR 值,policyMeasurements 區段包含了下列元素:

    • 0:含有 PCR0 的值,PCR0 中包含了韌體元件的相關資訊。系統不會使用這個 PCR,而其中具有靜態值。將最近一次的啟動順序與完整性政策基準驗證比對時,不會使用這個值。
    • 1:含有 PCR4 的值,PCR4 包含了第二階段系統啟動載入程式和其核心的相關資訊。
    • 2:含有 PCR7 的值,PCR7 包含了執行個體安全啟動政策的相關資訊。

如要瞭解如何使用 lateBootReportEvent PCR 值,以便診斷出啟動完整性的驗證失敗問題,請參閱判斷啟動完整性驗證失敗的原因一文。

Cloud 身分與存取權管理 (Cloud IAM) 授權

受防護的 VM 使用 Cloud IAM 來授權。

下列為受防護的 VM 作業所使用的 Compute Engine 權限:

  • compute.instances.updateShieldedInstanceConfig:可允許使用者在 VM 執行個體上變更受防護的 VM 選項。
  • compute.instances.setShieldedInstanceIntegrityPolicy:可允許使用者更新 VM 執行個體上的完整性政策基準。
  • compute.instances.getShieldedInstanceIdentity:可允許使用者從 vTPM 擷取簽署金鑰。

系統會賦予下列 Compute Engine 角色受防護的 VM 權限:

  • roles/compute.instanceAdmin.v1
  • roles/compute.securityAdmin

您也可授予自訂角色受防護的 VM 權限。

受防護的 VM 適用的組織政策限制

您可以將 constraints/compute.requireShieldedVm 組織政策限制設為 True,要求將受防護的 VM 執行個體做為貴組織內建立的 Compute Engine VM 執行個體。

瞭解如何設定使用組織政策中的布林限制一文中的 constraints/compute.requireShieldedVm 限制。必須身為組織政策管理員才能設定限制。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
說明文件