Affermazioni di attestazione


Per scoprire di più sull'utilizzo delle asserzioni di attestazione, consulta Creare un criterio di attestazione.

Le asserzioni disponibili per creare un criterio di attestazione sono descritte nella tabella seguente. Possono convalidare le affermazioni fatte dall'immagine di Confidential Space, dal contenitore del carico di lavoro e dalla VM.

Affermazioni sulle immagini

affermazione Tipo Descrizione

assertion.dbgstat

Interazione con:

Stringa definita

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

I valori validi sono:

  • enable: verifica che l'immagine di debug venga utilizzata.
  • disabled-since-boot: verifica che venga utilizzata l'immagine di produzione.
Esempi

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

assertion.dbgstat == "enable"

Il seguente codice verifica che venga utilizzata la versione di produzione dell'immagine di 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 di Confidential Space di produzione. Le immagini dello spazio riservato di debug non hanno un attributo di supporto impostato.

Esistono tre attributi di supporto:

  • LATEST: questa è l'ultima versione dell'immagine supportata. L'immagine LATEST è anche STABLE e USABLE.
  • STABLE: questa versione dell'immagine è supportata e monitorata per rilevare eventuali vulnerabilità. Un'immagine STABLE è anche USABLE.
  • USABLE: un'immagine con solo questo attributo non è più supportata e non viene più monitorata per rilevare le vulnerabilità. Utilizza a tuo rischio.
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 Stringa definita

Verifica il software in esecuzione nell'entità che esegue la verifica. Il valore è sempre CONFIDENTIAL_SPACE.

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

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

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

Affermazioni del contenitore

affermazione Tipo Descrizione

assertion.submods.container.cmd_override

Interazione con:

Array di stringhe

Verifica i comandi e i parametri CMD utilizzati nell'immagine del carico di lavoro.

Esempi

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

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

Il seguente codice verifica che program sia l'unico contenuto nelle sostituzioni 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 contenitore.

Esempio

Il seguente codice verifica che la variabile di ambiente example-env-1 sia impostata su value-1 e example-env-2 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 carico di lavoro ha sovrascritto le variabili di ambiente nel container.

Esempi

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

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

Il codice seguente verifica che l'operatore del carico di lavoro non abbia soprascritto alcuna variabile di ambiente:

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

Verifica il digest dell'immagine del contenitore del carico di lavoro. La specifica di questa condizione consente a più parti di concordare un carico di lavoro 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 contenitore del carico di lavoro.

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

assertion.submods.container.image_reference

Interazione con:

Stringa

Verifica la posizione del contenitore del carico di lavoro in esecuzione sopra l'immagine di 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 carico di lavoro autorizzato che può accedere ai loro dati.

L'affermazione può includere i seguenti elementi:

  • key_id: l'impronta digitale esadecimale della chiave pubblica. Per ottenere l'impronta, puoi eseguire il seguente comando:

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

    dove public_key.pem è la chiave pubblica in formato PEM.

  • signature: la firma su un payload associato al contenitore firmato e che segue il formato di firma semplice.
  • 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
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

Interazione con:

Stringa definita

Verifica il criterio di riavvio del programma di avvio del contenitore quando il carico di lavoro si arresta.

I valori validi sono:

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

Verifiche VM

affermazione 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 carico di lavoro o che sia stato elencato utilizzando tee-impersonate-service-accounts nei metadati della VM.

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

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

Esempio
assertion.hwmodel == "GCP_AMD_SEV"

assertion.submods.confidential_space.monitoring_enabled

Interazione con:

Booleano

Verifica lo stato del monitoraggio nell'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 nella VM sia in esecuzione 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 del carico di lavoro: il valore --zone .
Stringa

Verifica che la VM sia in esecuzione nella zona specificata.

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