部署工作負載

工作負載運算子可將選項傳遞至 Confidential Space 工作負載 VM 執行個體,在執行前決定其行為。雖然某些旗標有必要值且不會變更,但您仍須做出下列選擇:

  • 是否要根據正式版或偵錯版 Confidential Space 映像檔建立 VM 執行個體。

  • 是否要使用 AMD SEV、Intel TDX,或 Intel TDX 搭配 NVIDIA 機密運算,確保工作負載資料不外洩。

  • 需要傳遞哪些 VM 中繼資料變數,包括要執行的工作負載容器映像檔、要使用的認證服務、是否要記錄到 Cloud Logging,以及要設定的環境變數等詳細資料。

  • 要附加至 VM 的服務帳戶,以便執行工作負載,以及該帳戶需要哪些權限,才能存取其他專案中的機密資料,並將結果寫入某個位置。

  • VM 執行個體應在哪個可用區運作。

以下範例會建立 Confidential 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:要使用的機密運算技術類型。請選擇下列其中一個值:

    • SEV

    • TDX

  • MACHINE_TYPE_NAME:VM 機器類型,例如 n2d-standard-2。Confidential VM 執行個體的有效機器類型,取決於您選擇的機密運算技術 (AMD SEV 或 Intel TDX)。請參閱「機器類型」。

  • 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 機密運算所需的驅動程式,您必須傳遞中繼資料變數 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 程式庫和裝置驅動程式。

已知問題

  • 執行 Confidential Space 工作負載並連接 NVIDIA H100 GPU 時,可能會看到下列錯誤訊息:

    failed to get launchspec, make sure you're running inside
    a GCE VM: GPU Driver installation is not supported.
    

    這是 Confidential Space 映像檔的已知問題。如要解決這個問題,請重新啟動 Confidential VM。

部署以 GPU 為基礎的工作負載

如要部署 GPU 工作負載,您必須使用Spot 或彈性啟動佈建模式建立 Confidential 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)。

  1. 建立執行個體範本:

    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 \
        --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 代表一天兩小時三分四秒。值必須介於 10 分鐘至 7 天之間。

    • PROJECT_ID:選用。要建立 VM 執行個體的專案 ID。

  2. 使用 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
    

    提供以下這些值:

  3. 在 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。

  4. 當有足夠資源可滿足大小調整要求時,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。

附加的服務帳戶

服務帳戶必須附加至工作負載的 Confidential VM,才能執行工作負載。服務帳戶必須按照下列方式設定:

  • 並具備下列角色:

  • 具備資料協作者機密資料儲存位置 (例如 Cloud Storage bucket 或 BigQuery 資料表) 的讀取權限。

  • 具備工作負載輸出資料位置 (例如 Cloud Storage bucket) 的寫入權限。資料協作者必須具備這個位置的讀取權限。

此外,資料協作者和工作負載運算子必須設定下列項目:

  • 如果資料協作者使用服務帳戶模擬,而非直接存取資源,則必須將服務帳戶新增至其 workload identity pool 提供者,做為屬性條件:

    '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 設定的中繼資料變數。

中繼資料鍵 類型 說明和值

tee-image-reference

互動對象:

字串

這是必要旗標,這會指向工作負載容器的位置。

範例
tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest

ita-api-key

字串

只有在使用 Intel Trust Authority 做為認證服務時,才需要提供這項資訊。將值設為 Intel Trust Authority API 金鑰。

如要瞭解如何建立 Intel Trust Authority API 金鑰,請參閱 Intel 說明文件。

Intel Trust Authority 支援 Intel TDX VM 執行個體,可選擇搭載 NVIDIA H100 GPU。如果 GPU 存在,系統也會驗證其證據。

範例
ita-api-key=API_KEY

ita-region

字串

只有在使用 Intel Trust Authority 做為認證服務時,才需要提供這項資訊。將值設為要執行 Intel Trust Authority 的區域。有效區域如下:

  • 美國:https://api.trustauthority.intel.com
  • 歐洲: https://api.eu.trustauthority.intel.com

