Declaraciones de tokens de Confidential VM

En este documento, se describen los elementos que están presentes en los tokens de certificación de Confidential VM, como se define en el extremo well-known para Confidential VM. Los tokens son tokens web JSON (JWT).

Token de ejemplo

El siguiente es 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

El siguiente es 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 de 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 Afirmaciones admitidas.
id_token_signing_alg_values_supported Los algoritmos de firma (valores alg) que admite el token Confidential VM admite el algoritmo RS256.
issuer

El esquema HTTPS que Confidential VM usa como su 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 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 La lista de tipos de respuesta de Confidential VM compatibles Confidential VM admite id_token.
scopes_supported Los valores de alcance de OAuth 2.0 que admite la instancia de VM confidencial Confidential Space solo admite openid.
subject_types_supported Los tipos de identificadores de sujeto que admite Confidential VM Confidential VM admite public.

Reclamos admitidos

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

Reclamación Tipo Descripción
aud String El público Para el token predeterminado (que el selector recupera cada hora dentro de Confidential VM), el público es https://sts.googleapis.com. En el caso de los tokens personalizados, el público se repite desde el público en la solicitud de 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 de las opciones de token que se envían en la solicitud de token personalizado. Cada nonce debe estar entre 10 y 74 bytes inclusive. Se permite un máximo de seis nonces.
exp Int, marca de tiempo de Unix Es la hora de vencimiento a partir de la cual 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, medido 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 VM confidencial
hwmodel String

Es el identificador único del token de hardware.

Los valores actuales son GCP_AMD_SEV, GCP_AMD_SEV_ES y GCP_SHIELDED_VM.

iat Int, marca de tiempo de Unix Es la hora en la que se emitió el JWT. El valor es un número JSON que representa la cantidad de segundos desde 1970-01-01T0:0:0Z, medido en UTC, hasta la hora del problema.
iss String El emisor del token, que se establece en https://confidentialcomputing.googleapis.com.
nbf Int, marca de tiempo de Unix Es la hora antes de la cual no se puede usar el JWT para el procesamiento.
oemid Uint64 El número de empresa privada (PEN) de Google, que es 11129
secboot Booleano Si el inicio seguro está habilitado, lo que garantiza que el firmware y el sistema operativo se hayan autenticado durante el proceso de inicio de la VM.
sub String El asunto, que es el ID de máquina virtual completamente calificado de la VM confidencial. Por ejemplo, https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID. Este formato se conoce como el selfLink de la instancia.
submods Array Un array de varios reclamos. Consulta Submod claims.
swname String

Es el nombre del sistema operativo aprobado para la VM.

El valor es GCE.

Declaraciones de Submods

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

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

Declaraciones de Compute Engine

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

Reclamación Tipo Descripción
instance_id String El ID de la instancia de VM.
instance_name String 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 La zona de Compute Engine en la que se ejecuta la VM confidencial

¿Qué sigue?