证明断言


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

下表详细介绍了构建证明政策的可用断言。它们可以验证 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 映像没有设置支持特性。

有三种支持特性:

  • LATEST:这是最新版本的映像,受支持。LATEST 映像同时也是 STABLEUSABLE
  • STABLE:此版本的映像受支持,并且我们会监控其漏洞情况。STABLE 映像同时也是 USABLE
  • USABLE:仅包含此属性的映像已不再受支持,并且我们不会再监控其漏洞情况。使用时需自行承担风险。
示例

以下代码用于验证是否使用了稳定版本的 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

与以下各项互动

字符串

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

示例

以下代码用于验证工作负载运算符是否替换了 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)
示例
assertion.swname == 'CONFIDENTIAL_SPACE' && ['ECDSA_P256_SHA256:PUBLIC_KEY_FINGERPRINT'].exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)) && 'serviceaccount.iam.gserviceaccount.com' in assertion.google_service_accounts"

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.iam.gserviceaccount.com in assertion.google_service_accounts
assertion.hwmodel 字符串

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

示例
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"