Intel Trust Authority 支援 Intel TDX VM 執行個體,可選擇搭載 NVIDIA H100 GPU。如果 GPU 存在,系統也會驗證其證據。

範例
ita-region=REGION_NAME

tee-added-capabilities

互動對象:

JSON 字串陣列

為工作負載容器新增其他 Linux 功能。

範例
tee-added-capabilities="[\"CAP_SYS_ADMIN\", \"CAP_SYS_CHROOT\"]"

tee-cgroup-ns

互動對象:

布林值

預設為 false。設為 true 時,會在 /sys/fs/cgroup 啟用命名空間 cgroup 掛接。

範例
tee-cgroup-ns=true

tee-cmd

互動對象:

JSON 字串陣列

覆寫工作負載容器 Dockerfile 中指定的 CMD 指令。

範例
tee-cmd="[\"params1\", \"params2\"]"

tee-container-log-redirect

互動對象:

Enumeration

使用 confidential-space-launcher 欄位,將工作負載容器中的 STDOUT 和 STDERR 輸出至 Cloud Logging 或序列控制台。

有效值如下:

  • false:(預設) 不會記錄。
  • true:輸出至序列控制台和 Cloud Logging。
  • cloud_logging:僅輸出至 Cloud Logging。
  • serial:僅輸出至序列控制台。

序列控制台中的記錄量過多,可能會影響工作負載效能。

範例
tee-container-log-redirect=true

tee-dev-shm-size-kb

整數

設定 /dev/shm 共用記憶體掛接的大小 (以 kB 為單位)。

範例
tee-dev-shm-size-kb=65536

tee-env-ENVIRONMENT_VARIABLE_NAME

互動對象:

字串

在工作負載容器中設定環境變數。工作負載作者也必須將環境變數名稱新增至 allow_env_override 啟動政策,否則不會設定這些名稱。

範例
tee-env-example-env-1='value-1'~tee-env-example-env-2='value-2'

tee-impersonate-service-accounts

互動對象:

字串

工作負載運算子可模擬的服務帳戶清單。工作負載運算子必須 獲准模擬服務帳戶。

您可以列出多個服務帳戶,並以半形逗號分隔。

範例
tee-impersonate-service-accounts=SERVICE_ACCOUNT_NAME_1@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com,SERVICE_ACCOUNT_NAME_2@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com

tee-install-gpu-driver

互動對象:

布林值

是否要安裝 NVIDIA 的機密運算 GPU 驅動程式。必須使用支援 NVIDIA 機密運算的機型。

範例
tee-install-gpu-driver=true

tee-monitoring-memory-enable

互動對象:

布林值

預設為 false。設為 true 時,會啟用記憶體用量監控功能。Confidential VM 收集的指標屬於 guest/memory/bytes_used 類型,可在 Cloud Logging 或 Metrics Explorer 中查看。

範例
tee-monitoring-memory-enable=true

tee-mount

互動對象:

字串

以分號分隔的掛接定義清單。掛接定義是由以半形逗號分隔的鍵/值組合清單組成,需要 type、source 和 destination。destination 必須是絕對路徑,且 type/source 必須是 tmpfs。

範例
type=tmpfs,source=tmpfs,destination=/tmp/tmpfs,size=12345;type=tmpfs,source=tmpfs,destination=/run/workload

tee-restart-policy

互動對象:

Enumeration

工作負載停止時,容器啟動器的重新啟動政策。

有效值如下:

  • Never (預設)
  • Always
  • OnFailure

這個變數僅適用於正式版 Confidential Space 映像檔。

範例
tee-restart-policy=OnFailure

tee-signed-image-repos

互動對象:

字串

以半形逗號分隔的容器存放區清單,用於儲存 Sigstore Cosign 產生的簽章。

範例
tee-signed-image-repos=us-docker.pkg.dev/projectA/repo/example,us-docker.pkg.dev/projectB/repo/example,us-docker.pkg.dev/projectC/repo/example

資源調度

如要瞭解如何擴充正式環境機密空間工作負載,以及確保高可用性,請參閱「代管執行個體群組」。