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 |
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 Ein Beispielwert ist
|
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 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:
|
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 |
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
Weitere Informationen zu Attestierungsansprüchen finden Sie im IETF-Entwurf für The Entity Attestation Token (EAT).
Weitere Informationen zu OpenID-Token-Claims finden Sie in OpenID Connect Core 1.0.
Weitere Informationen zu Tokens und zum Abrufen von Tokens finden Sie im vTPM Attestation Codelab.