Confidential VM-Tokenansprüche

In diesem Dokument werden die Elemente beschrieben, die in Confidential VM-Bestätigungstokens vorhanden sind, wie sie im well-known-Endpunkt für Confidential VM definiert sind. Die Tokens sind JSON-Webtokens (JWT).

Beispiel für ein Token

Das folgende Beispiel zeigt ein codiertes Attestierungstoken. Sie können den Token mit https://jwt.io/ decodieren:

eyJhbGciOiJSUzI1NiIsImtpZCI6IjFjNjdmYWVhYjRhYzE1ZDJmNmZmODMwY2E2ZmM1N2YyYmVhM2Y0YmIiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJcdTAwM2NZT1VSQVVESUVOQ0VcdTAwM2UiLCJleHAiOjE3MTU5NzE2OTcsImlhdCI6MTcxNTk2ODA5NywiaXNzIjoiaHR0cHM6Ly9jb25maWRlbnRpYWxjb21wdXRpbmcuZ29vZ2xlYXBpcy5jb20iLCJuYmYiOjE3MTU5NjgwOTcsInN1YiI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2NvbXB1dGUvdjEvcHJvamVjdHMvcnVpZGV6aGFuZy0yL3pvbmVzL3VzLWNlbnRyYWwxLWMvaW5zdGFuY2VzL2N2bS10b2tlbi1jbGFpbXMiLCJlYXRfbm9uY2UiOlsidGhpc0lzQWN1c3RvbU5vbmNlIiwidGhpc0lzQU11Y2hMb25nZXJDdXN0b21Ob25jZVdpdGhQYWRkaW5nRm9yNzRCeXRlczAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSwic2VjYm9vdCI6ZmFsc2UsIm9lbWlkIjoxMTEyOSwiaHdtb2RlbCI6IkdDUF9BTURfU0VWIiwic3duYW1lIjoiR0NFIiwiZGJnc3RhdCI6ImVuYWJsZWQiLCJzdWJtb2RzIjp7ImdjZSI6eyJ6b25lIjoidXMtY2VudHJhbDEtYyIsInByb2plY3RfaWQiOiJydWlkZXpoYW5nLTIiLCJwcm9qZWN0X251bWJlciI6IjQ3MDY1MjQyNjMwNSIsImluc3RhbmNlX25hbWUiOiJjdm0tdG9rZW4tY2xhaW1zIiwiaW5zdGFuY2VfaWQiOiI3MzMzMjUxNTQ2ODE2NDQ2MDY5In19LCJnb29nbGVfc2VydmljZV9hY2NvdW50cyI6WyI0NzA2NTI0MjYzMDUtY29tcHV0ZUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSJdfQ.Z8CIreuWj8vQKe9L5f5Ol80LcWBI_pFWwfT8qsky8hjtH3OMmqfUCJJRx-dX5Rqm5n4qe4dHacLgSWQlT9MDYyrtWDuocA2WtfPZLvM0DNc4HuoNPZtVrgMMcZ93Xyl5-tJuI5PbPshiDBT06_QaRm5l37RRL2CsxXZGCkKsxV1vs0gF5xZgSNmhDqg3q1fONhA3VglZ-H0SHAvMNr1qwXDKrQxdYxyFfEMLkcsRxSXlR5mLCbMIFptGTPXt-k83xJzCipuKSiKJrwaRdZTmlapn7UtaTRLvG3YCmXPg6oOvNKtE8T4KeBY36EdzR0Fdmz_pXSbWL-q8-y90VxDxwQ

Das folgende Beispiel zeigt ein decodiertes Token:

{
  "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"
  ]
}

Die Elemente im Token werden in den folgenden Abschnitten näher erläutert.

Token-Artikel

In der folgenden Tabelle werden die Elemente der obersten Ebene in einem Attestierungstoken beschrieben. Diese Elemente entsprechen der OpenID Connect 1.0-Spezifikation.

well-known-Endpunktwerte Beschreibung
claims_supported Weitere Informationen finden Sie unter Top-Level-Ansprüche.
id_token_signing_alg_values_supported Die vom Token unterstützten Signaturalgorithmen (alg-Werte). Confidential VM unterstützt den RS256-Algorithmus.
issuer

Das HTTPS-Schema, das von Confidential VM als Aussteller-ID verwendet wird.

Der Wert ist https://confidentialcomputing.googleapis.com.

jwks_uri

Der Pfad zu den öffentlichen Schlüsseln, die zum Überprüfen der Tokensignatur verwendet werden. Sie können diese Schlüssel in einem Cloud Storage-Bucket veröffentlichen.

Die jwks_uri-Schlüssel finden Sie unter https://www.googleapis.com/service_accounts/v1/metadata/jwk/signer@confidentialspace-sign.iam.gserviceaccount.com.

