Affermazioni di attestazione

Per scoprire di più sull'utilizzo delle asserzioni di attestazione, consulta Crea una policy di attestazione.

Le asserzioni disponibili per creare una policy di attestazione sono descritte nella tabella seguente. Le policy possono convalidare le asserzioni effettuate dall'immagine Confidential Space, dal container del workload e dall'istanza VM.

Asserzioni di immagini

Asserzione Tipo Descrizione

assertion.dbgstat

Interazione con:

Enumerazione

Verifica che l'immagine Confidential Space sia la versione di debug o di produzione.

I valori validi sono i seguenti:

  • enable: verifica che l'immagine di debug sia in uso.
  • disabled-since-boot: verifica che l'immagine di produzione sia in uso.
Esempi

Il seguente codice verifica che venga utilizzata la versione di debug dell'immagine Confidential Space:

assertion.dbgstat == "enable"

Il seguente codice verifica che venga utilizzata la versione di produzione dell'immagine Confidential Space:

assertion.dbgstat == "disabled-since-boot"
assertion.submods.confidential_space.support_attributes Array di stringhe

Verifica che la versione di sicurezza del TEE sia un'immagine Confidential Space di produzione. Le immagini Confidential Space di debug non hanno un attributo di supporto impostato.

La tabella seguente descrive gli attributi di supporto presenti nelle immagini Confidential Space di produzione.

Attributo di supporto Descrizione

LATEST

Le immagini LATEST hanno anche i seguenti attributi di supporto:

  • STABLE
  • USABLE

Durata dell'immagine: circa un mese. In seguito, l'attributo di supporto LATEST viene rimosso.

Questa è l'ultima versione dell'immagine Confidential Space ed è supportata e monitorata per rilevare eventuali vulnerabilità.

Per i workload a lunga esecuzione, ti consigliamo di non specificare LATEST come parte della policy di attestazione. Questo perché l'immagine Confidential Space potrebbe essere aggiornata mentre il workload è in esecuzione, rendendo l'immagine Confidential Space che stai utilizzando non più LATEST e causando l'attestazione del workload al successivo aggiornamento del token predefinito di Confidential Space.

STABLE

Le immagini STABLE hanno anche i seguenti attributi di supporto:

  • USABLE

Durata dell'immagine: circa sei mesi. A partire dal 1° aprile 2027, l'attributo di supporto STABLE viene rimosso dopo la scadenza della durata dell'immagine.

Le immagini con l'attributo STABLE sono supportate e monitorate per rilevare eventuali vulnerabilità per un periodo di sei mesi. Ti consigliamo di scrivere una policy di attestazione basata sull'attributo STABLE.

In rari casi, l'attributo STABLE può essere rimosso durante il normale periodo di assistenza di sei mesi, ad esempio quando vengono scoperte vulnerabilità critiche.

USABLE

Le immagini con solo l'attributo USABLE sono ancora disponibili per l'utilizzo, ma sono considerate deprecate. Le immagini deprecate non sono supportate e hanno più di sei mesi. Utilizzale a tuo rischio.

Le immagini USABLE hanno una proprietà deprecated.deprecated. Il suo valore è il timestamp di quando è prevista la deprecazione dell'immagine. Le proprietà di un'immagine possono essere visualizzate con il comando gcloud compute images describe o con il metodo REST images.get. Ad esempio:

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

Le immagini con solo questo attributo utilizzano le funzionalità di anteprima. Le immagini EXPERIMENTAL sono solo a scopo di test e non devono mai essere utilizzate in produzione.

Un'immagine EXPERIMENTAL non ha mai gli attributi LATEST, STABLE o USABLE.

Ti consigliamo di mantenere aggiornata l'immagine di Confidential Space. Per scoprire come aggiornare l'immagine di Confidential Space, consulta Aggiorna le immagini di Confidential Space.

Esempio

Il seguente codice verifica che venga utilizzata una versione stabile dell'immagine di Confidential Space:

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

Verifica il software in esecuzione sull'entità di attestazione. Il valore è sempre CONFIDENTIAL_SPACE.

Esempio
assertion.swname == "CONFIDENTIAL_SPACE"
assertion.swversion Array di stringhe

Verifica la versione software dell'immagine Confidential Space. Ti consigliamo di utilizzare assertion.submods.confidential_space.support_attributes per scegliere come target l'ultima versione di un'immagine.

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

Asserzioni del container

Asserzione Tipo Descrizione

assertion.submods.container.cmd_override

Interazione con:

Array di stringhe

Verifica i comandi e i parametri CMD utilizzati nell'immagine del workload.

Esempi

Il seguente codice verifica che il CMD dell'immagine del workload non sia stato sovrascritto:

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

Il seguente codice verifica che program sia l'unico contenuto negli override CMD:

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

assertion.submods.container.env

Interazione con:

Oggetto JSON

Verifica che le variabili di ambiente e i relativi valori siano stati passati esplicitamente al container.

Esempio

Il codice seguente verifica che la variabile di ambiente example-env-1 sia impostata su value-1 e che example-env-2 sia impostata su value-2.

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

assertion.submods.container.env_override

Interazione con:

Stringa

Verifica se l'operatore del workload ha sovrascritto le variabili di ambiente nel container.

Esempi

