工作負載運算子可以將選項傳遞至 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偵錯工作負載
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 的機密 VM 執行個體,請申請先占 GPU 配額。要求 GPU 配額時,您必須為要在各個區域建立的 GPU 模型要求配額,並依據所有區域中各類 GPU 的總數要求額外的全域配額 (
GPUs (all regions))。如要瞭解配額用量,請參閱「GPU VM 和先占分配配額」。
請參閱限制,瞭解在 MIG 中建立規模調整要求時的注意事項。
如要安裝 NVIDIA 機密運算所需的驅動程式,您必須傳遞 metadata 變數
tee-install-gpu-driver,並將值設為true。如要使用 NVIDIA 驅動程式和 CUDA 工具包,建議 VM 開機磁碟至少要有 30 GB 的空間。
如要使用 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 回報不相符的評估記錄。
如要解決這個問題,請完整停止並重新啟動 Confidential 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偵錯工作負載
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 設定的中繼資料變數。
| 中繼資料鍵 | 類型 | 說明和值 |
|---|---|---|
|
互動對象:
|
字串 |
這是必要旗標,這會指向工作負載容器的位置。 範例 |
|
互動對象:
|
JSON 字串陣列 |
將額外的 Linux 功能新增至工作負載容器。 範例 |
|
互動對象:
|
布林值 |
預設值為 範例 |
|
互動對象:
|
JSON 字串陣列 |
覆寫工作負載容器的 範例 |
|
互動對象:
|
Enumeration |
將工作負載容器的輸出 有效值如下:
序列主控台中的記錄量過高可能會影響工作負載效能。 範例 |
|
|
整數 |
設定 範例 |
|
互動對象:
|
字串 |
設定工作負載容器中的環境變數。工作負載作者也必須將環境變數名稱新增至
範例 |
|
互動對象:
|
字串 |
工作負載運算子可模擬的服務帳戶清單。工作負載運算子必須 獲准模擬服務帳戶。 您可以列出多個服務帳戶,並以半形逗號分隔。 範例 |
|
互動對象:
|
布林值 |
是否要安裝 NVIDIA 的機密運算 GPU 驅動程式。 需要支援 NVIDIA 機密運算的機型。 範例 |
|
互動對象:
|
布林值 |
預設值為 範例 |
|
互動對象:
|
字串 |
以分號分隔的掛接定義清單。掛接定義是由以逗號分隔的清單組成,其中包含鍵/值組合,且必須包含 範例 |
|
互動對象:
|
Enumeration |
工作負載停止時,容器啟動器的重新啟動政策。 有效值如下:
這個變數僅支援正式版 Confidential Space 映像檔。 範例 |
|
互動對象:
|
字串 |
以半形逗號分隔的容器儲存庫清單,用於儲存 Sigstore Cosign 產生的簽章。 範例 |
資源調度
如要瞭解如何調度資源及確保正式環境 Confidential Space 工作負載的高可用性,請參閱「代管執行個體群組」。