ワークロードをデプロイする

ワークロード オペレーターは、Confidential Space ワークロード VM インスタンスにオプションを渡して、実行前に動作を判断できます。一部のフラグには変更されない必須の値がありますが、次の選択を行う必要があります。

  • VM インスタンスを本番環境またはデバッグの Confidential Space イメージのどちらをベースにするか。

  • ワークロード データのプライバシーを保護するために、AMD SEV、Intel TDX、または NVIDIA Confidential Computing を使用した Intel TDX のいずれを使用するか。

  • 渡す必要がある 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: 使用する Confidential Computing テクノロジーのタイプ。次のいずれかの値を選択します。

    • SEV

    • TDX

  • MACHINE_TYPE_NAME: VM のマシンタイプ(例: n2d-standard-2)。Confidential VM インスタンスに有効なマシンタイプは、選択した Confidential Computing テクノロジー(AMD SEV または Intel TDX)によって決まります。マシンタイプをご覧ください。

  • MAINTENANCE_POLICY: SEV を使用する N2D マシンタイプの場合、ライブ マイグレーションをサポートするには、これを MIGRATE に設定します。他のすべてのマシンタイプはライブ マイグレーションをサポートしていないため、この値を TERMINATE に設定します。

  • IMAGE_FAMILY_NAME: Confidential Space イメージのファミリー。次のいずれかを選択します。

    • 本番環境ワークロード用の confidential-space

    • confidential-space-debug(デバッグ ワークロード用)

  • 追加のメタデータ変数。使用する構成証明サービスなど、VM の動作を変更します。

  • WORKLOAD_AUTHOR_PROJECT: ワークロード コンテナが保存されている Artifact Registry リポジトリをホストするプロジェクトの ID。

  • 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 Confidential Computing のみをサポートしています。

  • リクエストするリソースに十分な GPU 割り当てがあることを確認するには、GPU 割り当てを確認します。GPU を搭載した Confidential VM インスタンスの場合、リソースを使用するにはプリエンプティブル GPU 割り当てをリクエストします。GPU 割り当てをリクエストするときは、各リージョンで作成する GPU モデルに対する割り当てに加え、すべてのリージョンにおけるすべてのタイプの GPU の合計数に対するグローバル割り当て(GPUs (all regions))もリクエストする必要があります。

  • 割り当ての使用量については、GPU VM とプリエンプティブルの数量に基づく割り当てをご覧ください。

  • MIG でサイズ変更リクエストを作成する際の制限事項を確認します。

  • NVIDIA Confidential Computing に必要なドライバをインストールするには、メタデータ変数 tee-install-gpu-driver に値 true を渡す必要があります。

  • NVIDIA ドライバと CUDA ツールキットの場合、30 GB 以上の容量を持つ VM ブートディスクをおすすめします。

  • CUDA アプリケーションを使用するには、使用しているコンテナ イメージで NVIDIA CUDA-X ライブラリが利用可能である必要があります。ライブラリを追加するには、次のいずれかを行います。

    • NVIDIA CUDA-X ライブラリがプリインストールされたコンテナ イメージを使用します。たとえば、Google の Deep Learning Containers を使用して、プリインストールされたデータ サイエンス フレームワーク、NVIDIA CUDA-X ライブラリ、追加のツールを使用できます。また、NVIDIA CUDA-X ライブラリのみに NVIDIA の CUDA コンテナ イメージを使用することもできます。

    • 独自のコンテナ イメージをビルドして使用します。LD_LIBRARY_PATH 環境変数を /usr/local/nvidia/lib64 に設定します。これには、NVIDIA CUDA-X ライブラリとデバイス ドライバが含まれている必要があります。

既知の問題

  • 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 イメージの既知の問題です。この問題を回避するには、Confidential VM を再起動します。

GPU ベースのワークロードをデプロイする

GPU ベースのワークロードをデプロイするには、spot または flex-start プロビジョニング モデルを使用して Confidential 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 イメージのファミリー。次のいずれかを選択します。

    • 本番環境ワークロード用の 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 Confidential Computing をサポートするゾーンのいずれか。

  • PROJECT_ID: 省略可。VM インスタンスを作成するプロジェクトの ID。

