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 |
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 Ein Beispielwert ist |
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 |
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 |
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
Weitere Informationen zu Attestationsansprüchen finden Sie im IETF-Entwurf für das Entity Attestation Token (EAT).
Weitere Informationen zu OpenID-Token-Ansprüchen finden Sie in der OpenID Connect Core 1.0-Dokumentation.
Weitere Informationen zu Tokens und zum Abrufen finden Sie im Codelab zur vTPM-Attestierung.