Claim dei token Confidential VM

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 è https://confidentialcomputing.googleapis.com.

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 jwks_uri in https://www.googleapis.com/service_accounts/v1/metadata/jwk/signer@confidentialspace-sign.iam.gserviceaccount.com.

Un valore di esempio è https://example.storage.googleapis.com/jwks.json.

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 GCP_AMD_SEV, GCP_AMD_SEV_ES e GCP_SHIELDED_VM.

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 è GCE.

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