证明断言

如需详细了解如何使用证明断言,请参阅创建证明政策。

下表详细介绍了构建证明政策的可用断言。政策可以验证 Confidential Space 映像、工作负载容器和虚拟机实例做出的断言。

图片断言

断言 类型 说明

assertion.dbgstat

互动对象:

枚举

验证 Confidential Space 映像是调试版本还是生产版本。

有效值如下:

  • enable:检查是否使用了调试映像。
  • disabled-since-boot:检查是否正在使用正式版映像。
示例

以下代码验证是否使用了 Confidential Space 映像的调试版本:

assertion.dbgstat == "enable"

以下代码验证是否使用了生产版本的 Confidential Space 映像:

assertion.dbgstat == "disabled-since-boot"
assertion.submods.confidential_space.support_attributes 字符串数组

验证 TEE 的安全版本是否为生产 Confidential Space 映像。调试 Confidential Space 映像没有设置支持特性。

下表介绍了生产 Confidential Space 映像上的支持特性。

支持属性 说明

LATEST

LATEST 图片还具有以下支持属性:

  • STABLE
  • USABLE

图片有效期:大约一个月。之后,系统会移除 LATEST 支持属性。

这是最新版本的 Confidential Space 映像,受支持,并且我们会监控其漏洞情况。

对于长时间运行的工作负载,我们建议您不要在证明政策中指定 LATEST。这是因为 Confidential Space 映像可能会在工作负载运行时更新,导致您使用的 Confidential Space 映像不再是 LATEST,并导致工作负载在下次刷新 Confidential Space 默认令牌时无法通过证明。

STABLE

STABLE 图片还具有以下支持属性:

  • USABLE

图片有效期:大约 6 个月。自 2027 年 4 月 1 日起,图片生命周期到期后,系统会移除 STABLE 支持属性。

具有 STABLE 属性的映像在 6 个月内受支持,并且我们会监控其漏洞情况。我们建议根据 STABLE 属性编写证明政策。

在极少数情况下,STABLE 属性可能会在正常的六个月售后支持期限内被移除,例如在发现严重漏洞时。

USABLE

仅具有 USABLE 属性的图片仍可使用,但被视为已弃用。不支持已弃用的图片,且图片已超过 6 个月。 使用这些功能时,您必须自担风险。

USABLE 图片具有 deprecated.deprecated 属性。其值是预计图片被弃用的时间戳。您可以使用 gcloud compute images describe 命令或 images.get REST 方法查看映像的属性。例如:

gcloud compute images describe confidential-space-240800 \
    --format=json \
    --project=confidential-space-images
EXPERIMENTAL

仅具有此属性的图片会使用预览功能。EXPERIMENTAL 映像仅用于测试,绝不应在生产环境中使用。

EXPERIMENTAL 图片永远不会具有 LATEST、STABLE 或 USABLE 属性。

建议您及时更新 Confidential Space 映像。如需了解如何更新 Confidential Space 映像,请参阅 更新 Confidential Space 映像。

示例

以下代码验证是否使用了稳定版本的 Confidential Space 映像:

"STABLE" in assertion.submods.confidential_space.support_attributes
assertion.swname 枚举

验证在证明实体上运行的软件。值始终为 CONFIDENTIAL_SPACE。

示例
assertion.swname == "CONFIDENTIAL_SPACE"
assertion.swversion 字符串数组

验证 Confidential Space 映像的软件版本。我们建议使用 assertion.submods.confidential_space.support_attributes 来定位映像的最新版本。

示例
int(assertion.swversion[0]) == 230103

容器断言

断言 类型 说明

assertion.submods.container.cmd_override

互动对象:

字符串数组

验证工作负载映像中使用的 CMD 命令和参数。

示例

以下代码用于验证工作负载映像的 CMD 是否已被覆盖:

size(assertion.submods.container.cmd_override) == 0

以下代码验证了 program 是 CMD 覆盖中的唯一内容:

assertion.submods.container.cmd_override == ['program']

assertion.submods.container.env

互动对象:

JSON 对象

验证环境变量及其值是否已明确传递给容器。

示例

以下代码验证环境变量 example-env-1 是否设置为 value-1,以及 example-env-2 是否设置为 value-2。

assertion.submods.container.env == {"example-env-1": "value-1", "example-env-2": "value-2"}

assertion.submods.container.env_override

互动对象:

字符串

验证工作负载操作员是否覆盖了容器中的环境变量。

示例

以下代码用于验证工作负载运算符是否替换了 example 环境变量:

!has(assertion.submods.container.env_override.example)

以下代码用于验证工作负载运算符是否未覆盖任何环境变量:

size(assertion.submods.container.env_override) == 0
assertion.submods.container.image_digest 字符串

验证工作负载容器的映像摘要。指定此条件可让多方就允许访问其数据的授权工作负载达成共识。

示例
assertion.submods.container.image_digest == "sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b"
assertion.submods.container.image_id 字符串

验证工作负载容器的映像 ID。

示例
assertion.submods.container.image_id == "sha256:652a44b0e911271ba07cf2915cd700fdfa50abd62a98f87a57fdebc59843d93f"

