工作負載運算子可將選項傳遞至 Confidential Space 工作負載 VM 執行個體,以決定執行個體的行為。雖然部分標記具有不會變更的必要值,您仍需做出下列選擇:
是否要以正式版或偵錯版 Confidential Space 映像檔為 VM 執行個體的基礎。
是否使用 AMD SEV、Intel TDX 或 Intel TDX with NVIDIA 機密運算,協助確保工作負載資料的隱私權。
需要傳遞哪些 VM 中繼資料變數,包括要執行的工作負載容器映像檔、要使用的驗證服務、是否要記錄到 Cloud Logging,以及要設定哪些環境變數等詳細資料。
要附加至 VM 的服務帳戶,以便執行工作負載,以及該帳戶需要哪些權限,才能存取其他專案中的機密資料,並將結果寫入某處。
VM 執行個體應執行的區域。
以下範例會建立機密 VM,並執行名為 WORKLOAD_CONTAINER_NAME 的 Docker 容器:
以 CPU 為基礎的工作負載
gcloud compute instances create INSTANCE_NAME \
--confidential-compute-type=CONFIDENTIAL_COMPUTING_TECHNOLOGY \
--machine-type=MACHINE_TYPE_NAME \
--maintenance-policy=MAINTENANCE_POLICY \
--shielded-secure-boot \
--image-project=confidential-space-images \
--image-family=IMAGE_FAMILY \
--metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest" \
--service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \
--scopes=cloud-platform \
--zone=ZONE_NAME \
--project=PROJECT_ID
提供以下這些值:
INSTANCE_NAME:新 VM 執行個體的名稱。CONFIDENTIAL_COMPUTING_TECHNOLOGY:要使用的機密運算技術類型。請選擇下列其中一個值:SEVTDX
MACHINE_TYPE_NAME:VM 機型,例如n2d-standard-2。機密 VM 執行個體的有效機型取決於您選擇的機密運算技術,也就是 AMD SEV 或 Intel TDX。請參閱「機器類型、CPU 和區域」。MAINTENANCE_POLICY:對於使用 SEV 的 N2D 機型,請將此值設為MIGRATE,以支援即時遷移。對於所有其他機型,請將此值設為TERMINATE,因為這些機型不支援即時遷移。IMAGE_FAMILY_NAME:Confidential Space 映像檔的系列。選擇下列其中一個選項:confidential-space用於正式環境工作負載confidential-space-debug偵錯工作負載
其他中繼資料變數,可變更 VM 的行為,包括要使用的認證服務。
WORKLOAD_AUTHOR_PROJECT:專案 ID,用於存放工作負載容器的 Artifact Registry 存放區。REPOSITORY_NAME:儲存工作負載容器的 Artifact Registry 存放區名稱。WORKLOAD_CONTAINER_NAME:工作負載容器的名稱。WORKLOAD_SERVICE_ACCOUNT_NAME:執行工作負載的服務帳戶名稱。WORKLOAD_OPERATOR_PROJECT_ID:執行工作負載的專案 ID。ZONE_NAME:VM 執行個體執行的可用區,例如us-west1-b。如要使用 Confidential Space,必須啟用下列服務 (僅適用於特定地區):PROJECT_ID:選用。要在其中建立 VM 執行個體的專案 ID。
GPU 型工作負載
事前準備
Confidential Space 僅支援 H100 GPU 上的 NVIDIA 機密運算。
如要確保有足夠的 GPU 配額可供要求資源使用,請檢查 GPU 配額。如要使用具備 GPU 的 Confidential VM 執行個體,請申請先占 GPU 配額。申請 GPU 配額時,您必須為要在各個區域中建立的 GPU 模型要求配額,並依據所有區域中各類 GPU 的總數要求額外的全域配額 (
GPUs (all regions))。如要瞭解配額用量,請參閱「GPU VM 和先占分配配額」。
請參閱限制,瞭解在 MIG 中建立規模調整要求時的注意事項。
如要安裝 NVIDIA 機密運算所需的驅動程式,您必須傳遞 metadata 變數
tee-install-gpu-driver,並將值設為true。如要使用 NVIDIA 驅動程式和 CUDA 工具包,建議使用 30 GB 以上的 VM 開機磁碟。
如要使用 CUDA 應用程式,您使用的容器映像檔必須提供 NVIDIA CUDA-X 程式庫。如要加入程式庫,請執行下列其中一項操作:
使用預先安裝 NVIDIA CUDA-X 程式庫的容器映像檔。舉例來說,您可以透過 Google 的深度學習容器,使用預先安裝的資料科學框架、NVIDIA CUDA-X 程式庫和其他工具。或者,您也可以使用 NVIDIA 的 CUDA 容器映像檔,只安裝 NVIDIA CUDA-X 程式庫。
建構及使用自己的容器映像檔。將
LD_LIBRARY_PATH環境變數設為/usr/local/nvidia/lib64,其中必須包含 NVIDIA CUDA-X 程式庫和裝置驅動程式。
已知問題
GPU 認證可能會失敗,並在索引 9 處回報不相符的測量記錄。
如要解決這個問題,請完整停止並重新啟動機密 VM。從 VM 的客體 OS 重新啟動 VM 無法修正問題。
Google 和 NVIDIA 正在設法解決這個問題。
執行附加 NVIDIA H100 GPU 的 Confidential Space 工作負載時,可能會看到以下錯誤訊息:
failed to get launchspec, make sure you're running inside a GCE VM: GPU Driver installation is not supported.這是 Confidential Space 映像檔的已知問題。如要解決這個問題,請重新啟動機密 VM。
部署以 GPU 為基礎的工作負載
如要部署以 GPU 為基礎的工作負載,您必須使用現成或彈性啟動佈建模式,建立機密 VM 執行個體。
Spot
如要使用 Spot 佈建模式,請建立加速器最佳化 VM 執行個體。
gcloud compute instances create INSTANCE_NAME \
--provisioning-model=SPOT \
--confidential-compute-type=TDX \
--machine-type=a3-highgpu-1g \
--maintenance-policy=TERMINATE \
--shielded-secure-boot \
--image-project=confidential-space-images \
--image-family=IMAGE_FAMILY_NAME \
--metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest~tee-install-gpu-driver=true" \
--service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \
--scopes=cloud-platform \
--boot-disk-size=30G \
--zone=ZONE_NAME \
--project=PROJECT_ID
提供以下這些值:
INSTANCE_NAME:新 VM 執行個體的名稱。IMAGE_FAMILY_NAME:Confidential Space 映像檔的系列。選擇下列其中一個選項:confidential-space用於正式環境工作負載confidential-space-debug偵錯工作負載
其他中繼資料變數,可變更 VM 的行為,包括要使用的認證服務。
WORKLOAD_AUTHOR_PROJECT:工作負載執行的專案 ID。REPOSITORY_NAME:Artifact Registry 存放區名稱。WORKLOAD_CONTAINER_NAME:工作負載容器的名稱。WORKLOAD_SERVICE_ACCOUNT_NAME:執行工作負載的服務帳戶名稱。WORKLOAD_OPERATOR_PROJECT_ID:執行工作負載的專案 ID。ZONE_NAME:支援 NVIDIA 機密運算的區域之一。PROJECT_ID:選用。要在其中建立 VM 執行個體的專案 ID。
彈性啟動
如要使用彈性啟動佈建模式,請先建立執行個體範本,然後建立代管執行個體群組 (MIG)。
建立執行個體範本:
gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \ --provisioning-model=FLEX_START \ --confidential-compute-type=TDX \ --machine-type=a3-highgpu-1g \ --maintenance-policy=TERMINATE \ --shielded-secure-boot \ --image-project=confidential-space-images \ --image-family=IMAGE_FAMILY_NAME \ --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest~tee-install-gpu-driver=true" \ --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \ --scopes=cloud-platform \ --boot-disk-size=30G \ --reservation-affinity=none \ --max-run-duration=RUN_DURATION \ --instance-termination-action=DELETE \ --project=PROJECT_ID提供以下這些值:
INSTANCE_TEMPLATE_NAME:新 VM 執行個體範本的名稱。IMAGE_FAMILY_NAME:Confidential Space 映像檔的系列。選擇下列其中一個選項:confidential-space用於正式環境工作負載confidential-space-debug偵錯工作負載
WORKLOAD_AUTHOR_PROJECT:執行工作負載的專案 ID。REPOSITORY_NAME:Artifact Registry 存放區名稱。WORKLOAD_CONTAINER_NAME:工作負載容器的名稱。WORKLOAD_SERVICE_ACCOUNT_NAME:執行工作負載的服務帳戶名稱。WORKLOAD_OPERATOR_PROJECT_ID:執行工作負載的專案 ID。RUN_DURATION:您希望要求的 VM 執行個體執行的時間長度。您必須將值格式化為天數、時數、分鐘數或秒數,並分別加上d、h、m或s。例如,指定30m代表 30 分鐘,或指定1d2h3m4s代表 1 天 2 小時 3 分鐘 4 秒。值必須介於 10 分鐘至 7 天之間。PROJECT_ID:選用。要在其中建立 VM 執行個體的專案 ID。
使用
instance-groups managed create指令建立可用區 MIG:gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --template=INSTANCE_TEMPLATE_NAME \ --size=0 \ --zone=ZONE_NAME \ --default-action-on-vm-failure=do_nothing提供以下這些值:
INSTANCE_GROUP_NAME:MIG 的名稱。INSTANCE_TEMPLATE_NAME:GPU VM 的執行個體範本名稱。ZONE_NAME:支援 NVIDIA 機密運算的區域之一。
在 MIG 中建立大小調整要求。指定所需的 GPU VM 執行個體數量,以及執行這些 VM 執行個體的時間長度。
gcloud compute instance-groups managed resize-requests create INSTANCE_GROUP_NAME \ --resize-request=RESIZE_REQUEST_NAME \ --resize-by=COUNT \ --zone=ZONE_NAME提供以下這些值:
INSTANCE_GROUP_NAME:MIG 的名稱。INSTANCE_TEMPLATE_NAME:GPU VM 執行個體的執行個體範本名稱。ZONE_NAME:支援 NVIDIA 機密運算的區域之一。RESIZE_REQUEST_NAME:調整大小要求的名稱。COUNT:要一次新增至群組的 VM 執行個體數量。
您建立的規模調整要求會維持
ACCEPTED狀態,直到 MIG 建立所有要求的 GPU VM 執行個體為止。在群組中建立所有 GPU VM 執行個體後,要求的狀態會變更為SUCCEEDED。當有足夠資源可供規模調整要求使用時,系統會將 VM 執行個體新增至 MIG,並啟動執行個體來執行工作負載。如要列出 MIG 中的執行個體,請執行下列指令:
gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \ --zone=ZONE_NAME \ --project=PROJECT_ID提供以下這些值:
INSTANCE_GROUP_NAME:MIG 的名稱。ZONE_NAME:支援的可用區,可從中取得 VM 執行個體清單。PROJECT_ID:選用。要從中取得 VM 執行個體清單的專案 ID。
附加的服務帳戶
服務帳戶必須附加至工作負載的機密 VM,才能執行工作負載。服務帳戶必須依下列方式設定:
使用下列角色:
roles/confidentialcomputing.workloadUser產生驗證權杖。roles/artifactregistry.reader,從 Artifact Registry 擷取儲存的工作負載容器映像檔。roles/logging.logWriter,將STDOUT和STDERR重新導向至 Cloud Logging。
具備資料協作者儲存機密資料的位置讀取權限,例如 Cloud Storage 值區或 BigQuery 資料表。
具備工作負載輸出資料的寫入權限,例如 Cloud Storage 值區。資料協作者必須擁有這個位置的讀取權限。
此外,資料協作者和工作負載運算子還需要設定下列項目:
如果資料協作者使用服務帳戶模擬,而非直接存取資源,則必須將服務帳戶新增至工作負載身分集區供應商,做為屬性條件:
'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts工作負載運算子需要
roles/iam.serviceAccountUser角色,才能模擬服務帳戶。這樣一來,他們就能將其附加至工作負載 VM 執行個體,以便執行工作負載。
中繼資料變數
建立 VM 時,您可以將變數傳遞至 --metadata 選項,變更 Confidential Space 工作負載 VM 的行為。
如要傳遞多個變數,請先在 --metadata 值加上 ^~^ 前置字元,設定分隔符號。這樣會將分隔符號設為 ~,因為變數值中會使用 ,。
例如:
metadata="^~^tee-restart-policy=Always~tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest"
下表詳細列出可為工作負載 VM 設定的中繼資料變數。
| 中繼資料鍵 | 類型 | 說明和值 |
|---|---|---|
|
互動對象:
|
字串 |
這是必要旗標,這會指向工作負載容器的位置。 範例 |
|
字串 |
如果您使用 Intel Trust Authority 做為認證服務,才需要這個檔案。將值設為 Intel Trust Authority API 金鑰。 如要瞭解如何建立 Intel Trust Authority API 金鑰,請參閱 Intel 的說明文件。 Intel Trust Authority 僅支援 Intel TDX VM 執行個體。 範例 |
|
字串 |
如果您使用 Intel Trust Authority 做為認證服務,才需要這個檔案。將值設為要讓 Intel Trust Authority 執行的區域。有效區域包括:
Intel Trust Authority 僅支援 Intel TDX VM 執行個體。 範例 |
|
互動對象:
|
JSON 字串陣列 |
為工作負載容器新增其他 Linux 功能。 範例 |
|
互動對象:
|
布林值 |
預設值為 範例 |
|
互動對象:
|
JSON 字串陣列 |
覆寫工作負載容器 範例 |
|
互動對象:
|
Enumeration |
使用 confidential-space-launcher 欄位,將工作負載容器的輸出內容 有效值如下:
序列控制台中的記錄量過高可能會影響工作負載效能。 範例 |
|
|
整數 |
設定 範例 |
|
互動對象:
|
字串 |
設定工作負載容器中的環境變數。工作負載作者也必須將環境變數名稱新增至
範例 |
|
互動對象:
|
字串 |
工作負載運算子可模擬的服務帳戶清單。工作負載運算子必須 獲准模擬服務帳戶。 您可以列出多個服務帳戶,並以半形逗號分隔。 範例 |
|
互動對象:
|
布林值 |
是否要安裝 NVIDIA 的機密運算 GPU 驅動程式。需要支援 NVIDIA 機密運算的機型。 範例 |
|
互動對象:
|
布林值 |
預設值為 範例 |
|
互動對象:
|
字串 |
以分號分隔的掛接定義清單。掛接定義是由以逗號分隔的清單組成,其中包含鍵/值組合,且必須包含 範例 |
|
互動對象:
|
Enumeration |
工作負載停止時,容器啟動器的重新啟動政策。 有效值如下:
這個變數僅支援正式版 Confidential Space 映像檔。 範例 |
|
互動對象:
|
字串 |
以半形逗號分隔的容器存放區清單,用於儲存 Sigstore Cosign 產生的簽章。 範例 |
資源調度
如要瞭解如何調度資源,以及如何確保正式環境 Confidential Space 工作負載維持高可用性,請參閱「代管執行個體群組」。