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
|
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 Un valor de ejemplo es
|
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 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:
|
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 |
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
Consulta el borrador de IETF sobre el token de certificación de entidad (EAT) para obtener más información sobre las reclamaciones de certificación.
Consulta más información sobre las reclamaciones de tokens de OpenID en la especificación OpenID Connect Core 1.0.
Para obtener más información sobre los tokens y cómo recuperarlos, consulta el Codelab de certificación de vTPM.