Claim dei token Confidential VM

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 è 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 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 è https://sts.googleapis.com. Questo token viene recuperato ogni ora dal launcher nell'istanza Confidential VM.

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:

  • GCP_AMD_SEV
  • GCP_AMD_SEV_ES
  • GCP_SHIELDED_VM
  • GCP_INTEL_TDX
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 GCE.

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