VM 中繼資料簡介


每個虛擬機器 (VM) 執行個體都會將中繼資料儲存於中繼資料伺服器。您的 VM 可自動存取中繼資料伺服器 API,而無需其他任何授權。Compute Engine 會在目錄中維護 VM 和專案的中繼資料鍵和值。每個目錄都會以鍵/值組合的形式儲存中繼資料項目。部分目錄包含子目錄。

本文概要說明 VM 中繼資料,並介紹 VM 中繼資料的類型和屬性。

VM 中繼資料用途

以下各節將說明幾個情境,您可以在這些情境中使用中繼資料項目管理 VM。

啟動和關閉指令碼

中繼資料伺服器與開機和關機指令碼搭配使用時會特別有用,因為您可以使用中繼資料伺服器,透過程式取得有關 VM 的唯一資訊,而無需其他授權。

舉例來說,您可以編寫開機指令碼,藉此取得 VM 外部 IP 的中繼資料鍵/值組合,並在指令碼中使用該 IP 設定資料庫。由於每個 VM 的 Compute Engine 預先定義中繼資料鍵都相同,因此您無須更新各 VM 的指令碼即可重複使用。這樣一來,您就能建立較不容易出錯的應用程式程式碼。

主機維護

中繼資料伺服器會使用 maintenance-event 鍵,在 scheduling/ 中繼資料目錄中提供 VM 的排程選項資訊。您可以使用這些中繼資料值,在即將發生維護事件時收到通知,以便為事件準備環境。詳情請參閱「取得即時遷移作業通知」。

訪客屬性

訪客屬性是一種特定類型的自訂中繼資料,可供應用程式在 VM 上執行時寫入。僅將訪客屬性用於不會經常變更的少量必要資料。如要進一步瞭解訪客屬性,請參閱「設定及查詢訪客屬性」。

合作夥伴屬性

合作夥伴屬性是特定類型的執行個體中繼資料。 Google Cloud服務可以使用合作夥伴屬性建立命名空間,並在其中定義執行個體中繼資料項目。您可以設定、更新、刪除及查看執行個體中繼資料項目的值,藉此設定該服務。

舉例來說,如果您為 Compute Engine 使用受管理的工作負載身分,可以在該服務命名空間的中繼資料項目中指定設定詳細資料。

中繼資料安全性考量

當您提出從中繼資料伺服器取得資訊的要求時,您的要求與後續中繼資料回應永遠不會離開執行 VM 的實體主機。

不過,只要程序可以查詢中繼資料網址,就能存取中繼資料伺服器中的所有值。包括您寫入伺服器的任何自訂中繼資料值、用戶端憑證和私密金鑰。Google 建議您在將私密值寫入中繼資料伺服器,或執行第三方程序時,務必謹慎小心。您必須將不應存取中繼資料伺服器的任何程序放入沙箱。

中繼資料伺服器端點

您可以透過下列端點存取中繼資料伺服器:

  • HTTP 端點:http://metadata.google.internal/computeMetadata/v1。 所有 VM (包括 Shielded VM) 都能存取這個端點。
  • HTTPS 端點:https://metadata.google.internal/computeMetadata/v1。這個端點只能從 Shielded VM 存取。

HTTPS 中繼資料伺服器端點

