部署工作負載

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

  • 是否要以正式或偵錯 Confidential Space 映像檔為 VM 執行個體的基礎。

  • 是否使用 AMD SEV、Intel TDX 或 Intel TDX with NVIDIA Confidential Computing (搶先版),協助確保工作負載資料的隱私權。

  • 需要傳遞哪些 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:要使用的機密運算技術類型。請選擇下列其中一個值:

    • SEV

    • TDX

  • 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-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。機密空間需要下列服務,這些服務僅在特定地區提供:

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

GPU 型工作負載

事前準備

  • Confidential Space 僅支援 H100 GPU 上的 NVIDIA Confidential Computing (搶先版)。

  • 如要確保您有足夠的 GPU 配額可供要求使用的資源,請查看 GPU 配額。如要使用搭載 GPU 的機密 VM 執行個體,請申請先占 GPU 配額。要求 GPU 配額時,您必須為要在各個地區建立的 GPU 模型要求配額,並依據所有地區中各類 GPU 的總數要求額外的全域配額 (GPUs (all regions))。

  • 如要瞭解配額用量,請參閱「GPU VM 和先占分配配額」。

  • 請參閱限制,瞭解在 MIG 中建立規模調整要求時的注意事項。

  • 如要安裝 NVIDIA 機密運算 (搶先版) 所需的驅動程式,您必須傳遞中繼資料變數 tee-install-gpu-driver,並將值設為 true

  • 如要使用 NVIDIA 驅動程式和 CUDA Toolkit,建議 VM 開機磁碟至少要有 30 GB 的空間。

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

如要部署以 GPU 為基礎的工作負載,您必須使用現成彈性啟動 (搶先版) 佈建模式,建立機密 VM 執行個體。

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-preview-cgpu 用於正式環境工作負載

    • confidential-space-debug-preview-cgpu 偵錯工作負載

  • 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 \
        --reservation-affinity=none \
        --max-run-duration=RUN_DURATION \
        --instance-termination-action=DELETE \
        --project=PROJECT_ID
    

    提供以下這些值:

    • INSTANCE_TEMPLATE_NAME:新 VM 執行個體範本的名稱。

    • IMAGE_FAMILY_NAME機密空間圖片的系列。 選擇下列其中一個選項:

      • confidential-space-preview-cgpu 用於正式環境工作負載

      • confidential-space-debug-preview-cgpu 偵錯工作負載

    • WORKLOAD_AUTHOR_PROJECT:執行工作負載的專案 ID。

    • REPOSITORY_NAME:Artifact Registry 存放區名稱。

    • WORKLOAD_CONTAINER_NAME:工作負載容器的名稱。

    • WORKLOAD_SERVICE_ACCOUNT_NAME:執行工作負載的服務帳戶名稱。

    • WORKLOAD_OPERATOR_PROJECT_ID:執行工作負載的專案 ID。

    • RUN_DURATION:您希望要求的 VM 執行個體執行的時間長度。您必須將值格式化為天數、時數、分鐘數或秒數,並分別加上 dhms。舉例來說,指定 30m 代表 30 分鐘,指定 1d2h3m4s 則代表 1 天 2 小時 3 分鐘 4 秒。這個值必須介於 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
    

    提供以下這些值:

    • INSTANCE_GROUP_NAME:MIG 的名稱。

    • INSTANCE_TEMPLATE_NAME:GPU VM 的執行個體範本名稱。

    • ZONE_NAME:支援 NVIDIA 機密運算的區域 (預先發布版)。

  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 值區或 BigQuery 資料表。

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

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

  • 如果資料協作者使用服務帳戶模擬,而非直接存取資源,則必須將服務帳戶新增至工作負載身分集區供應商,做為屬性條件:

    '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

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

互動對象:

定義的字串

將工作負載容器的輸出內容 STDOUTSTDERR 傳送至 Cloud Logging 或序列主控台,位於 confidential-space-launcher 欄位下方。

有效值如下:

  • 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 時,會啟用記憶體用量監控功能。機密 VM 收集的指標屬於 guest/memory/bytes_used 類型,可在 Cloud LoggingMetrics Explorer 中查看。

範例
tee-monitoring-memory-enable=true

tee-mount

互動對象:

字串

以半形分號分隔的掛接定義清單。掛接定義是由以半形逗號分隔的鍵/值組合清單組成,且必須包含 typesourcedestinationdestination 必須是絕對路徑,而 type/source 必須是 tmpfs

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

tee-restart-policy

互動對象:

定義的字串

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

有效值如下:

  • Never (預設)
  • Always
  • OnFailure

這個變數僅適用於正式版機密空間映像檔。

範例
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

資源調度

如要瞭解如何調度資源,以及如何確保正式環境 Confidential Space 工作負載的高可用性,請參閱「代管執行個體群組」。