Revendications de jetons Confidential VM

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 https://confidentialcomputing.googleapis.com.

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 jwks_uri dans https://www.googleapis.com/service_accounts/v1/metadata/jwk/signer@confidentialspace-sign.iam.gserviceaccount.com.

Cette valeur peut par exemple être https://example.storage.googleapis.com/jwks.json..

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 https://sts.googleapis.com. Ce jeton est récupéré toutes les heures par le lanceur dans l'instance Confidential VM.

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 :

  • GCP_AMD_SEV
  • GCP_AMD_SEV_ES
  • GCP_SHIELDED_VM
  • GCP_INTEL_TDX
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 GCE.

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