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