Ein Beispielwert ist https://example.storage.googleapis.com/jwks.json.

response_types_supported Die Liste der unterstützten Confidential VM-Antworttypen. Confidential VM unterstützt id_token.
scopes_supported Die OAuth 2.0-Bereichswerte, die von der Confidential VM-Instanz unterstützt werden. Confidential Space unterstützt nur openid.
subject_types_supported Die von Confidential VM unterstützten Typen von Subjekt-IDs. Confidential VM unterstützt public.

Ansprüche der obersten Ebene

In der folgenden Tabelle werden die unterstützten Claims der obersten Ebene im Attestierungstoken beschrieben.

Anforderung Typ Beschreibung
aud String

Die Zielgruppe. Für das Standardtoken, das mit einem Workload Identity-Pool verwendet wird, ist die Zielgruppe https://sts.googleapis.com. Dieses Token wird jede Stunde vom Launcher in der Confidential VM-Instanz abgerufen.

Bei Tokens mit benutzerdefinierten Zielgruppen wird die Zielgruppe aus der Zielgruppe in der Tokenanfrage übernommen. Die maximale Länge beträgt 512 Bytes.

dbgstat String Der Debugging-Status der Hardware. In Produktions-Images ist der Wert disabled-since-boot. In Debug-Bildern ist der Wert enabled.
eat_nonce String oder String-Array Einen oder mehrere Nounces für das Attestierungstoken. Die Werte werden aus den Tokenoptionen übernommen, die in der benutzerdefinierten Tokenanfrage gesendet wurden. Jede Nonce muss zwischen 10 und 74 Byte (einschließlich) lang sein. Es sind maximal sechs Nounces zulässig.
exp Int, Unix-Zeitstempel Die Ablaufzeit, nach der das Token nicht mehr für die Verarbeitung akzeptiert werden darf. Der Wert ist eine JSON-Zahl, die die Anzahl der Sekunden ab 1970-01-01T0:0:0Z bis zum Ablaufdatum in UTC angibt.
google_service_accounts String-Array Die validierten Dienstkonten, auf denen die Confidential VM-Arbeitslast ausgeführt wird.
hwmodel String

Die eindeutige Kennung für das Hardware-Token. Die Kennzeichnung muss einer der folgenden Werte sein:

  • GCP_AMD_SEV
  • GCP_AMD_SEV_ES
  • GCP_SHIELDED_VM
  • GCP_INTEL_TDX
iat Int, Unix-Zeitstempel Der Zeitpunkt, zu dem das JWT ausgestellt wurde. Der Wert ist eine JSON-Zahl, die die Anzahl der Sekunden ab 1970-01-01T0:0:0Z bis zum Zeitpunkt des Problems in UTC darstellt.
iss String Der Aussteller des Tokens, der auf https://confidentialcomputing.googleapis.com gesetzt ist.
nbf Int, Unix-Zeitstempel Die Zeit, nach der das JWT verarbeitet werden darf. Der Wert ist eine JSON-Zahl, die die Anzahl der Sekunden ab 1970-01-01T0:0:0Z in UTC angibt.
oemid Uint64 Die Private Enterprise Number (PEN) von Google ist 11129.
secboot Boolesch Ob Secure Boot aktiviert ist. Dadurch wird dafür gesorgt, dass die Firmware und das Betriebssystem während des VM-Bootvorgangs authentifiziert werden. Dieser Wert ist immer true.
sub String Das Subjekt, das die voll qualifizierte VM-ID für die Confidential VM ist. Beispiel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID. Dieses Format wird als selfLink der Instanz bezeichnet.
submods Array Eine Reihe verschiedener Behauptungen. Weitere Informationen finden Sie unter Ansprüche für Submods.
swname String

Der Name des genehmigten Betriebssystems für die VM.

Der Wert ist immer GCE.

Ansprüche von Unter-Mods

In der folgenden Tabelle werden die submods-Claims im Attestierungstoken beschrieben.

Anforderung Typ Beschreibung
gce Objekt Weitere Informationen finden Sie unter Compute Engine-Ansprüche.

Compute Engine-Ansprüche

In der folgenden Tabelle werden die gce-Claims im Attestierungstoken beschrieben.

Anforderung Typ Beschreibung
instance_id String Die VM-Instanz-ID.
instance_name String Der Name der VM-Instanz.
project_id String Die Projekt-ID des Projekts, in dem die VM ausgeführt wird.
project_number String Die Projektnummer für das Projekt, in dem die VM ausgeführt wird.
zone String Die Compute Engine-Zone, in der die Confidential VM-Instanz ausgeführt wird.

Nächste Schritte