Il codice seguente verifica che l'operatore del workload non abbia eseguito l'override della variabile di ambiente example:

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

Il codice seguente verifica che l'operatore del workload non abbia sovrascritto alcuna variabile di ambiente:

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

Verifica il digest dell'immagine del container del workload. La specifica di questa condizione consente a più parti di concordare un workload autorizzato che può accedere ai loro dati.

Esempio
assertion.submods.container.image_digest == "sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b"
assertion.submods.container.image_id Stringa

Verifica l'ID immagine del container del workload.

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

assertion.submods.container.image_reference

Interazione con:

Stringa

Verifica la località del container del workload in esecuzione sull'immagine Confidential Space.

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

assertion.submods.container.image_signatures

Interazione con:

Oggetto JSON

Verifica che l'immagine abbia una determinata firma o sia firmata da una chiave pubblica e da un algoritmo di firma. La specifica di questa condizione consente a più parti di concordare un workload autorizzato che può accedere ai loro dati.

L'asserzione può includere i seguenti elementi:

  • key_id: la fingerprint esadecimale della chiave pubblica. Per ottenere la fingerprint, puoi eseguire questo comando:

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

    Dove public_key.pem è la tua chiave pubblica in formato PEM.

  • signature: la firma su un payload associato al container firmato e che segue il formato Simple Signing.
  • signature_algorithm: l'algoritmo utilizzato per firmare la chiave. Il valore sarà uno dei seguenti:

    • RSASSA_PSS_SHA256 (RSASSA-PSS con un digest SHA-256)
    • RSASSA_PKCS1V15_SHA256 (RSASSA-PKCS1 v1_5 con un digest SHA-256)
    • ECDSA_P256_SHA256 (ECDSA sulla curva P-256 con un digest SHA-256)
Esempio
['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

Interazione con:

Enumerazione

Verifica la policy di riavvio dell'utilità di avvio dei container per quando il workload si arresta.

I valori validi sono i seguenti:

  • Never (valore predefinito)
  • Always
  • OnFailure
Esempio
assertion.submods.container.restart_policy == "Never"

Asserzioni VM

Asserzione Tipo Descrizione

assertion.google_service_accounts

Interazione con:

Array di stringhe

Verifica che un account di servizio specificato sia connesso alla VM che esegue il workload o che sia stato elencato utilizzando tee-impersonate-service-accounts nei metadati della VM.

Esempio
workload-service-account@my-project. in assertion.google_service_accounts
assertion.hwmodel Stringa

Verifica la tecnologia di Confidential Computing sottostante. Le piattaforme supportate sono le seguenti:

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

assertion.submods.confidential_space.monitoring_enabled

Interazione con:

Booleano

Verifica lo stato del monitoraggio sull'entità di attestazione.

Esempio
assertion.submods.confidential_space.monitoring_enabled.memory == true
assertion.submods.gce.instance_id Stringa

Verifica l'ID istanza VM.

Esempio
assertion.submods.gce.instance_id == "0000000000000000000"
assertion.submods.gce.instance_name Stringa

Verifica il nome dell'istanza VM.

Esempio
assertion.submods.gce.instance_name == "workload-vm"
assertion.submods.gce.project_id Stringa

Verifica che la VM esegua un progetto Google Cloud con l'ID progetto specificato.

Esempio
assertion.submods.gce.project_id == "project-id"
assertion.submods.gce.project_number Stringa

Verifica che la VM sia in esecuzione in un progetto Google Cloud con il numero di progetto specificato.

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

assertion.submods.gce.zone

Interazione con:

  • Operatore workload: il valore --zone.
Stringa

Verifica che la VM sia in esecuzione nella zona specificata.

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

assertion.submods.nvidia_gpu.cc_feature

Interazione con:

Enumerazione

Verifica le funzionalità di Confidential Computing supportate da una GPU NVIDIA. In Confidential Space è supportata solo la modalità Single GPU Passthrough (SPT), pertanto il valore è sempre SPT.

Per ulteriori informazioni sul supporto di NVIDIA Confidential Computing, consulta NVIDIA Trusted Computing Solutions (PDF).

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

assertion.submods.nvidia_gpu.cc_mode

Interazione con:

Enumerazione

Verifica lo stato del driver Confidential Computing di NVIDIA. I valori validi sono i seguenti:

  • OFF: nessuna delle funzionalità di NVIDIA Confidential Computing è attiva.
  • ON: l'hardware, il firmware e il software NVIDIA H100 hanno attivato completamente le funzionalità di Confidential Computing.
  • DEVTOOLS: la GPU è in una modalità Confidential Computing parziale che corrisponde ai flussi di lavoro della modalità ON, ma disabilita le protezioni di sicurezza.
Esempio
assertion.submods.nvidia_gpu.cc_mode == "ON"

assertion.submods.nvidia_gpu.gpus

Interazione con:

Array di oggetti

Verifica le attestazioni per ogni GPU NVIDIA attestata. Confidential Space supporta una sola richiesta di GPU.

Un oggetto gpus è simile al seguente:

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

Il seguente codice verifica che il primo modello di hardware GPU sia un NVIDIA H100 in esecuzione su Google Cloud:

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

Il seguente codice verifica che l'attestazione contenga claim relativi alla GPU:

has(assertion.submods.nvidia_gpu.gpus)