assertion.submods.container.image_reference

互动对象:

字符串

验证运行在 Confidential Space 映像之上的工作负载容器的位置。

示例
assertion.submods.container.image_reference == "us-docker.pkg.dev/PROJECT_ID/WORKLOAD_CONTAINER:latest"

assertion.submods.container.image_signatures

互动对象:

JSON 对象

验证映像是否具有特定签名或是否由公钥和签名算法签名。指定此条件可让多方就允许访问其数据的授权工作负载达成共识。

断言可以包含以下元素:

  • key_id:公钥的十六进制指纹。如需获取指纹,您可以运行以下命令:

    openssl pkey -pubin -in public_key.pem -outform DER | openssl sha256

    其中,public_key.pem 是您的 PEM 格式的公钥。

  • signature:与签名容器关联且遵循 简单签名格式的载荷的签名。
  • signature_algorithm:用于对密钥进行签名的算法。以下项之一:

    • RSASSA_PSS_SHA256(采用 SHA-256 摘要的 RSASSA-PSS)
    • RSASSA_PKCS1V15_SHA256(采用 SHA-256 摘要的 RSASSA-PKCS1 v1_5)
    • ECDSA_P256_SHA256(具有 SHA-256 摘要的 P-256 曲线上的 ECDSA)
示例
['ECDSA_P256_SHA256:PUBLIC_KEY_FINGERPRINT'].exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id))

assertion.submods.container.restart_policy

互动对象:

枚举

验证工作负载停止时容器启动器的重启政策。

有效值如下:

  • Never(默认)
  • Always
  • OnFailure
示例
assertion.submods.container.restart_policy == "Never"

虚拟机断言

断言 类型 说明

assertion.google_service_accounts

互动对象:

字符串数组

验证指定的服务账号是否已连接到运行工作负载的虚拟机,或者是否已使用虚拟机元数据中的 tee-impersonate-service-accounts 列出。

示例
workload-service-account@my-project. in assertion.google_service_accounts
assertion.hwmodel 字符串

验证底层机密计算技术。支持的平台如下:

  • GCP_AMD_SEV
  • INTEL_TDX
示例
assertion.hwmodel == "GCP_AMD_SEV"

assertion.submods.confidential_space.monitoring_enabled

互动对象:

布尔值

验证证明实体上的监控状态。

示例
assertion.submods.confidential_space.monitoring_enabled.memory == true
assertion.submods.gce.instance_id 字符串

验证虚拟机实例 ID。

示例
assertion.submods.gce.instance_id == "0000000000000000000"
assertion.submods.gce.instance_name 字符串

验证虚拟机实例的名称。

示例
assertion.submods.gce.instance_name == "workload-vm"
assertion.submods.gce.project_id 字符串

验证虚拟机是否正在运行具有指定项目 ID 的 Google Cloud 项目。

示例
assertion.submods.gce.project_id == "project-id"
assertion.submods.gce.project_number 字符串

验证虚拟机是否在具有指定项目编号的 Google Cloud 项目中运行。

示例
assertion.submods.gce.project_number == "00000000000"

assertion.submods.gce.zone

互动对象:

  • 工作负载运算符: --zone 值。
字符串

验证虚拟机是否正在指定可用区中运行。

示例
assertion.submods.gce.zone == "us-central1-a"

assertion.submods.nvidia_gpu.cc_feature

互动对象:

枚举

验证 NVIDIA GPU 支持的机密计算功能。Confidential Space 中仅支持单 GPU 直通 (SPT) 模式,因此该值始终为 SPT。

如需详细了解 NVIDIA 机密计算支持,请参阅 NVIDIA 可信计算解决方案 (PDF)。

示例
assertion.submods.nvidia_gpu.cc_feature == "SPT"

assertion.submods.nvidia_gpu.cc_mode

互动对象:

枚举

验证 NVIDIA 机密计算驱动程序的状态。 有效值如下:

  • OFF:NVIDIA 机密计算功能均未处于有效状态。
  • ON:NVIDIA H100 硬件、固件和软件已完全激活机密计算功能。
  • DEVTOOLS:GPU 处于部分机密计算模式,该模式与 ON 模式的工作流程相匹配,但会停用安全保护功能。
示例
assertion.submods.nvidia_gpu.cc_mode == "ON"

assertion.submods.nvidia_gpu.gpus

互动对象:

对象数组

验证每个经过证明的 NVIDIA GPU 的声明。Confidential Space 仅支持单个 GPU 声明。

gpus 对象类似于以下内容:

{
  "hwmodel": "GCP_NVIDIA_H100",
  "ueid": "490457405999046854973671575630853621547794591064",
  "l4_serial_number": "1216669666319372030078",
  "driver_version": "570.00",
  "vbios_version": "96.00.9F.00.01"
}
示例

以下代码用于验证第一个 GPU 硬件模型是否为在 Google Cloud上运行的 NVIDIA H100:

assertion.submods.nvidia_gpu.gpus[0].hwmodel == "GCP_NVIDIA_H100"

以下代码用于验证证明声明是否包含与 GPU 相关的声明:

has(assertion.submods.nvidia_gpu.gpus)