Flex Start

Flex Start プロビジョニング モデルを使用するには、インスタンス テンプレートを作成してから、マネージド インスタンス グループ(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 を続ける必要があります。たとえば、30 分の場合は 30m と指定し、1 日と 2 時間 3 分 4 秒の場合は 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 Confidential Computing をサポートするゾーンのいずれか。

    • RESIZE_REQUEST_NAME: サイズ変更リクエストの名前。

    • COUNT: グループに一度にすべて追加する VM インスタンスの数。

    作成するサイズ変更リクエストは、MIG がリクエストされたすべての GPU VM インスタンスを作成するまで ACCEPTED 状態で保持されます。グループ内にすべての 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 バケットなど)への書き込みアクセス権。データ コラボレーターには、このロケーションに対する読み取りアクセス権が必要です。

また、データ コラボレーターとワークロード オペレーターは、次のものを設定する必要があります。

  • データ コラボレーターが直接リソース アクセスではなくサービス アカウントの権限借用を使用している場合は、サービス アカウントを属性条件として Workload Identity プール プロバイダに追加する必要があります。

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • ワークロード オペレーターには、サービス アカウントの権限を借用するために roles/iam.serviceAccountUser ロールが必要です。これにより、ワークロード VM インスタンスにアタッチしてワークロードを実行できます。

メタデータ変数

Confidential Space ワークロード VM の動作を変更するには、VM の作成時に --metadata オプションに変数を渡します。

複数の変数を渡すには、まず --metadata 値の前に ^~^ を付けて区切り文字を設定します。これにより、, が変数値で使用されるため、区切り文字が ~ に設定されます。

次に例を示します。

metadata="^~^tee-restart-policy=Always~tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest"

次の表に、ワークロード VM に設定できるメタデータ変数を示します。

メタデータキー Type 説明と値

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 は、オプションで NVIDIA H100 GPU を搭載した Intel TDX VM インスタンスをサポートしています。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 は、オプションで NVIDIA H100 GPU を搭載した Intel TDX VM インスタンスをサポートしています。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

操作対象:

  • ワークロード作成者: log_redirect 起動ポリシー。
列挙

confidential-space-launcher フィールドを使用して、ワークロード コンテナから Cloud Logging またはシリアル コンソールに STDOUT と STDERR を出力します。

有効な値は次のとおりです。

  • false:(デフォルト)ロギングは行われません。
  • true: シリアル コンソールと Cloud Logging に出力します。
  • cloud_logging: Cloud Logging にのみ出力します。
  • serial: シリアル コンソールにのみ出力します。

シリアル コンソールのログ量が多いと、ワークロードのパフォーマンスに影響する可能性があります。

例
tee-container-log-redirect=true

tee-dev-shm-size-kb

Integer

/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 の Confidential Computing GPU ドライバをインストールするかどうか。NVIDIA Confidential Computing をサポートするマシンタイプが必要です。

例
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

操作対象:

文字列

セミコロンで区切られたマウント定義のリスト。マウント定義は、Key-Value ペアのカンマ区切りのリストで構成され、type、source、destination が必要です。destination は絶対パスにする必要があります。type/source は tmpfs にする必要があります。

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

tee-nonroot-container

操作対象:

ブール値

デフォルトは false です。true に設定すると、コンテナはホスト VM 上の root ユーザー以外のユーザーとして、隔離されたユーザー名前空間で実行されます。ワークロードの作成者が tee.launch_policy.nonroot_container を nonrootonly に設定している場合、この変数は true に設定する必要があります。

例
tee-nonroot-container=true

tee-restart-policy

操作対象:

列挙

ワークロードが停止したときのコンテナ ランチャーの再起動ポリシー。

有効な値は次のとおりです。

  • 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

スケーリング

本番環境の Confidential Space ワークロードのスケーリングと高可用性については、マネージド インスタンス グループをご覧ください。