Declaraciones de tokens de Confidential VM

En este documento, se describen los elementos que se encuentran en los tokens de certificación de Confidential VM, según se definen en el endpoint well-known de Confidential VM. Los tokens son tokens web JSON (JWT).

Token de ejemplo

A continuación, se muestra un ejemplo de un token de certificación codificado. Puedes usar https://jwt.io/ para decodificarlo:

eyJhbGciOiJSUzI1NiIsImtpZCI6IjFjNjdmYWVhYjRhYzE1ZDJmNmZmODMwY2E2ZmM1N2YyYmVhM2Y0YmIiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJcdTAwM2NZT1VSQVVESUVOQ0VcdTAwM2UiLCJleHAiOjE3MTU5NzE2OTcsImlhdCI6MTcxNTk2ODA5NywiaXNzIjoiaHR0cHM6Ly9jb25maWRlbnRpYWxjb21wdXRpbmcuZ29vZ2xlYXBpcy5jb20iLCJuYmYiOjE3MTU5NjgwOTcsInN1YiI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2NvbXB1dGUvdjEvcHJvamVjdHMvcnVpZGV6aGFuZy0yL3pvbmVzL3VzLWNlbnRyYWwxLWMvaW5zdGFuY2VzL2N2bS10b2tlbi1jbGFpbXMiLCJlYXRfbm9uY2UiOlsidGhpc0lzQWN1c3RvbU5vbmNlIiwidGhpc0lzQU11Y2hMb25nZXJDdXN0b21Ob25jZVdpdGhQYWRkaW5nRm9yNzRCeXRlczAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSwic2VjYm9vdCI6ZmFsc2UsIm9lbWlkIjoxMTEyOSwiaHdtb2RlbCI6IkdDUF9BTURfU0VWIiwic3duYW1lIjoiR0NFIiwiZGJnc3RhdCI6ImVuYWJsZWQiLCJzdWJtb2RzIjp7ImdjZSI6eyJ6b25lIjoidXMtY2VudHJhbDEtYyIsInByb2plY3RfaWQiOiJydWlkZXpoYW5nLTIiLCJwcm9qZWN0X251bWJlciI6IjQ3MDY1MjQyNjMwNSIsImluc3RhbmNlX25hbWUiOiJjdm0tdG9rZW4tY2xhaW1zIiwiaW5zdGFuY2VfaWQiOiI3MzMzMjUxNTQ2ODE2NDQ2MDY5In19LCJnb29nbGVfc2VydmljZV9hY2NvdW50cyI6WyI0NzA2NTI0MjYzMDUtY29tcHV0ZUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSJdfQ.Z8CIreuWj8vQKe9L5f5Ol80LcWBI_pFWwfT8qsky8hjtH3OMmqfUCJJRx-dX5Rqm5n4qe4dHacLgSWQlT9MDYyrtWDuocA2WtfPZLvM0DNc4HuoNPZtVrgMMcZ93Xyl5-tJuI5PbPshiDBT06_QaRm5l37RRL2CsxXZGCkKsxV1vs0gF5xZgSNmhDqg3q1fONhA3VglZ-H0SHAvMNr1qwXDKrQxdYxyFfEMLkcsRxSXlR5mLCbMIFptGTPXt-k83xJzCipuKSiKJrwaRdZTmlapn7UtaTRLvG3YCmXPg6oOvNKtE8T4KeBY36EdzR0Fdmz_pXSbWL-q8-y90VxDxwQ

A continuación, se muestra un ejemplo de un token decodificado:

{
  "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"
  ]
}

Los elementos dentro del token se explican con más detalle en las siguientes secciones.

Elementos de token

En la siguiente tabla, se describen los elementos de alto nivel en un token de certificación. Estos elementos cumplen con la especificación de OpenID Connect 1.0.

Valores de extremo well-known Descripción
claims_supported Consulta Reclamos de nivel superior.
id_token_signing_alg_values_supported Son los algoritmos de firma (valores de alg) admitidos por el token. Confidential VM admite el algoritmo RS256.
issuer

Es el esquema HTTPS que usa la VM confidencial como identificador de emisor.

El valor es https://confidentialcomputing.googleapis.com.

jwks_uri

