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. Il s'agit de 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.
Éléments de jeton
Le tableau suivant décrit les éléments de niveau supérieur d'un jeton d'attestation. Ces éléments sont conformes à la spécification OpenID Connect 1.0.
Valeurs de point de terminaison well-known |
Description |
---|---|
claims_supported |
Consultez la section Revendications compatibles. |
id_token_signing_alg_values_supported |
Les algorithmes de signature (valeurs alg ) compatibles avec le jeton. Confidential VM est compatible avec l'algorithme RS256 . |
issuer |
Le schéma HTTPS que Confidential VM utilise comme identifiant d'é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 Exemple de valeur :
|
response_types_supported |
Liste des types de réponse Confidential VM compatibles. Confidential VM est compatible avec id_token .
|
scopes_supported |
Valeurs de portée
OAuth 2.0 compatibles avec l'instance Confidential VM.
Confidential Space n'est compatible qu'avec openid . |
subject_types_supported |
Types d'identifiants d'objet compatibles avec Confidential VM. Confidential VM est compatible avec public . |
Revendications acceptées
Le tableau suivant décrit les revendications de niveau supérieur compatibles dans le jeton d'attestation.
Affirmation | Type | Description |
---|---|---|
aud |
Chaîne | L'audience. Pour le jeton par défaut (qui est extrait toutes les heures par le lanceur dans Confidential VM), l'audience est https://sts.googleapis.com . Pour les jetons personnalisés, l'audience est renvoyée dans la requête de jeton. La longueur maximale est de 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 renvoyées à partir des options de jeton envoyées dans la requête de jeton personnalisé. Chaque nonce doit être compris entre 10 et 74 octets inclus. Vous ne pouvez pas inclure plus de six nonces. |
exp |
Int, code temporel Unix | Date d'expiration à partir de laquelle 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 le 1er janvier 1970 à 00:00:00 UTC, 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. Les valeurs actuelles sont |
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 1er janvier 1970 à 00:00:00 UTC, mesuré en UTC, jusqu'à l'heure d'émission. |
iss |
Chaîne | Émetteur du jeton, défini sur https://confidentialcomputing.googleapis.com . |
nbf |
Int, code temporel Unix | Heure avant laquelle le jeton JWT ne peut pas être utilisé pour le traitement. |
oemid |
Uint64 | Le
numéro d'entreprise privé (PEN) Google, qui est 11129 .
|
secboot |
Booléen | Indique si le démarrage sécurisé est activé, ce qui garantit que le micrologiciel et le système d'exploitation ont été authentifiés lors du processus de démarrage de la VM. |
sub |
Chaîne | L'objet, qui correspond à l'ID de machine virtuelle complet de la Confidential VM. Par exemple :
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID
Ce format est appelé selfLink de l'instance.
|
submods |
Tableau | Différentes réclamations. Consultez Revendications de modérateurs secondaires. |
swname |
Chaîne |
Nom du système d'exploitation approuvé pour la VM. La valeur est |
Revendications de sous-modérateurs
Le tableau suivant décrit les revendications submods
dans le jeton d'attestation.
Affirmation | Type | Description |
---|---|---|
gce |
Objet | Consultez la page Revendications Compute Engine. |
Revendications Compute Engine
Le tableau suivant décrit les revendications gce
dans le jeton d'attestation.
Affirmation | 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 | ID de projet 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 la VM Confidential s'exécute. |
Étape suivante
Pour en savoir plus sur les revendications d'attestation, consultez le projet IETF sur le jeton d'attestation d'entité (EAT).
Pour en savoir plus sur les revendications de jeton OpenID, consultez la documentation 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.