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 |
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 Un valor de ejemplo es |
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 |
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 |
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?
Consulta el borrador del IETF sobre el token de certificación de entidad (EAT) para obtener más información sobre los reclamos de certificación.
Consulta OpenID Connect Core 1.0 para obtener más información sobre los reclamos 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.