HTTPS 中繼資料伺服器端點 (https://metadata.google.internal/computeMetadata/v1) 可為中繼資料伺服器與 VM 之間的資訊傳輸提供額外安全性。這個端點僅適用於受防護的 VM。

使用 HTTPS 中繼資料伺服器端點的優點

使用 HTTPS 端點查詢中繼資料伺服器可帶來下列好處:

  • 提升安全性:有助於防止未經授權存取您的機密中繼資料。這項功能可防止攻擊者執行下列任何動作:

    • 偽造或冒用中繼資料伺服器,以取得 VM 存取權
    • 在機密中繼資料傳送至 VM 前檢視或竄改該資料
  • 降低成本:協助您避免因安全漏洞而產生的費用

運作方式

如果受防護的 VM 已安裝客體環境,VM 會執行下列程序:

  1. Compute Engine 會建立下列三張憑證:

    • 自行簽署的根憑證:為 VM 產生的專屬憑證。這項憑證只會在 VM 初次啟動時產生。
    • 伺服器身分識別憑證:中繼資料伺服器的憑證。
    • 用戶端身分憑證:用戶端憑證。 這項憑證不會快取在中繼資料伺服器中,每次從訪客環境呼叫用戶端憑證端點時,系統都會重新建立憑證。

      如要瞭解用戶端身分和根憑證的儲存位置,請參閱「憑證儲存位置」。

  2. 首次啟動時,Compute Engine 會使用 Google 產生的 UEFI 變數,將根憑證的公開部分傳輸至 VM 的訪客環境。然後儲存在 VM 上。

  3. 客體環境會定期要求用戶端身分憑證。發生這種情況時,客體代理程式會從中繼資料伺服器下載這項憑證,並使用該 VM 的根憑證進行驗證。

HTTPS 中繼資料伺服器端點發出查詢時,您會指定用戶端身分識別憑證,中繼資料伺服器和 VM 會使用這些憑證,驗證這項查詢是否已獲得授權。

啟用自動設定憑證

如要讓執行個體或專案自動設定 HTTPS MDS 憑證,請將執行個體或專案的 disable-https-mds-setup 中繼資料鍵設為 FALSE

詳情請參閱「預先定義的中繼資料鍵」。

憑證儲存位置

以下各節列出 Compute Engine 產生的根憑證和用戶端身分識別憑證的儲存位置。

根憑證

CentOS/RHEL/Rocky

CentOS、Red Hat Enterprise Linux (RHEL) 和 Rocky Linux VM 的根憑證儲存在下列位置:

/run/google-mds-mtls/root.crt

Debian/Ubuntu

Debian 和 Ubuntu VM 的根憑證儲存在下列位置:

/run/google-mds-mtls/root.crt

Fedora

Fedora VM 的根憑證會儲存在下列位置:

/run/google-mds-mtls/root.crt

SLES

SUSE Linux Enterprise Server (SLES) VM 的根憑證儲存在下列位置:

/run/google-mds-mtls/root.crt

Windows

Windows VM 的根憑證儲存在下列位置:

C:\ProgramData\Google\ComputeEngine\mds-mtls-root.crt

用戶端身分憑證

VM 上執行的所有程序都能存取用戶端身分憑證。這是必要步驟,因為所有程序都必須使用 HTTPS 端點存取中繼資料伺服器,與 HTTP 端點類似。詳情請參閱「中繼資料安全性注意事項」。

Linux

Linux VM 的用戶端身分識別憑證儲存在下列位置:

/run/google-mds-mtls/client.key

Windows

Windows VM 的用戶端身分識別憑證儲存在下列位置:

  • C:\ProgramData\Google\ComputeEngine\mds-mtls-client.key

在 OS 信任存放區中啟用根憑證儲存空間

如要讓 Compute Engine 自動將 HTTPS 中繼資料伺服器根憑證新增至作業系統信任儲存區,請將執行個體或專案的 enable-https-mds-native-cert-store 中繼資料金鑰設為 TRUE

如果啟用這個選項,Compute Engine 除了預設位置外,還會在下列位置新增根憑證。

CentOS/RHEL/Rocky

/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

Debian/Ubuntu

/etc/ssl/certs/ca-certificates.crt

Fedora

/etc/pki/tls/certs/ca-bundle.crt

SLES

/etc/ssl/ca-bundle.pem

Windows

Cert:\LocalMachine\Root

詳情請參閱「預先定義的中繼資料鍵」。

預先定義和自訂的中繼資料鍵

每個中繼資料項目都會以鍵/值組合的形式儲存在中繼資料伺服器上。中繼資料鍵須區分大小寫。鍵可以是預先定義或自訂的中繼資料鍵。

預先定義的中繼資料鍵

預先定義的中繼資料鍵是由 Compute Engine 建立的中繼資料鍵。建立 VM 時,Compute Engine 會自動為該 VM 上的部分鍵設定中繼資料值,例如 VM 執行個體 ID 或專案 ID。如果是 Compute Engine 不會自動設定值的預先定義鍵,您可以從一組值中選擇,這些值會視系統設定而定。舉例來說,如要為 VM 啟用 OS 登入,您可以將該 VM 的 enable-oslogin 預先定義鍵值設為 TRUE。如要停用該 VM 的 OS 登入功能,請將金鑰的值更新為 FALSE。 您只能更新這些鍵的值,無法更新鍵本身。

如要進一步瞭解預先定義的中繼資料鍵,以及查看這些鍵的清單,請參閱「預先定義的中繼資料鍵」。

自訂中繼資料鍵

自訂中繼資料可讓您在個別 VM 或專案中,建立及使用自己的中繼資料鍵值組合。您可以新增自訂中繼資料鍵、更新現有鍵的值,以及移除不需要的自訂中繼資料項目。設定自訂中繼資料很適合用來將任意值傳入專案中的 VM。這也適合用來建立開機關機指令碼。

如要瞭解如何為 VM 新增、更新或移除自訂中繼資料,請參閱「設定自訂中繼資料」。

中繼資料類型

VM 中繼資料項目可提供個別 VM 或專案的專屬資訊。中繼資料會根據您設定中繼資料的範圍,分為專案、可用區和執行個體中繼資料。

專案中繼資料

專案中繼資料是在專案範圍內定義,並提供適用於專案中所有 VM 的資訊。設定這項中繼資料後,中繼資料項目會套用至該專案中的所有 VM。

您可以使用預先定義和自訂的中繼資料鍵,設定專案中繼資料。進一步瞭解預先定義的專案中繼資料鍵,以及如何設定自訂專案中繼資料

可用區中繼資料

可用區中繼資料是在專案的可用區範圍內定義,並提供該專案中特定可用區內 VM 的資訊。設定可用區中繼資料時,中繼資料項目會套用至該專案中已設定的可用區內所有 VM。與專案中繼資料相比,可用區中繼資料有助於隔離故障,並提供更高的可靠性。

Compute Engine 不會提供任何預先定義的區域中繼資料鍵。您必須建立自己的自訂中繼資料鍵,才能設定可用區中繼資料。進一步瞭解如何設定自訂區域中繼資料

執行個體中繼資料

執行個體中繼資料會提供特定 VM 執行個體的資訊。您可以為每個 VM 執行個體分別設定執行個體中繼資料。

您可以使用預先定義和自訂的中繼資料鍵,設定執行個體中繼資料。進一步瞭解預先定義的執行個體中繼資料鍵,以及如何設定自訂執行個體中繼資料

中繼資料的排列方式

Compute Engine 會在目錄清單中儲存及維護 VM 和專案的中繼資料鍵和值。視中繼資料類型而定,Compute Engine 會將中繼資料項目儲存在下列其中一個目錄中:

中繼資料類型 目錄
專案和可用區中繼資料
  • HTTP 端點:
    http://metadata.google.internal/computeMetadata/v1/project
  • HTTPS 端點 (預覽版):
    https://metadata.google.internal/computeMetadata/v1/project
執行個體中繼資料
  • HTTP 端點:
    http://metadata.google.internal/computeMetadata/v1/instance
  • HTTPS 端點:
    https://metadata.google.internal/computeMetadata/v1/instance

每個目錄都會以鍵/值組合的形式儲存中繼資料項目。某些中繼資料項目也是包含其他中繼資料鍵的目錄。中繼資料鍵名稱結尾的斜線 (/) 表示該中繼資料項目是目錄。舉例來說,/project/attributes/project/ 目錄下的目錄,包含其他中繼資料鍵。如要建立自己的中繼資料目錄清單,建立自訂中繼資料項目時,中繼資料鍵名稱必須使用尾端斜線 (/)。

專案和區域中繼資料項目會儲存在同一個 project/ 目錄。如果您在專案層級和可用區層級,為 VM 的相同自訂中繼資料鍵設定不同的值,則這些鍵的可用區中繼資料值會優先於相應可用區中的專案中繼資料值。

  • 如果為已具有專案中繼資料值的金鑰新增可用區中繼資料值,Compute Engine 會覆寫指定可用區中 VM 的專案中繼資料值,並使用可用區值更新 /project 目錄。
  • 如果為已具備區域中繼資料值的鍵新增專案中繼資料值,則不會有任何變更。Compute Engine 會將區域中繼資料值保留在特定區域的 /project 目錄中。
  • 如果您未在特定可用區中,為自訂中繼資料鍵指定可用區中繼資料值,但該鍵有專案中繼資料值,則 VM 在這些可用區中仍會使用專案中繼資料值。

舉例來說,假設您定義 key-1=value-1 的專案中繼資料組合。假設您也只為 us-central1-a 區域定義一組可用區中繼資料 key-1=zonal-value-1。專案 us-central1-a 可用區中的所有 VM 都會將 key-1=zonal-value1 繼承為中繼資料配對。在您未為 key-1 設定任何可用區中繼資料的其他可用區中,中繼資料配對仍為 key-1=value-1

後續步驟