Reivindicaciones de tokens de VM confidenciales

En este documento se describen los elementos que se incluyen en los tokens de atestación de máquinas virtuales confidenciales, tal como se definen en el endpoint well-known de máquinas virtuales confidenciales. Los tokens son JSON Web Tokens (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 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 la especificación OpenID Connect 1.0.

Valores de endpoint de well-known Descripción
claims_supported Consulta Reclamaciones de nivel superior.
id_token_signing_alg_values_supported Algoritmos de firma (valores de alg) admitidos por el token. Las VMs confidenciales admiten el algoritmo RS256.
issuer

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

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

jwks_uri

Ruta a las claves públicas que se usan para verificar la firma del token. Puedes publicar estas claves en un segmento 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 Lista de tipos de respuestas de máquinas virtuales confidenciales admitidos. Confidential VM admite id_token.
scopes_supported Los valores del ámbito de OAuth 2.0 que admite la instancia de máquina virtual confidencial. Espacio confidencial solo admite openid.
subject_types_supported Los tipos de identificadores de asunto que admite la máquina virtual confidencial. Confidential VM admite public.

Reclamaciones de nivel superior

En la siguiente tabla se describen las reclamaciones de nivel superior admitidas en el token de atestación.

Reclamar Tipo Descripción
aud Cadena

La audiencia. En el caso del token predeterminado que se usa con un grupo de identidades de carga de trabajo, el público es https://sts.googleapis.com. El launcher obtiene este token cada hora en la instancia de VM confidencial.

En el caso de los tokens con audiencias personalizadas, la audiencia se refleja en la audiencia de la solicitud de token. La longitud máxima es de 512 bytes.

dbgstat Cadena 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 varios nonces del token de atestación. Los valores se reflejan a partir de las opciones de token enviadas en la solicitud de token personalizado. Cada nonce debe tener entre 10 y 74 bytes, ambos incluidos. Se permiten seis nonces como máximo.
exp Entero, marca de tiempo de Unix La hora de vencimiento a partir de la cual no se debe aceptar el token para el procesamiento. El valor es un número JSON que representa el número de segundos desde 1970-01-01T0:0:0Z, medido en UTC, hasta la hora de vencimiento.
google_service_accounts Matriz de cadenas Las cuentas de servicio validadas que ejecutan la carga de trabajo de la VM confidencial.
hwmodel Cadena

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 Entero, marca de tiempo de Unix Hora en la que se emitió el JWT. El valor es un número JSON que representa el número de segundos transcurridos desde 1970-01-01T0:0:0Z (medido en UTC) hasta la hora de emisión.
iss Cadena La entidad emisora del token, que se define como https://confidentialcomputing.googleapis.com.
nbf Entero, marca de tiempo de Unix El tiempo a partir del cual se puede procesar el JWT. El valor es un número JSON que representa el número de segundos desde 1970-01-01T0:0:0Z, medido en UTC.
oemid Uint64 El Número de Empresa Privado (PEN) de Google, que es 11129.
secboot Booleano Indica si el arranque seguro está habilitado. Esta opción asegura que el firmware y el sistema operativo se autentiquen durante el proceso de arranque de la VM. Este valor siempre es true.
sub Cadena El asunto, que es el ID de máquina virtual totalmente cualificado de la máquina virtual 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 Matriz Una serie de reclamaciones. Consulta Reclamaciones de submods.
swname Cadena

El nombre del sistema operativo aprobado para la máquina virtual.

El valor es siempre GCE.

Reclamaciones de submods

En la siguiente tabla se describen las reclamaciones de submods en el token de certificación.

Reclamar Tipo Descripción
gce Objeto Consulta las reclamaciones de Compute Engine.

Reclamaciones de Compute Engine

En la siguiente tabla se describen las reclamaciones de gce en el token de certificación.

Reclamar Tipo Descripción
instance_id Cadena ID de la instancia de VM.
instance_name Cadena Nombre de la instancia de VM.
project_id Cadena El ID de proyecto del proyecto en el que se ejecuta la VM.
project_number Cadena El número de proyecto del proyecto en el que se ejecuta la VM.
zone Cadena La zona de Compute Engine en la que se ejecuta la instancia de VM confidencial.

Siguientes pasos