工作负载操作员可以将选项传递给 Confidential Space 工作负载虚拟机实例,以确定其在运行之前的行为。虽然有些标志具有不会更改的必需值,但您仍需做出以下选择:
虚拟机实例是基于生产版还是调试版 Confidential Space 映像。
是否使用 AMD SEV、Intel TDX 或 Intel TDX 与 NVIDIA 机密计算(预览版)来帮助确保工作负载数据的私密性。
需要传递哪些 VM 元数据变量,包括要运行哪个工作负载容器映像、是否记录到 Cloud Logging 以及要设置哪些环境变量等详细信息。
要将哪个服务账号关联到虚拟机以运行工作负载,以及该服务账号需要哪些权限才能访问其他项目中的保密数据并将结果写入某个位置。
虚拟机实例应在哪个可用区中运行。
以下示例展示了如何创建机密虚拟机并运行名为 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
:新虚拟机实例的名称。CONFIDENTIAL_COMPUTING_TECHNOLOGY
:要使用的机密计算技术的类型。请选择以下某个值:SEV
TDX
MACHINE_TYPE_NAME
:虚拟机的机器类型,例如n2d-standard-2
。机密虚拟机实例的有效机器类型取决于您选择的机密计算技术,即 AMD SEV 或 Intel TDX。请参阅机器类型、CPU 和可用区。MAINTENANCE_POLICY
:对于使用 SEV 的 N2D 机器类型,请将此值设置为MIGRATE
以支持实时迁移。对于所有其他机器类型,请将此值设置为TERMINATE
,因为它们不支持实时迁移。IMAGE_FAMILY_NAME
:Confidential Space 映像的系列。 请按以下方式之一操作:confidential-space
适用于生产工作负载confidential-space-debug
用于调试工作负载
WORKLOAD_AUTHOR_PROJECT
:托管工作负载容器所存储的 Artifact Registry 制品库的项目的 ID。REPOSITORY_NAME
:存储工作负载容器的 Artifact Registry 制品库名称。WORKLOAD_CONTAINER_NAME
:工作负载容器的名称。WORKLOAD_SERVICE_ACCOUNT_NAME
:运行工作负载的服务账号的名称。WORKLOAD_OPERATOR_PROJECT_ID
:运行工作负载的项目的 ID。ZONE_NAME
:虚拟机实例运行所在的可用区,例如us-west1-b
。Confidential Space 需要以下服务,这些服务可在特定位置中使用:机密虚拟机,基于使用中的机密计算技术
PROJECT_ID
:可选。要在其中创建虚拟机实例的项目的 ID。
基于 GPU 的工作负载
准备工作
Confidential Space 仅支持在 H100 GPU 上使用 NVIDIA 机密计算(预览版)。
为确保您有足够的 GPU 配额可以用于请求的资源,请检查您的 GPU 配额。对于具有 GPU 的保密虚拟机实例,请申请抢占式 GPU 配额以使用这些资源。申请 GPU 配额时,您必须为要在每个区域中创建的 GPU 型号申请一个配额,并根据所有区域中所有类型的 GPU 总数另外申请一个全球配额 (
GPUs (all regions)
)。如需了解配额用量,请参阅 GPU 虚拟机和抢占式分配配额。
查看在 MIG 中创建调整大小请求时的限制。
如需安装 NVIDIA 保密计算(预览版)所需的驱动程序,您必须传递值为
true
的 元数据变量tee-install-gpu-driver
。对于 NVIDIA 驱动程序和 CUDA 工具包,建议使用空间为 30 GB 或更高的虚拟机启动磁盘。
部署基于 GPU 的工作负载
如需部署基于 GPU 的工作负载,您必须使用 Spot 或灵活启动(预览版)预配模型创建机密虚拟机实例。
Spot
如需使用 Spot 预配模型,请创建加速器优化型虚拟机实例。
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
:新虚拟机实例的名称。IMAGE_FAMILY_NAME
:Confidential Space 映像的系列。 请按以下方式之一操作: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
:可选。要在其中创建虚拟机实例的项目的 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
:新虚拟机实例模板的名称。IMAGE_FAMILY_NAME
:Confidential Space 映像的系列。 请按以下方式之一操作: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
:您希望所请求的虚拟机实例运行的时长。您必须将该值格式化为天、小时、分钟或秒数,并分别添加对应的后缀d
、h
、m
或s
。例如,指定30m
表示 30 分钟,或指定1d2h3m4s
表示 1 天 2 小时 3 分钟 4 秒。该值必须介于 10 分钟到 7 天之间。PROJECT_ID
:可选。要在其中创建虚拟机实例的项目的 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 虚拟机的实例模板的名称。ZONE_NAME
:支持 NVIDIA 机密计算(预览版)的可用区之一。
在 MIG 中,创建调整大小请求。指定所需的 GPU 虚拟机实例数量以及运行这些虚拟机实例的时长。
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 虚拟机实例的实例模板的名称。ZONE_NAME
:支持 NVIDIA 机密计算(预览版)的可用区之一。RESIZE_REQUEST_NAME
:调整大小请求的名称。COUNT
:要在实例组中一次性添加的虚拟机实例数。
您创建的调整大小请求会保持
ACCEPTED
状态,直到 MIG 创建了所有请求的 GPU 虚拟机实例。在实例组中创建所有 GPU 虚拟机实例后,请求的状态会更改为SUCCEEDED
。当有足够的资源可用于调整大小请求时,系统会将虚拟机实例添加到 MIG 并启动这些实例以运行您的工作负载。如需列出 MIG 中存在的实例,请运行以下命令:
gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \ --zone=ZONE_NAME \ --project=PROJECT_ID
请提供以下值:
INSTANCE_GROUP_NAME
:MIG 的名称。ZONE_NAME
:要从中获取虚拟机实例列表的支持的可用区。PROJECT_ID
:可选。要从中获取虚拟机实例列表的项目的 ID。
关联的服务账号
必须将服务账号附加到工作负载的机密虚拟机,才能运行工作负载。服务账号必须按以下方式设置:
具有以下角色:
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
角色才能模拟服务账号。这样,他们就可以将该磁盘附加到工作负载虚拟机实例,以便运行工作负载。
元数据变量
您可以在创建 Confidential Space 工作负载虚拟机时,通过将变量传递到 --metadata
选项来更改其行为。
如需传入多个变量,请首先在 --metadata
值前面添加 ^~^
来设置分隔符。这会将分隔符设置为 ~
,因为变量值中使用了 ,
。
例如:
metadata="^~^tee-restart-policy=Always~tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest"
下表详细介绍了您可以为工作负载虚拟机设置的元数据变量。
元数据键 | 类型 | 说明和值 |
---|---|---|
互动对象:
|
字符串 |
必需。指向工作负载容器的位置。 示例
|
互动对象:
|
JSON 字符串数组 |
向工作负载容器添加额外的 Linux 功能。 示例
|
互动对象:
|
布尔值 |
默认为 示例
|
互动对象:
|
JSON 字符串数组 |
替换工作负载容器的 示例
|
互动对象:
|
已定义的字符串 |
将 有效值包括:
串行控制台中的日志量过大可能会影响工作负载性能。 示例
|
|
整数 |
设置 示例
|
互动对象:
|
字符串 |
在工作负载容器中设置环境变量。 工作负载作者还必须将环境变量名称添加到
示例
|
互动对象:
|
字符串 |
工作负载操作员可以模拟的服务账号列表。工作负载操作员必须能够模拟服务账号。 可以列出多个服务账号(以英文逗号分隔)。 示例
|
互动对象:
|
布尔值 |
是否安装 NVIDIA 的机密计算 GPU 驱动程序。 需要支持 NVIDIA 机密计算(预览版)的机器类型。 示例
|
互动对象:
|
布尔值 |
默认为 示例
|
互动对象:
|
字符串 |
以英文分号分隔的装载定义列表。挂载定义由以英文逗号分隔的键值对列表组成,需要 示例
|
互动对象:
|
已定义的字符串 |
工作负载停止时容器启动器的重启政策 有效值包括:
此变量仅受生产 Confidential Space 映像支持。 示例
|
互动对象:
|
字符串 |
一个以英文逗号分隔的容器代码库列表,用于存储由 Sigstore Cosign 生成的签名。 示例
|
扩缩
如需了解如何伸缩生产 Confidential Space 工作负载并实现高可用性,请参阅托管实例组。