VM 中繼資料簡介

每個 Compute Engine 執行個體都會將中繼資料儲存於中繼資料伺服器。這類中繼資料對於設定及管理運算執行個體至關重要。中繼資料會儲存執行個體屬性、網路設定和使用者定義資料等詳細資料。運算執行個體會自動存取中繼資料伺服器 API,不必取得額外授權。

您可以透過程式輔助方式擷取專屬的運算執行個體詳細資料,並自動執行資源分配、效能最佳化和排解執行個體設定問題等工作。Compute Engine 會以階層式目錄結構,為運算執行個體和專案整理這些中繼資料鍵和值,並將項目儲存為鍵/值配對。

這份總覽說明瞭執行個體層級中繼資料和專案層級中繼資料的類型和屬性,有助您有效管理及自動化環境。

VM 中繼資料用途

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

開機和關機指令碼

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

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

主機維護

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

訪客屬性

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

合作夥伴屬性

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

中繼資料安全性考量

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

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

定價

在 VM 內與中繼資料伺服器互動不會產生費用,也不會影響 Compute Engine API 配額。這適用於查詢中繼資料項目和寫入訪客屬性。

不過,從 VM 外部使用 gcloud CLI 或 Compute Engine API 管理中繼資料時,仍須遵守專案的標準 API 配額。

以下清單說明中繼資料伺服器如何處理從 VM 內發出的呼叫費用和配額:

  • 費用:呼叫中繼資料伺服器 (包括使用 DNS 名稱 (metadata.google.internal) 或 IP 位址 (169.254.169.254 或 fd20:ce::254) 的呼叫) 不會產生輸出或服務費用。
  • Compute Engine API 配額:呼叫中繼資料伺服器不會耗用 API 頻率限制或區域配額。compute.googleapis.com
  • IAM API 配額:中繼資料伺服器不會與全域身分與存取權管理 API 配額互動。
  • 節流:中繼資料伺服器有內部限制,但標準輪詢模式不應導致節流。

中繼資料伺服器端點

您可以透過 HTTP 和 HTTPS 端點存取中繼資料伺服器。

HTTP 中繼資料伺服器端點

HTTP 端點可從所有運算執行個體類型存取,包括 Shielded VM。

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

  • DNS 名稱 (建議):http://metadata.google.internal/computeMetadata/v1
  • IPv4 位址:http://169.254.169.254/computeMetadata/v1
  • IPv6 位址 (僅適用於僅支援 IPv6 的 VM):http://[fd20:ce::254]/computeMetadata/v1

HTTPS 中繼資料伺服器端點

HTTPS 中繼資料伺服器端點可進一步保障中繼資料伺服器與 VM 之間的資訊傳輸安全。這些端點僅適用於 Shielded VM。

您可以使用下列端點,透過 HTTPS 從 Shielded VM 存取中繼資料伺服器:

  • DNS 名稱 (建議):https://metadata.google.internal/computeMetadata/v1
  • IPv4 位址:https://169.254.169.254/computeMetadata/v1
  • IPv6 位址 (僅適用於僅支援 IPv6 的 VM):https://[fd20:ce::254]/computeMetadata/v1

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

使用 HTTPS 端點查詢中繼資料伺服器具有下列優點:

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

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

運作方式

如果 Shielded VM 已安裝訪客環境,VM 會執行下列程序:

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

    • 自行簽署的根憑證:Compute Engine 為 VM 產生的專屬憑證。Compute Engine 只會在 VM 首次啟動時產生這項憑證,有效期限為 50 年。
    • 伺服器身分憑證:中繼資料伺服器的憑證。
    • 用戶端身分憑證:用戶端的憑證。中繼資料伺服器不會快取這個憑證。每次呼叫用戶端憑證端點時,訪客環境都會從中繼資料伺服器收到新憑證。這份憑證的效期為 7 天。 訪客環境必須至少每 7 天呼叫一次端點,才能取得新憑證並維持有效狀態。

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

  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 中繼資料伺服器根憑證新增至 OS 信任存放區,請將執行個體或專案的 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

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

輪換根憑證

執行個體啟動和停止時,HTTPS 中繼資料伺服器根憑證會隨時輪替。發生這種情況時,任何以先前根憑證為基礎的憑證,都無法再用於建立與中繼資料伺服器的 HTTPS 連線。如果啟用自動憑證設定,訪客環境會使用與首次啟動相同的程序,更新檔案系統上的先前用戶端和根憑證。

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

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

預先定義的中繼資料鍵

預先定義的中繼資料鍵是由 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/ 目錄下的目錄,其中包含其他中繼資料鍵。如要建立自己的中繼資料目錄清單,請在建立自訂中繼資料項目時,於中繼資料金鑰名稱中使用結尾斜線 (/)。

查詢中繼資料端點時,回應內文的格式取決於端點。如果您查詢儲存單一值的端點 (例如 hostname),回應內文會以純文字形式包含該值。如果您查詢做為目錄的端點 (例如 /project/attributes/),回應主體會包含該目錄中的項目清單,每行一個項目。

如要進一步瞭解如何查詢中繼資料端點,包括如何遞迴查詢目錄或將回應格式設為 JSON,請參閱「檢視及查詢 VM 中繼資料」。

專案和區域中繼資料項目會儲存在同一個 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。

後續步驟