Questo documento descrive gli elementi presenti nei token di attestazione delle VM riservate, come definito nell'endpoint well-known
per le VM riservate. 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 descritti ulteriormente nelle sezioni seguenti.
Elementi token
La tabella seguente descrive gli elementi di alto livello di un token di attestazione. Questi elementi sono conformi alla specifica OpenID Connect 1.0.
Valori dell'endpoint well-known |
Descrizione |
---|---|
claims_supported |
Consulta Pretese supportate. |
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 dalla VM riservata come identificatore del suo 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 di Confidential VM supportati. Confidential VM supporta id_token .
|
scopes_supported |
I valori di ambito
OAuth 2.0
supportati dall'istanza VM con accesso riservato.
Confidential Space supporta solo openid . |
subject_types_supported |
I tipi di identificatori di soggetti supportati da Confidential VM. Confidential VM supporta
public . |
Rivendicazioni supportate
La tabella seguente descrive i claim di primo livello supportati nel token di attestazione.
Richiedi | Tipo | Descrizione |
---|---|---|
aud |
Stringa | Il pubblico. Per il token predefinito (recuperato ogni ora dal
programma di lancio all'interno della VM con accesso riservato), il segmento di pubblico è
https://sts.googleapis.com . Per i token personalizzati, il pubblico viene ripetuto dal segmento di pubblico nella richiesta del 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 ripetuti dalle opzioni del token inviate nella richiesta del token personalizzato. Ogni nonce deve essere compreso tra 10 e 74 byte inclusi. Sono consentiti al massimo sei nonce. |
exp |
Int, timestamp Unix | La data e l'ora di scadenza a partire dalle quali il token non deve essere accettato per l'elaborazione. Il valore è un numero JSON che rappresenta il numero di secondi dal 1970-01-01T0:0:0Z misurato in UTC fino alla data e all'ora di scadenza. |
google_service_accounts |
Array di stringhe | Gli account di servizio convalidati che eseguono il workload VM con crittografia. |
hwmodel |
Stringa |
L'identificatore univoco del token hardware. I valori attuali sono |
iat |
Int, timestamp Unix | L'ora in cui è stato emesso il JWT. Il valore è un numero JSON che rappresenta il numero di secondi dal giorno 01/01/1970 00:00:00Z misurato in UTC fino all'ora del problema. |
iss |
Stringa | L'emittente del token, impostato su
https://confidentialcomputing.googleapis.com . |
nbf |
Int, timestamp Unix | L'ora prima della quale il JWT non può essere utilizzato per l'elaborazione. |
oemid |
Uint64 | Il
numero PEN (Private Enterprise Number) di Google,
ovvero 11129 .
|
secboot |
Booleano | Se l'avvio protetto è abilitato, il che garantisce che il firmware e il sistema operativo siano stati autenticati durante il processo di avvio della VM. |
sub |
Stringa | L'oggetto, ovvero l'ID macchina virtuale completo della VM con accesso riservato. 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 rivendicazioni diverse. Consulta Rivendicazioni dei submod. |
swname |
Stringa |
Il nome del sistema operativo approvato per la VM. Il valore è |
Rivendicazioni dei submod
La tabella seguente descrive i claim submods
nel token di attestazione.
Richiedi | Tipo | Descrizione |
---|---|---|
gce |
Oggetto | Consulta la sezione Rivendicazioni di Compute Engine. |
Richieste di Compute Engine
La tabella seguente descrive i claim gce
nel token di attestazione.
Richiedi | 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 del progetto in cui è in esecuzione la VM. |
zone |
Stringa | La zona Compute Engine in cui è in esecuzione la VM Confidential. |
Passaggi successivi
Per ulteriori informazioni sui claim di attestazione, consulta la bozza IETF relativa all'Entity Attestation Token (EAT).
Per ulteriori informazioni sui claim dei token OpenID, consulta la documentazione OpenID Connect Core 1.0.
Per ulteriori informazioni sui token e sul loro recupero, consulta il Codelab di attestazione vTPM.