Ce document décrit les éléments présents dans les jetons d'attestation Confidential VM, tels que définis dans le point de terminaison well-known
pour Confidential VM. Les jetons sont des jetons Web JSON (JWT).
Exemple de jeton
Voici un exemple de jeton d'attestation encodé. Vous pouvez utiliser https://jwt.io/ pour le décoder :
eyJhbGciOiJSUzI1NiIsImtpZCI6IjFjNjdmYWVhYjRhYzE1ZDJmNmZmODMwY2E2ZmM1N2YyYmVhM2Y0YmIiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJcdTAwM2NZT1VSQVVESUVOQ0VcdTAwM2UiLCJleHAiOjE3MTU5NzE2OTcsImlhdCI6MTcxNTk2ODA5NywiaXNzIjoiaHR0cHM6Ly9jb25maWRlbnRpYWxjb21wdXRpbmcuZ29vZ2xlYXBpcy5jb20iLCJuYmYiOjE3MTU5NjgwOTcsInN1YiI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2NvbXB1dGUvdjEvcHJvamVjdHMvcnVpZGV6aGFuZy0yL3pvbmVzL3VzLWNlbnRyYWwxLWMvaW5zdGFuY2VzL2N2bS10b2tlbi1jbGFpbXMiLCJlYXRfbm9uY2UiOlsidGhpc0lzQWN1c3RvbU5vbmNlIiwidGhpc0lzQU11Y2hMb25nZXJDdXN0b21Ob25jZVdpdGhQYWRkaW5nRm9yNzRCeXRlczAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSwic2VjYm9vdCI6ZmFsc2UsIm9lbWlkIjoxMTEyOSwiaHdtb2RlbCI6IkdDUF9BTURfU0VWIiwic3duYW1lIjoiR0NFIiwiZGJnc3RhdCI6ImVuYWJsZWQiLCJzdWJtb2RzIjp7ImdjZSI6eyJ6b25lIjoidXMtY2VudHJhbDEtYyIsInByb2plY3RfaWQiOiJydWlkZXpoYW5nLTIiLCJwcm9qZWN0X251bWJlciI6IjQ3MDY1MjQyNjMwNSIsImluc3RhbmNlX25hbWUiOiJjdm0tdG9rZW4tY2xhaW1zIiwiaW5zdGFuY2VfaWQiOiI3MzMzMjUxNTQ2ODE2NDQ2MDY5In19LCJnb29nbGVfc2VydmljZV9hY2NvdW50cyI6WyI0NzA2NTI0MjYzMDUtY29tcHV0ZUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSJdfQ.Z8CIreuWj8vQKe9L5f5Ol80LcWBI_pFWwfT8qsky8hjtH3OMmqfUCJJRx-dX5Rqm5n4qe4dHacLgSWQlT9MDYyrtWDuocA2WtfPZLvM0DNc4HuoNPZtVrgMMcZ93Xyl5-tJuI5PbPshiDBT06_QaRm5l37RRL2CsxXZGCkKsxV1vs0gF5xZgSNmhDqg3q1fONhA3VglZ-H0SHAvMNr1qwXDKrQxdYxyFfEMLkcsRxSXlR5mLCbMIFptGTPXt-k83xJzCipuKSiKJrwaRdZTmlapn7UtaTRLvG3YCmXPg6oOvNKtE8T4KeBY36EdzR0Fdmz_pXSbWL-q8-y90VxDxwQ
Voici un exemple de jeton décodé :
{
"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"
]
}
Les éléments du jeton sont expliqués plus en détail dans les sections suivantes.
Jeton d'éléments
Le tableau suivant décrit les éléments de haut niveau d'un jeton d'attestation. Ces éléments sont conformes à la spécification OpenID Connect 1.0.
Valeurs des points de terminaison well-known |
Description |
---|---|
claims_supported |
Consultez Revendications de premier niveau. |
id_token_signing_alg_values_supported |
Algorithmes de signature (valeurs alg ) acceptés par le jeton. Confidential VM est compatible avec l'algorithme RS256 . |
issuer |
Schéma HTTPS utilisé par Confidential VM comme identifiant de l'émetteur. La valeur est |
jwks_uri |
Chemin d'accès aux clés publiques utilisées pour valider la signature du jeton. Vous pouvez publier ces clés dans un bucket Cloud Storage. Vous trouverez les clés Cette valeur peut par exemple être |
response_types_supported |
Liste des types de réponses Confidential VM acceptés. Confidential VM est compatible avec id_token .
|
scopes_supported |
Valeurs du champ d'application
OAuth 2.0 acceptées par l'instance Confidential VM.
Confidential Space n'est compatible qu'avec openid . |
subject_types_supported |
Types d'identifiants de sujet compatibles avec Confidential VM. Confidential VM est compatible avec public . |
Revendications de premier niveau
Le tableau suivant décrit les revendications de premier niveau acceptées dans le jeton d'attestation.
Revendication | Type | Description |
---|---|---|
aud |
Chaîne |
L'audience. Pour le jeton par défaut utilisé avec un pool d'identités de charge de travail, l'audience est Pour les jetons avec des audiences personnalisées, l'audience est reprise de l'audience dans la demande de jeton. La valeur ne doit pas dépasser 512 octets. |
dbgstat |
Chaîne |
État de débogage du matériel. Dans les images de production, la valeur est disabled-since-boot . Dans les images de débogage, la valeur est enabled .
|
eat_nonce |
Chaîne ou tableau de chaînes | Un ou plusieurs nonces pour le jeton d'attestation. Les valeurs sont reprises des options de jeton envoyées dans la demande de jeton personnalisé. Chaque nonce doit être compris entre 10 et 74 octets inclus. Vous ne pouvez pas utiliser plus de six nonces. |
exp |
Int, code temporel Unix |
Délai d'expiration au-delà duquel le jeton ne doit plus être accepté pour le traitement. La valeur est un nombre JSON qui représente le nombre de secondes écoulées depuis 1970-01-01T0:0:0Z (mesuré en UTC) jusqu'à l'heure d'expiration.
|
google_service_accounts |
Tableau de chaînes. | Comptes de service validés qui exécutent la charge de travail de la VM confidentielle. |
hwmodel |
Chaîne |
Identifiant unique du jeton matériel. L'identifiant doit correspondre à l'une des valeurs suivantes :
|
iat |
Int, code temporel Unix |
Heure à laquelle le jeton JWT a été émis. La valeur est un nombre JSON qui représente le nombre de secondes écoulées depuis le 1970-01-01T0:0:0Z mesuré en UTC jusqu'à l'heure du problème.
|
iss |
Chaîne |
Émetteur du jeton, défini sur https://confidentialcomputing.googleapis.com .
|
nbf |
Int, code temporel Unix |
Heure après laquelle le jeton JWT peut être traité. La valeur est un nombre JSON qui représente le nombre de secondes depuis 1970-01-01T0:0:0Z , mesuré en UTC.
|
oemid |
Uint64 |
Le
numéro d'entreprise privée (PEN) de Google, qui est 11129 .
|
secboot |
Booléen |
Indique si le démarrage sécurisé est activé. Il permet de s'assurer que le micrologiciel et le système d'exploitation sont authentifiés lors du processus de démarrage de la VM. Cette valeur est toujours true .
|
sub |
Chaîne |
Sujet, qui correspond à l'ID complet de la machine virtuelle pour la Confidential VM. Par exemple :
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID
Ce format est connu sous le nom de
selfLink de l'instance.
|
submods |
Tableau | Cette vidéo fait l'objet de plusieurs réclamations. Consultez Revendications des sous-modérateurs. |
swname |
Chaîne |
Nom du système d'exploitation approuvé pour la VM. La valeur est toujours |
Revendications des sous-modules
Le tableau suivant décrit les revendications submods
dans le jeton d'attestation.
Revendication | Type | Description |
---|---|---|
gce |
Objet | Consultez Revendications Compute Engine. |
Réclamations Compute Engine
Le tableau suivant décrit les revendications gce
dans le jeton d'attestation.
Revendication | Type | Description |
---|---|---|
instance_id |
Chaîne | ID de l'instance de VM. |
instance_name |
Chaîne | Nom de l'instance de VM. |
project_id |
Chaîne | L' ID du projet dans lequel la VM s'exécute. |
project_number |
Chaîne | Numéro du projet dans lequel la VM s'exécute. |
zone |
Chaîne | Zone Compute Engine dans laquelle l'instance de VM confidentielle est en cours d'exécution. |
Étapes suivantes
Pour en savoir plus sur les revendications d'attestation, consultez le brouillon IETF sur le jeton d'attestation d'entité (EAT).
Pour en savoir plus sur les revendications de jetons OpenID, consultez OpenID Connect Core 1.0.
Pour en savoir plus sur les jetons et leur récupération, consultez l'atelier de programmation sur l'attestation vTPM.