Aserciones de certificación

Para obtener más información sobre el uso de aserciones de certificación, consulta Crea una política de certificación.

Las aserciones disponibles para construir una política de certificación se detallan en la siguiente tabla. Las políticas pueden validar las aserciones que realizan la imagen de Confidential Space, el contenedor de la carga de trabajo y la instancia de VM.

Aserciones de imágenes

Aserción Tipo Descripción

assertion.dbgstat

Interactúa con lo siguiente:

Enumeration

Verifica que la imagen de Confidential Space sea la versión de depuración o de producción.

Los valores válidos son los siguientes:

  • enable: Verifica que se esté usando la imagen de depuración.
  • disabled-since-boot: Verifica que se esté usando la imagen de producción.
Ejemplos

En el siguiente código, se verifica que se esté usando la versión de depuración de la imagen de Confidential Space:

assertion.dbgstat == "enable"

En el siguiente código, se verifica que se esté usando la versión de producción de la imagen de Confidential Space:

assertion.dbgstat == "disabled-since-boot"
assertion.submods.confidential_space.support_attributes Arreglo de strings

Verifica que la versión de seguridad del TEE sea una imagen de Confidential Space de producción. Las imágenes de Confidential Space de depuración no tienen un atributo de asistencia establecido.

En la siguiente tabla, se describen los atributos de asistencia que se encuentran en las imágenes de Confidential Space de producción.

Atributo de asistencia Descripción

LATEST

Las imágenes de LATEST también tienen los siguientes atributos de asistencia:

  • STABLE
  • USABLE

Vida útil de la imagen: Aproximadamente un mes. Después de esto, se quita el atributo de asistencia de LATEST.

Esta es la versión más reciente de la imagen de Confidential Space, y se supervisa y admite para detectar vulnerabilidades.

Para las cargas de trabajo de larga duración, te recomendamos que no especifiques LATEST como parte de tu política de certificación. Esto se debe a que la imagen de Confidential Space podría actualizarse mientras se ejecuta tu carga de trabajo, lo que hace que la imagen de Confidential Space que usas ya no sea LATEST y que tu carga de trabajo no apruebe la certificación cuando se actualice el token predeterminado de Confidential Space.

STABLE

Las imágenes de STABLE también tienen los siguientes atributos de asistencia:

  • USABLE

Vida útil de la imagen: Aproximadamente seis meses. A partir del 1 de abril de 2027, el atributo de asistencia STABLE se quitará después de que venza el ciclo de vida de la imagen.

Las imágenes con el atributo STABLE son compatibles y se supervisan para detectar vulnerabilidades durante un período de seis meses. Te recomendamos que escribas una política de certificación basada en el atributo STABLE.

En casos excepcionales, el atributo STABLE se puede quitar durante el período de asistencia normal de seis meses, por ejemplo, cuando se descubren vulnerabilidades críticas.

USABLE

Las imágenes que solo tienen el atributo USABLE siguen estando disponibles para su uso, pero se consideran obsoletas. Las imágenes obsoletas no son compatibles y tienen más de seis meses de antigüedad. Úsalas bajo tu propia responsabilidad.

Las imágenes de USABLE tienen una propiedad deprecated.deprecated. Su valor es la marca de tiempo de cuándo se espera que la imagen quede obsoleta. Las propiedades de una imagen se pueden ver con el comando gcloud compute images describe o con el método de REST images.get. Por ejemplo:

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

Las imágenes que solo tienen este atributo usan funciones de versión preliminar. Las imágenes de EXPERIMENTAL solo se deben usar con fines de prueba y nunca en producción.

Una imagen EXPERIMENTAL nunca tiene los atributos LATEST, STABLE ni USABLE.

Te recomendamos que mantengas actualizada tu imagen de Confidential Space. Para obtener información sobre cómo actualizar tu imagen de Confidential Space, consulta Actualiza imágenes de Confidential Space.

Ejemplo

En el siguiente código, se verifica que se use una versión estable de la imagen de Confidential Space:

