Aserciones de atestación


Para obtener más información sobre cómo usar aserciones de certificación, consulta Crear una política de certificación.

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

Afirmaciones sobre imágenes

Aserción Tipo Descripción

assertion.dbgstat

Interactúa con:

Cadena definida

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

Los valores válidos son:

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

El siguiente código verifica que se está usando la versión de depuración de la imagen de espacio confidencial:

assertion.dbgstat == "enable"

El siguiente código 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 Matriz de cadenas

Verifica que la versión de seguridad del TEE sea una imagen de Confidential Space de producción. Las imágenes de espacio confidencial de depuración no tienen ningún atributo de compatibilidad definido.

Hay tres atributos de asistencia:

  • LATEST: esta es la versión más reciente de la imagen y se admite. La imagen LATEST también es STABLE y USABLE.
  • STABLE: esta versión de la imagen es compatible y se monitoriza para detectar vulnerabilidades. Una imagen STABLE también es USABLE.
  • USABLE: Las imágenes que solo tienen este atributo ya no se admiten y no se monitorizan para detectar vulnerabilidades. Úsalo bajo tu propia responsabilidad.
  • EXPERIMENTAL: una imagen que solo tenga este atributo utiliza las funciones de vista previa. Solo se puede usar con fines de prueba y nunca en producción. Una imagen EXPERIMENTAL nunca tiene los atributos LATEST, STABLE ni USABLE.
Ejemplo

El siguiente código verifica que se esté usando una versión estable de la imagen de espacio confidencial:

"STABLE" in assertion.submods.confidential_space.support_attributes
assertion.swname Cadena definida

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 Matriz de cadenas

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

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

Aserciones de contenedor

Aserción Tipo Descripción

assertion.submods.container.cmd_override

Interactúa con:

Matriz de cadenas

Verifica los comandos CMD y los parámetros utilizados en la imagen de la carga de trabajo.

Ejemplos

El siguiente código verifica que el CMD de la imagen de la carga de trabajo no se haya sobrescrito:

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

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

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

assertion.submods.container.env

Interactúa con:

Objeto JSON

Verifica que las variables de entorno y sus valores se hayan transmitido explícitamente al contenedor.

Ejemplo

El siguiente código verifica que la variable de entorno example-env-1 esté definida como value-1 y example-env-2 esté definida 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:

Cadena

Verifica si el operador de carga de trabajo ha sobrescrito las variables de entorno en el contenedor.

Ejemplos

El siguiente código verifica que el operador de carga de trabajo no haya sustituido la variable de entorno example:

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

El siguiente código verifica que el operador de la carga de trabajo no haya sobrescrito ninguna variable de entorno:

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

Verifica el digest de la imagen del contenedor de la carga de trabajo. Al especificar esta condición, varias partes pueden acordar una carga de trabajo autorizada que tenga permiso para acceder a sus datos.

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

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:

Cadena

Verifica la ubicación del contenedor de carga de trabajo que se ejecuta en la parte superior de 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:

Objeto JSON

Verifica que la imagen tenga una firma determinada o que esté firmada por una clave pública y un algoritmo de firma. Si especifica esta condición, varias partes podrán acordar una carga de trabajo autorizada que tenga permiso para acceder a sus datos.

La aserción puede incluir los siguientes elementos:

  • key_id: 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: firma sobre una carga útil asociada al contenedor firmado y que sigue el formato de firma simple.
  • signature_algorithm: el algoritmo usado para firmar la clave. Uno de los siguientes:

    • RSASSA_PSS_SHA256 (RSASSA-PSS con una digestión SHA-256)
    • RSASSA_PKCS1V15_SHA256 (RSASSA-PKCS1 v1_5 con una digestión SHA-256)
    • ECDSA_P256_SHA256 (ECDSA de curva P-256 con una síntesis SHA-256)
Ejemplo
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

Interactúa con:

Cadena definida

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

Los valores válidos son:

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

Aserciones de VM

Aserción Tipo Descripción

assertion.google_service_accounts

Interactúa con:

Matriz de cadenas

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

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

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

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

assertion.submods.confidential_space.monitoring_enabled

Interactúa con:

Booleano

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

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

Verifica el ID de la instancia de VM.

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

Verifica el nombre de la instancia de VM.

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

Verifica que la VM esté ejecutando un Google Cloud proyecto con el ID de proyecto especificado.

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

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

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

assertion.submods.gce.zone

Interactúa con:

  • Operador de carga de trabajo: el --zone valor.
Cadena

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

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

assertion.submods.nvidia_gpu.cc_mode

Interactúa con:

Cadena definida

Verifica el estado del controlador de computación confidencial de NVIDIA. Los valores válidos son:

  • OFF: ninguna de las funciones de Confidential Computing de NVIDIA está activa.
  • ON: el hardware, el firmware y el software de NVIDIA H100 han activado por completo las funciones de computación confidencial.
  • DEVTOOLS: la GPU está en un modo de computación confidencial 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"