Questo documento descrive gli elementi presenti nei token di attestazione di Confidential VM, come definito nell'endpoint
well-known
per Confidential VM. I token sono token web JSON (JWT).
Token di esempio
Di seguito è riportato un esempio di token di attestazione codificato. Puoi utilizzare https://jwt.io/ per decodificarlo:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjFjNjdmYWVhYjRhYzE1ZDJmNmZmODMwY2E2ZmM1N2YyYmVhM2Y0YmIiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJcdTAwM2NZT1VSQVVESUVOQ0VcdTAwM2UiLCJleHAiOjE3MTU5NzE2OTcsImlhdCI6MTcxNTk2ODA5NywiaXNzIjoiaHR0cHM6Ly9jb25maWRlbnRpYWxjb21wdXRpbmcuZ29vZ2xlYXBpcy5jb20iLCJuYmYiOjE3MTU5NjgwOTcsInN1YiI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2NvbXB1dGUvdjEvcHJvamVjdHMvcnVpZGV6aGFuZy0yL3pvbmVzL3VzLWNlbnRyYWwxLWMvaW5zdGFuY2VzL2N2bS10b2tlbi1jbGFpbXMiLCJlYXRfbm9uY2UiOlsidGhpc0lzQWN1c3RvbU5vbmNlIiwidGhpc0lzQU11Y2hMb25nZXJDdXN0b21Ob25jZVdpdGhQYWRkaW5nRm9yNzRCeXRlczAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSwic2VjYm9vdCI6ZmFsc2UsIm9lbWlkIjoxMTEyOSwiaHdtb2RlbCI6IkdDUF9BTURfU0VWIiwic3duYW1lIjoiR0NFIiwiZGJnc3RhdCI6ImVuYWJsZWQiLCJzdWJtb2RzIjp7ImdjZSI6eyJ6b25lIjoidXMtY2VudHJhbDEtYyIsInByb2plY3RfaWQiOiJydWlkZXpoYW5nLTIiLCJwcm9qZWN0X251bWJlciI6IjQ3MDY1MjQyNjMwNSIsImluc3RhbmNlX25hbWUiOiJjdm0tdG9rZW4tY2xhaW1zIiwiaW5zdGFuY2VfaWQiOiI3MzMzMjUxNTQ2ODE2NDQ2MDY5In19LCJnb29nbGVfc2VydmljZV9hY2NvdW50cyI6WyI0NzA2NTI0MjYzMDUtY29tcHV0ZUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSJdfQ.Z8CIreuWj8vQKe9L5f5Ol80LcWBI_pFWwfT8qsky8hjtH3OMmqfUCJJRx-dX5Rqm5n4qe4dHacLgSWQlT9MDYyrtWDuocA2WtfPZLvM0DNc4HuoNPZtVrgMMcZ93Xyl5-tJuI5PbPshiDBT06_QaRm5l37RRL2CsxXZGCkKsxV1vs0gF5xZgSNmhDqg3q1fONhA3VglZ-H0SHAvMNr1qwXDKrQxdYxyFfEMLkcsRxSXlR5mLCbMIFptGTPXt-k83xJzCipuKSiKJrwaRdZTmlapn7UtaTRLvG3YCmXPg6oOvNKtE8T4KeBY36EdzR0Fdmz_pXSbWL-q8-y90VxDxwQ
Di seguito è riportato un esempio di token decodificato:
{
"alg": "RS256",
"kid": "6e66f1aededf736581df2599ee20387718978dcd",
"typ": "JWT"
}.
{
"aud": "<YOURAUDIENCE>",
"exp": 1715359550,
"iat": 1715355950,
"iss": "https://confidentialcomputing.googleapis.com",
"nbf": 1698861565,
"sub": "https://www.googleapis.com/compute/v1/projects/<YOURPROJECT>/zones/us-central1-c/instances/cvm-token-claims",
"eat_nonce": [
"thisIsAcustomNonce",
"thisIsAMuchLongerCustomNonceWithPaddingFor74Bytes0000000000000000000000000"
],
"secboot": true,
"oemid": 11129,
"hwmodel": "GCP_AMD_SEV",
"swname": "Compute Engine",
"dbgstat": "disabled-since-boot",
"submods": {
"gce": {
"zone": "us-central1-c",
"project_id": "<YOURPROJECT>",
"project_number": "470652426305",
"instance_name": "cvm-token-claims",
"instance_id": "7333251546816446069"
}
},
"google_service_accounts": [
"470652426305-compute@developer.gserviceaccount.com"
]
}
Gli elementi all'interno del token sono spiegati in modo più dettagliato nelle sezioni seguenti.
Elementi token
La tabella seguente descrive gli elementi di alto livello in un token di attestazione. Questi elementi sono conformi alla specifica OpenID Connect 1.0.
Valori dell'endpoint well-known |
Descrizione |
---|---|
claims_supported |
Vedi Rivendicazioni di primo livello. |
id_token_signing_alg_values_supported |
Gli algoritmi di firma (valori alg ) supportati dal
token. Confidential VM supporta l'algoritmo RS256 . |
issuer |
Lo schema HTTPS utilizzato da Confidential VM come identificatore dell'emittente. Il valore è
|
jwks_uri |
Il percorso delle chiavi pubbliche utilizzate per verificare la firma del token. Puoi pubblicare queste chiavi in un bucket Cloud Storage. Puoi trovare le chiavi Un valore di esempio è
|
response_types_supported |
L'elenco dei tipi di risposta Confidential VM supportati. Confidential VM supporta id_token .
|
scopes_supported |
I
valori dell'ambito
OAuth 2.0
supportati dall'istanza Confidential VM.
Confidential Space supporta solo openid . |
subject_types_supported |
I tipi di identificatori del soggetto supportati da Confidential VM. Confidential VM supporta
public . |
Rivendicazioni di primo livello
La tabella seguente descrive le attestazioni supportate di primo livello nel token di attestazione.
Attestazione | Tipo | Descrizione |
---|---|---|
aud |
Stringa |
Il pubblico. Per il token predefinito utilizzato con un pool di identità
del carico di lavoro, il pubblico è Per i token con segmenti di pubblico personalizzati, il segmento di pubblico viene ripreso dal segmento di pubblico nella richiesta di token. La lunghezza massima è di 512 byte. |
dbgstat |
Stringa |
Lo stato di debug dell'hardware. Nelle immagini di produzione, il valore è
disabled-since-boot . Nelle immagini di debug, il valore è
enabled .
|
eat_nonce |
Stringa o array di stringhe | Uno o più nonce per il token di attestazione. I valori vengono ripresi dalle opzioni del token inviate nella richiesta di token personalizzato. Ogni nonce deve essere compreso tra 10 e 74 byte inclusi. Sono consentiti massimo sei nonce. |
exp |
Int, timestamp Unix |
L'ora di scadenza a partire dalla quale il token non deve essere accettato per
l'elaborazione. Il valore è un numero JSON che rappresenta il numero di
secondi da
1970-01-01T0:0:0Z misurato
in UTC fino all'ora di scadenza.
|
google_service_accounts |
Array di stringhe | I service account convalidati che eseguono il workload della VM confidenziale. |
hwmodel |
Stringa |
L'identificatore univoco del token hardware. L'identificatore deve essere uno dei seguenti valori:
|
iat |
Int, timestamp Unix |
L'ora in cui è stato emesso il JWT. Il valore è un numero JSON che
rappresenta il numero di secondi da
1970-01-01T0:0:0Z misurato
in UTC fino all'ora del problema.
|
iss |
Stringa |
L'emittente del token, impostata su
https://confidentialcomputing.googleapis.com .
|
nbf |
Int, timestamp Unix |
Il momento dopo il quale è consentito elaborare il JWT. Il valore è un
numero JSON che rappresenta il numero di secondi da
1970-01-01T0:0:0Z misurato
in UTC.
|
oemid |
Uint64 |
Il numero
aziendale privato (PEN) di Google, ovvero 11129 .
|
secboot |
Booleano |
Se l'avvio protetto è abilitato, il che garantisce che il firmware e il sistema operativo vengano autenticati durante il processo di avvio della VM. Questo
valore è sempre true .
|
sub |
Stringa |
Il soggetto, ovvero l'ID macchina virtuale completo per la
Confidential VM. Ad esempio,
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID .
Questo formato è noto come
selfLink dell'istanza.
|
submods |
Array | Una serie di varie rivendicazioni. Consulta le rivendicazioni dei submod. |
swname |
Stringa |
Il nome del sistema operativo approvato per la VM. Il valore è sempre |
Rivendicazioni di submod
La tabella seguente descrive le attestazioni submods
nel token di attestazione.
Attestazione | Tipo | Descrizione |
---|---|---|
gce |
Oggetto | Consulta Richieste di Compute Engine. |
Richieste di Compute Engine
La tabella seguente descrive le attestazioni gce
nel token di attestazione.
Attestazione | Tipo | Descrizione |
---|---|---|
instance_id |
Stringa | L'ID istanza VM. |
instance_name |
Stringa | Il nome dell'istanza VM. |
project_id |
Stringa | L' ID progetto del progetto in cui è in esecuzione la VM. |
project_number |
Stringa | Il numero di progetto del progetto in cui è in esecuzione la VM. |
zone |
Stringa | La zona Compute Engine in cui è in esecuzione l'istanza Confidential VM. |
Passaggi successivi
Per ulteriori informazioni sulle attestazioni, consulta la bozza dell'IETF relativa al token di attestazione dell'entità (EAT).
Per saperne di più sulle rivendicazioni dei token OpenID, consulta OpenID Connect Core 1.0.
Per saperne di più sui token e sul loro recupero, consulta vTPM Attestation Codelab.