Es la ruta de acceso a las claves públicas que se usan para verificar la firma del token. Puedes publicar estas claves en un bucket de Cloud Storage.

Puedes encontrar las claves de jwks_uri en https://www.googleapis.com/service_accounts/v1/metadata/jwk/signer@confidentialspace-sign.iam.gserviceaccount.com.

Un valor de ejemplo es https://example.storage.googleapis.com/jwks.json.

response_types_supported Lista de tipos de respuesta de Confidential VM admitidos. Confidential VM admite id_token.
scopes_supported Valores de alcance de OAuth 2.0 que admite la instancia de VM confidencial. Confidential Space solo admite openid.
subject_types_supported Son los tipos de identificadores de sujeto que admite Confidential VM. Confidential VM admite public.

Afirmaciones de nivel superior

En la siguiente tabla, se describen los reclamos admitidos de nivel superior en el token de certificación.

Reclamación Tipo Descripción
aud String

El público Para el token predeterminado que se usa con un grupo de identidades para cargas de trabajo, el público es https://sts.googleapis.com. Este token se recupera cada hora por el launcher en la instancia de Confidential VM.

En el caso de los tokens con públicos personalizados, el público se devuelve desde el público de la solicitud del token. La longitud máxima es de 512 bytes.

dbgstat String Es el estado de depuración del hardware. En las imágenes de producción, el valor es disabled-since-boot. En las imágenes de depuración, el valor es enabled.
eat_nonce Cadena o array de cadenas Uno o más nonces para el token de certificación. Los valores se repiten desde las opciones del token enviadas en la solicitud del token personalizado. Cada nonce debe tener entre 10 y 74 bytes, inclusive. Se permite un máximo de seis nonces.
exp Número entero, marca de tiempo de Unix Es la fecha y hora de vencimiento a partir de las cuales no se debe aceptar el token para su procesamiento. El valor es un número JSON que representa la cantidad de segundos desde 1970-01-01T0:0:0Z, medidos en UTC, hasta la hora de vencimiento.
google_service_accounts Matriz de string Las cuentas de servicio validadas que ejecutan la carga de trabajo de la VM confidencial.
hwmodel String

Es el identificador único del token de hardware. El identificador debe ser uno de los siguientes valores:

  • GCP_AMD_SEV
  • GCP_AMD_SEV_ES
  • GCP_SHIELDED_VM
  • GCP_INTEL_TDX
iat Número entero, marca de tiempo de Unix Es la fecha y hora en que se emitió el JWT. El valor es un número JSON que representa la cantidad de segundos desde 1970-01-01T0:0:0Z, medidos en UTC, hasta la hora del problema.
iss String El emisor del token, que se establece en https://confidentialcomputing.googleapis.com.
nbf Número entero, marca de tiempo de Unix Es la fecha y hora a partir de las cuales se permite procesar el JWT. El valor es un número JSON que representa la cantidad de segundos desde 1970-01-01T0:0:0Z, medidos en UTC.
oemid Uint64 El Número de empresa privada (PEN) de Google, que es 11129.
secboot Booleano Indica si el inicio seguro está habilitado, lo que garantiza que el firmware y el sistema operativo se autentiquen durante el proceso de inicio de la VM. Este valor siempre es true.
sub String Es el asunto, que es el ID de la máquina virtual completamente calificado para la VM confidencial. Por ejemplo, https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID. Este formato se conoce como selfLink de la instancia.
submods Array Es un array de varios reclamos. Consulta Reclamos de submods.
swname String

Nombre del sistema operativo aprobado para la VM.

El valor siempre es GCE.

Reclamos de submods

En la siguiente tabla, se describen los reclamos de submods en el token de certificación.

Reclamación Tipo Descripción
gce Objeto Consulta Reclamos de Compute Engine.

Reclamos de Compute Engine

En la siguiente tabla, se describen los reclamos de gce en el token de certificación.

Reclamación Tipo Descripción
instance_id String Es el ID de la instancia de VM.
instance_name String Es el nombre de la instancia de VM.
project_id String El ID del proyecto del proyecto en el que se ejecuta la VM.
project_number String Es el número del proyecto en el que se ejecuta la VM.
zone String Es la zona de Compute Engine en la que se ejecuta la instancia de VM confidencial.

¿Qué sigue?