"STABLE" in assertion.submods.confidential_space.support_attributes
assertion.swname Enumeration

Verifica el software que se ejecuta en la entidad de certificación. El valor siempre es CONFIDENTIAL_SPACE.

Ejemplo
assertion.swname == "CONFIDENTIAL_SPACE"
assertion.swversion Arreglo de strings

Verifica la versión de software de la imagen de Confidential Space. Te recomendamos que uses assertion.submods.confidential_space.support_attributes en su lugar para orientar la versión más reciente de una imagen.

Ejemplo
int(assertion.swversion[0]) == 230103

Aserciones de contenedores

Aserción Tipo Descripción

assertion.submods.container.cmd_override

Interactúa con lo siguiente:

  • Autor de la carga de trabajo: Es la política de lanzamiento de allow_cmd_override.
  • Operador de carga de trabajo: Es la variable de metadatos tee-cmd.
Arreglo de strings

Verifica los comandos y parámetros de CMD que se usan en la imagen de la carga de trabajo.

Ejemplos

Con el siguiente código, se verifica que no se haya reemplazado el CMD de la imagen de la carga de trabajo:

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

El siguiente código verifica que program sea el único contenido en las anulaciones de CMD:

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

assertion.submods.container.env

Interactúa con lo siguiente:

Objeto JSON

Verifica que las variables de entorno y sus valores se hayan pasado de forma explícita al contenedor.

Ejemplo

En el siguiente código, se verifica que la variable de entorno example-env-1 esté configurada como value-1 y example-env-2 esté configurada como value-2.

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

assertion.submods.container.env_override

Interactúa con lo siguiente:

String

Verifica si el operador de la carga de trabajo reemplazó las variables de entorno en el contenedor.

Ejemplos

En el siguiente código, se verifica que el operador de la carga de trabajo no haya anulado la variable de entorno example:

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

Con el siguiente código, se verifica que el operador de la carga de trabajo no haya reemplazado ninguna variable de entorno:

size(assertion.submods.container.env_override) == 0
assertion.submods.container.image_digest String

Verifica el resumen de la imagen del contenedor de la carga de trabajo. Especificar esta condición permite que varias partes acuerden una carga de trabajo autorizada que pueda acceder a sus datos.

Ejemplo
assertion.submods.container.image_digest == "sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b"
assertion.submods.container.image_id String

Verifica el ID de la imagen del contenedor de la carga de trabajo.

Ejemplo
assertion.submods.container.image_id == "sha256:652a44b0e911271ba07cf2915cd700fdfa50abd62a98f87a57fdebc59843d93f"

assertion.submods.container.image_reference

Interactúa con lo siguiente:

String

Verifica la ubicación del contenedor de la carga de trabajo que se ejecuta sobre la imagen de Confidential Space.

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

assertion.submods.container.image_signatures

Interactúa con lo siguiente:

Objeto JSON

Verifica que la imagen tenga una firma determinada o que esté firmada por una clave pública y un algoritmo de firma. Especificar esta condición permite que varias partes acuerden una carga de trabajo autorizada que pueda acceder a sus datos.

La aserción puede incluir los siguientes elementos:

  • key_id: Es la huella digital hexadecimal de la clave pública. Para obtener la huella digital, puedes ejecutar el siguiente comando:

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

    Donde public_key.pem es tu clave pública en formato PEM.

  • signature: Es la firma de una carga útil que está asociada con el contenedor firmado y que sigue el formato de firma simple.
  • signature_algorithm: Es el algoritmo que se usa para firmar la clave. Uno de los siguientes:

    • RSASSA_PSS_SHA256 (RSASSA-PSS con un resumen SHA-256)
    • RSASSA_PKCS1V15_SHA256 (RSASSA-PKCS1 v1_5 con un resumen SHA-256)
    • ECDSA_P256_SHA256 (ECDSA en la curva P-256 con un resumen SHA-256)
