Per contribuire a proteggere i dati da un operatore dei carichi di lavoro non attendibile, Confidential Space implementa un processo di attestazione che rileva le modifiche a un'immagine del carico di lavoro o al suo TEE. Il processo si basa su VM schermate misurate in fase di avvio e di runtime esteso e acquisisce le misurazioni della sequenza di avvio in un registro protetto e di sola estensione nel dispositivo virtual Trusted Platform Module (vTPM).
Il servizio di attestazione Confidential Space genera token OpenID Connect (OIDC) che includono queste attestazioni vTPM in un formato che può essere convalidato da un pool di identità dei carichi di lavoro, che li confronta con i criteri aggiunti come condizioni degli attributi a un provider. Questi token sono firmati da Google e durano un'ora e vengono aggiornati automaticamente.
Crea un criterio di attestazione
Dopo aver creato un pool di Workload Identity, i criteri di attestazione vengono aggiunti come condizioni di attributo a un provider. I criteri sono scritti in un Common Expression Language (CEL) e sono costituiti da una serie di asserzioni che possono essere concatenate con l'operatore &&
.
Ecco un esempio di aggiunta di un provider a un pool di Workload Identity utilizzando l'interfaccia a riga di comando gcloud
, insieme all'opzione attribute-condition
che definisce i criteri:
gcloud iam workload-identity-pools providers create-oidc attestation-verifier \
--location=global \
--workload-identity-pool=user-pool-name \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject=assertion.sub" \
--attribute-condition="assertion.submods.container.image_digest =='sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b' \
&& 'service-account@my-project.iam.gserviceaccount.com' in assertion.google_service_accounts \
&& assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes"
In questo esempio, un'identità esterna che tenta di impersonare un account di servizio collegato al pool di identità del carico di lavoro deve attestare i seguenti dettagli e avere i relativi valori corrispondenti ai valori dei criteri per autenticarsi:
Digest di immagini del container del carico di lavoro
L'indirizzo dell'account di servizio collegato alla VM del carico di lavoro
Il nome dell'immagine Confidential Space
Attributo di supporto dell'immagine Confidential Space di produzione
Le asserzioni disponibili per creare un criterio di attestazione sono dettagliate nella tabella seguente.
Affermazioni di attestazione
Asserzioni | Tipo | Descrizione |
---|---|---|
Affermazioni relative all'immagine Confidential Space | ||
assertion.dbgstat |
String |
Utilizzalo per verificare che l'immagine Confidential Space sia la versione di debug o di produzione. Esistono due valori validi:
Esempi:
Verifica che venga utilizzata la versione di debug dell'immagine Confidential Space.
Verifica che venga utilizzata la versione di produzione dell'immagine Confidential Space. |
assertion.submods.confidential_space.support_attributes |
Array[String] |
Utilizzalo per verificare la versione di sicurezza del TEE in un'immagine Confidential Space di produzione. Non è stato impostato alcun attributo di supporto per le immagini di Confidential Space di debug. Esistono tre attributi di supporto:
Esempio:
Verifica che venga utilizzata la versione più recente dell'immagine Confidential Space. |
assertion.swname |
String |
Utilizzato per verificare il software in esecuzione sull'entità attestante. Il valore è sempre Esempio:
|
assertion.swversion |
Array[String] |
Utilizza questa opzione per verificare la versione software dell'immagine Confidential Space. Consigliamo di utilizzare Esempio:
|
Affermazioni container di carichi di lavoro | ||
assertion.submods.container.cmd_override |
Array[String] |
Utilizza questa opzione per verificare i comandi e i parametri CMD utilizzati nell'immagine del carico di lavoro. Esempi:
Verifica che il CMD dell'immagine del carico di lavoro non sia stato sovrascritto.
Verifica che "programma" sia l'unico contenuto negli override CMD. |
assertion.submods.container.env |
JSON object |
Utilizzato per verificare le variabili di ambiente e i relativi valori sono stati trasmessi esplicitamente al container. Esempio:
Verifica che la variabile di ambiente |
assertion.submods.container.env_override |
JSON object |
Utilizzalo per verificare se l'utente ha sovrascritto le variabili di ambiente nel container. Esempi:
Verifica che l'utente non abbia sostituito la variabile di ambiente di esempio.
Verifica che l'utente non abbia sovrascritto alcuna variabile di ambiente. |
assertion.submods.container.image_digest |
String |
Utilizza questa opzione per verificare il digest delle immagini del container del carico di lavoro. La specifica di questa condizione consente a più parti di concordare un carico di lavoro autorizzato autorizzato ad accedere ai propri dati. Esempio:
|
assertion.submods.container.image_id |
String |
Utilizzato per verificare l'ID immagine del container del carico di lavoro. Esempio:
|
assertion.submods.container.image_reference |
String |
Utilizza questa opzione per verificare la posizione del container del carico di lavoro in esecuzione in Confidential Space. Esempio:
|
assertion.submods.container.restart_policy |
String |
Utilizzalo per verificare il criterio di riavvio di Avvio applicazioni quando il carico di lavoro viene arrestato. I valori validi sono Esempio:
|
Affermazioni VM | ||
assertion.google_service_accounts |
Array[String] |
Utilizzalo per verificare che un account di servizio specificato sia collegato alla VM che esegue il carico di lavoro o sia stato elencato utilizzando Esempio:
|
assertion.hwmodel |
String |
Da utilizzare per verificare la protezione hardware sottostante e le specifiche del sistema operativo della piattaforma Confidential Computing. L'unica piattaforma
supportata è Esempio:
|
assertion.submods.gce.instance_id |
String |
Utilizzalo per verificare l'ID istanza VM. Esempio:
|
assertion.submods.gce.instance_name |
String |
Utilizzalo per verificare il nome dell'istanza VM. Esempio:
|
assertion.submods.gce.project_id |
String |
Utilizzalo per verificare che la VM esegua un progetto Google Cloud}} con l'ID progetto specificato. Esempio:
|
assertion.submods.gce.project_number |
String |
Utilizzalo per verificare che la VM sia in esecuzione in un progetto Google Cloud con il numero di progetto specificato. Esempio:
|
assertion.submods.gce.zone |
String |
Utilizza questo comando per verificare che la VM sia in esecuzione nella zona specificata. Esempio:
|
Risoluzione dei problemi relativi ai criteri
Se all'account di servizio associato alla VM Confidential Space è stato concesso il ruolo logging.logWriter
, puoi risolvere gli errori visualizzando i log della VM:
Vai a Logging nel progetto dell'operatore del carico di lavoro nella console Google Cloud.
Fai clic su Modifica ora per impostare le ore di inizio e di fine dei log da visualizzare.
Filtra i filtri in base ai seguenti campi, se disponibili:
Tipo di risorsa: istanza VM
ID istanza: l'ID istanza della VM
Nome log: Confidential-space-Avvio app
Leggi il messaggio di errore per scoprire di che problema si tratta. Una risorsa potrebbe non essere stata configurata correttamente oppure le condizioni degli attributi nei provider di pool di identità del carico di lavoro potrebbero non corrispondere alle dichiarazioni effettuate dal carico di lavoro Confidential Space.