Confidential VM-Tokenansprüche

In diesem Dokument werden die Elemente beschrieben, die in Attestationstokens für Confidential VM enthalten sind, wie im well-known-Endpunkt für Confidential VM definiert. Die Tokens sind JSON Web Tokens (JWT).

Beispiel für ein Token

Das folgende Beispiel zeigt ein codiertes Attestierungstoken. Sie können es 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.

Tokenelemente

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

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

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

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

jwks_uri

Der Pfad zu den öffentlichen Schlüsseln, die zur Überprüfung 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 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 Typen von Subjekt-IDs, die von Confidential VM unterstützt werden. Confidential VM unterstützt public.

Unterstützte Ansprüche

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

Behauptung Typ Beschreibung
aud String Die Zielgruppe. Für das Standardtoken (das stündlich vom Launcher in Confidential VM abgerufen wird) ist die Zielgruppe https://sts.googleapis.com. Bei benutzerdefinierten Tokens wird die Zielgruppe aus der Zielgruppe in der Tokenanfrage echot. Die maximale Länge beträgt 512 Byte.
dbgstat String Der Debug-Status der Hardware. Bei Produktionsabbildern ist der Wert disabled-since-boot. In Debug-Images ist der Wert enabled.
eat_nonce String oder String-Array Eine oder mehrere Nonces für das Attestierungstoken. Die Werte werden aus den Tokenoptionen übernommen, die in der Anfrage für das benutzerdefinierte Token gesendet wurden. Jedes Nonce muss zwischen 10 und 74 Byte (einschließlich) lang sein. Es sind maximal sechs Nonces zulässig.
exp Ganzzahl, Unix-Zeitstempel Die Ablaufzeit, an oder nach der das Token nicht mehr zur Verarbeitung akzeptiert werden darf. Der Wert ist eine JSON-Zahl, die die Anzahl der Sekunden von 1970-01-01T00:00:00Z (UTC) bis zum Ablaufdatum angibt.
google_service_accounts String-Array Die validierten Dienstkonten, auf denen die Arbeitslast der vertraulichen VM ausgeführt wird.
hwmodel String

Die eindeutige Kennung für das Hardware-Token.

Die aktuellen Werte sind GCP_AMD_SEV, GCP_AMD_SEV_ES und GCP_SHIELDED_VM.

iat Ganzzahl, Unix-Zeitstempel Der Zeitpunkt, zu dem das JWT ausgestellt wurde. Der Wert ist eine JSON-Zahl, die die Anzahl der Sekunden seit dem 01.01.1970 00:00:00 UTC (gemessen in UTC) bis zum Zeitpunkt des Auftretens des Problems angibt.
iss String Der Aussteller des Tokens, der auf https://confidentialcomputing.googleapis.com festgelegt ist.
nbf Ganzzahl, Unix-Zeitstempel Die Zeit, vor der das JWT nicht mehr für die Verarbeitung verwendet werden kann.
oemid Uint64 Die Private Enterprise Number (PEN) von Google, also 11129.
secboot Boolesch Ob Secure Boot aktiviert ist, wodurch sichergestellt wird, dass die Firmware und das Betriebssystem während des VM-Bootvorgangs authentifiziert wurden.
sub String Das Subjekt, also die voll qualifizierte ID der virtuellen Maschine für die Confidential VM. 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 Ansprüche. Weitere Informationen findest du unter Submod-Ansprüchen.
swname String

Der Name des genehmigten Betriebssystems für die VM.

Wert ist GCE.

Ansprüche von Untermoderatoren

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

Behauptung Typ Beschreibung
gce Object Siehe Compute Engine-Anspruchsrechte.

Compute Engine-Anspruch

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

Behauptung 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 des Projekts, in dem die VM ausgeführt wird.
zone String Die Compute Engine-Zone, in der die Confidential VM ausgeführt wird.

Nächste Schritte