VM 中繼資料簡介


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

本文件概略說明 VM 中繼資料,並說明 VM 中繼資料的類型和屬性。

VM 中繼資料用途

以下各節將說明幾種可使用中繼資料項目管理 VM 的情況。

啟動和關閉指令碼

搭配開機和關機指令碼時,中繼資料伺服器會特別實用,這是因為您可以使用中繼資料伺服器,透過程式取得虛擬機的專屬資訊,不必取得其他授權。

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

主機維護

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

訪客屬性

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

合作夥伴屬性

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

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

中繼資料安全性考量

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

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

中繼資料伺服器端點

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

  • HTTP 端點:http://metadata.google.internal/computeMetadata/v1。所有 VM 均可存取此功能,包括受防護的 VM。
  • https 端點:https://metadata.google.internal/computeMetadata/v1。這項功能僅適用於受防護的 VM。

HTTPS 中繼資料伺服器端點

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

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

使用 https 端點查詢中繼資料伺服器可帶來下列優點:

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

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

運作方式

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

  1. 當 VM 開機時,Compute Engine 會完成下列作業:

    1. Compute Engine 會建立三個憑證,如下所示:

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

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

    2. Compute Engine 會使用 Google 產生的 UEFI 變數,將根憑證的公用部分轉移至 VM 的訪客環境。這個根憑證隨後會儲存在 VM 中。

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

當您對 HTTPS 中繼資料伺服器端點提出查詢時,請指定用戶端身分憑證,以便中繼資料伺服器和 VM 用於驗證此查詢是否已授權。

憑證的儲存位置

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

根憑證

CentOS/RHEL/Rocky

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

  • /run/google-mds-mtls/root.crt
  • /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

Debian/Ubuntu

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

  • /run/google-mds-mtls/root.crt
  • /etc/ssl/certs/ca-certificates.crt

Fedora

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

  • /run/google-mds-mtls/root.crt
  • /etc/pki/tls/certs/ca-bundle.crt

SLES

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

  • /run/google-mds-mtls/root.crt
  • /etc/ssl/ca-bundle.pem

Windows

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

  • C:\ProgramData\Google\ComputeEngine\mds-mtls-root.crt
  • Cert:\LocalMachine\Root
用戶端身分憑證

用戶端身分憑證可供在 VM 上執行的所有程序存取。這項設定很有必要,因為這樣一來,所有程序都能使用 https 端點存取中繼資料伺服器,類似於 http 端點。詳情請參閱「中繼資料安全性考量」。

Linux

Linux VM 的用戶端身分憑證會儲存在以下位置:

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

Windows

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

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

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

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

預先定義的中繼資料鍵

預先定義的中繼資料鍵是 Compute Engine 建立的中繼資料鍵。建立 VM 時,Compute Engine 會自動為該 VM 的部分鍵設定中繼資料值,例如 VM 執行個體 ID 或專案 ID。如果是 Compute Engine 不會自動設定值的預先定義鍵,您可以從一組可用的值中選擇,這取決於系統設定。舉例來說,如要為 VM 啟用 OS 登入功能,您可以將 enable-oslogin 預先定義鍵的值設為該 VM 的 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 設定任何可用區中繼資料,則其他可用區中的所有 VM 都會維持 key-1=value-1 的中繼資料組合。

後續步驟