Ejemplo
['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

Interactúa con lo siguiente:

Enumeration

Verifica la política de reinicio del selector de contenedores para cuando se detiene la carga de trabajo.

Los valores válidos son los siguientes:

  • Never (predeterminada)
  • Always
  • OnFailure
Ejemplo
assertion.submods.container.restart_policy == "Never"

Aserciones de VM

Aserción Tipo Descripción

assertion.google_service_accounts

Interactúa con lo siguiente:

Arreglo de strings

Verifica que una cuenta de servicio especificada esté conectada a la VM que ejecuta la carga de trabajo o que se haya incluido en la lista con tee-impersonate-service-accounts en los metadatos de VM.

Ejemplo
workload-service-account@my-project.iam.gserviceaccount.com in assertion.google_service_accounts
assertion.hwmodel String

Verifica la tecnología de Confidential Computing subyacente. Las plataformas compatibles son las siguientes:

  • GCP_AMD_SEV
  • INTEL_TDX
Ejemplo
assertion.hwmodel == "GCP_AMD_SEV"

assertion.submods.confidential_space.monitoring_enabled

Interactúa con lo siguiente:

Booleano

Verifica el estado de supervisión en la entidad de certificación.

Ejemplo
assertion.submods.confidential_space.monitoring_enabled.memory == true
assertion.submods.gce.instance_id String

Verifica el ID de la instancia de VM.

Ejemplo
assertion.submods.gce.instance_id == "0000000000000000000"
assertion.submods.gce.instance_name String

Verifica el nombre de la instancia de VM.

Ejemplo
assertion.submods.gce.instance_name == "workload-vm"
assertion.submods.gce.project_id String

Verifica que la VM ejecute un proyecto de Google Cloud con el ID del proyecto especificado.

Ejemplo
assertion.submods.gce.project_id == "project-id"
assertion.submods.gce.project_number String

Verifica que la VM se ejecute en un proyecto de Google Cloud con el número de proyecto especificado.

Ejemplo
assertion.submods.gce.project_number == "00000000000"

assertion.submods.gce.zone

Interactúa con lo siguiente:

  • Operador de carga de trabajo: Es el valor --zone.
String

Verifica que la VM se esté ejecutando en la zona especificada.

Ejemplo
assertion.submods.gce.zone == "us-central1-a"

assertion.submods.nvidia_gpu.cc_feature

Interactúa con lo siguiente:

Enumeration

Verifica las funciones de Confidential Computing que admite una GPU de NVIDIA. En Confidential Space, solo se admite el modo de transferencia de GPU única (SPT), por lo que el valor siempre es SPT.

Para obtener más información sobre la compatibilidad con Confidential Computing de NVIDIA, consulta Soluciones de Confidential Computing de NVIDIA (PDF).

Ejemplo
assertion.submods.nvidia_gpu.cc_feature == "SPT"

assertion.submods.nvidia_gpu.cc_mode

Interactúa con lo siguiente:

Enumeration

Verifica el estado del controlador de Confidential Computing de NVIDIA. Los valores válidos son los siguientes:

  • OFF: Ninguna de las funciones de Confidential Computing de NVIDIA está activa.
  • ON: El hardware, el firmware y el software de NVIDIA H100 activaron por completo las funciones de Confidential Computing.
  • DEVTOOLS: La GPU está en un modo de Confidential Computing parcial que coincide con los flujos de trabajo del modo ON, pero inhabilita las protecciones de seguridad.
Ejemplo
assertion.submods.nvidia_gpu.cc_mode == "ON"

assertion.submods.nvidia_gpu.gpus

Interactúa con lo siguiente:

Array de objetos

Verifica las reclamaciones de cada GPU de NVIDIA certificada. Confidential Space solo admite una reclamación de GPU.

Un objeto gpus es similar al siguiente:

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

El siguiente código verifica que el primer modelo de hardware de GPU sea una NVIDIA H100 que se ejecuta en Google Cloud:

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

En el siguiente código, se verifica que la reclamación de certificación tenga reclamaciones relacionadas con la GPU:

has(assertion.submods.nvidia_gpu.gpus)