Este documento descreve os itens presentes nos tokens de atestação da Confidential VM, conforme definido no endpoint well-known
para a Confidential VM. Os tokens são símbolos da Web JSON (JWT).
Exemplo de token
Segue-se um exemplo de um token de atestação codificado. Pode usar https://jwt.io/ para descodificá-lo:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjFjNjdmYWVhYjRhYzE1ZDJmNmZmODMwY2E2ZmM1N2YyYmVhM2Y0YmIiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJcdTAwM2NZT1VSQVVESUVOQ0VcdTAwM2UiLCJleHAiOjE3MTU5NzE2OTcsImlhdCI6MTcxNTk2ODA5NywiaXNzIjoiaHR0cHM6Ly9jb25maWRlbnRpYWxjb21wdXRpbmcuZ29vZ2xlYXBpcy5jb20iLCJuYmYiOjE3MTU5NjgwOTcsInN1YiI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2NvbXB1dGUvdjEvcHJvamVjdHMvcnVpZGV6aGFuZy0yL3pvbmVzL3VzLWNlbnRyYWwxLWMvaW5zdGFuY2VzL2N2bS10b2tlbi1jbGFpbXMiLCJlYXRfbm9uY2UiOlsidGhpc0lzQWN1c3RvbU5vbmNlIiwidGhpc0lzQU11Y2hMb25nZXJDdXN0b21Ob25jZVdpdGhQYWRkaW5nRm9yNzRCeXRlczAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSwic2VjYm9vdCI6ZmFsc2UsIm9lbWlkIjoxMTEyOSwiaHdtb2RlbCI6IkdDUF9BTURfU0VWIiwic3duYW1lIjoiR0NFIiwiZGJnc3RhdCI6ImVuYWJsZWQiLCJzdWJtb2RzIjp7ImdjZSI6eyJ6b25lIjoidXMtY2VudHJhbDEtYyIsInByb2plY3RfaWQiOiJydWlkZXpoYW5nLTIiLCJwcm9qZWN0X251bWJlciI6IjQ3MDY1MjQyNjMwNSIsImluc3RhbmNlX25hbWUiOiJjdm0tdG9rZW4tY2xhaW1zIiwiaW5zdGFuY2VfaWQiOiI3MzMzMjUxNTQ2ODE2NDQ2MDY5In19LCJnb29nbGVfc2VydmljZV9hY2NvdW50cyI6WyI0NzA2NTI0MjYzMDUtY29tcHV0ZUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSJdfQ.Z8CIreuWj8vQKe9L5f5Ol80LcWBI_pFWwfT8qsky8hjtH3OMmqfUCJJRx-dX5Rqm5n4qe4dHacLgSWQlT9MDYyrtWDuocA2WtfPZLvM0DNc4HuoNPZtVrgMMcZ93Xyl5-tJuI5PbPshiDBT06_QaRm5l37RRL2CsxXZGCkKsxV1vs0gF5xZgSNmhDqg3q1fONhA3VglZ-H0SHAvMNr1qwXDKrQxdYxyFfEMLkcsRxSXlR5mLCbMIFptGTPXt-k83xJzCipuKSiKJrwaRdZTmlapn7UtaTRLvG3YCmXPg6oOvNKtE8T4KeBY36EdzR0Fdmz_pXSbWL-q8-y90VxDxwQ
Segue-se um exemplo de um token descodificado:
{
"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"
]
}
Os itens no token são explicados mais detalhadamente nas secções seguintes.
Itens de token
A tabela seguinte descreve os itens de nível superior num token de atestação. Estes itens estão em conformidade com a especificação OpenID Connect 1.0.
Valores dos pontos finais well-known |
Descrição |
---|---|
claims_supported |
Consulte as reivindicações de nível superior. |
id_token_signing_alg_values_supported |
Os algoritmos de assinatura (valores alg ) suportados pelo token. A VM confidencial suporta o algoritmo RS256 . |
issuer |
O esquema HTTPS que a VM confidencial usa como identificador do emissor. O valor é
|
jwks_uri |
O caminho para as chaves públicas usadas para validar a assinatura do token. Pode publicar estas chaves num contentor do Cloud Storage. Pode encontrar as chaves Um valor de exemplo é
|
response_types_supported |
A lista de tipos de respostas de VMs confidenciais suportados. A Confidential VM suporta id_token .
|
scopes_supported |
Os valores de âmbito do
OAuth 2.0
que a instância de VM confidencial suporta.
O espaço confidencial só suporta openid . |
subject_types_supported |
Os tipos de identificadores de assunto que a VM confidencial
suporta. A Confidential VM suporta
public . |
Reivindicações de nível superior
A tabela seguinte descreve as reivindicações suportadas de nível superior no token de atestação.
Reivindicar | Tipo | Descrição |
---|---|---|
aud |
String |
O público. Para o token predefinido usado com um Workload Identity Pool, o público-alvo é Para tokens com públicos-alvo personalizados, o público-alvo é repetido a partir do público-alvo no pedido de token. O comprimento máximo é de 512 bytes. |
dbgstat |
String |
O estado de depuração do hardware. Nas imagens de produção, o valor é
disabled-since-boot . Nas imagens de depuração, o valor é
enabled .
|
eat_nonce |
String ou matriz de strings | Um ou mais valores únicos para o token de atestação. Os valores são repetidos a partir das opções de token enviadas no pedido de token personalizado. Cada nonce tem de ter entre 10 e 74 bytes, inclusive. É permitido um máximo de seis nonces. |
exp |
Int, indicação de tempo Unix |
A hora de expiração a partir da qual o token não deve ser aceite para processamento. O valor é um número JSON que representa o número de segundos a partir de 1970-01-01T0:0:0Z , medido em UTC, até à hora de validade.
|
google_service_accounts |
Matriz de strings | As contas de serviço validadas que estão a executar a carga de trabalho da VM confidencial. |
hwmodel |
String |
O identificador exclusivo do token de hardware. O identificador tem de ser um dos seguintes valores:
|
iat |
Int, indicação de tempo Unix |
A hora em que o JWT foi emitido. O valor é um número JSON que representa o número de segundos desde 1970-01-01T0:0:0Z , medido em UTC, até à hora de emissão.
|
iss |
String |
O emissor do token, que está definido como
https://confidentialcomputing.googleapis.com .
|
nbf |
Int, indicação de tempo Unix |
A hora após a qual o JWT pode ser processado. O valor é um número JSON que representa o número de segundos a partir de 1970-01-01T0:0:0Z , medido em UTC.
|
oemid |
Uint64 |
O
Número de empresa privada (PEN) da Google, que é 11129 .
|
secboot |
Booleano |
Se o arranque seguro está ativado, o que garante que o firmware e o sistema operativo são autenticados durante o processo de arranque da VM. Este
valor é sempre true .
|
sub |
String |
O assunto, que é o ID da máquina virtual totalmente qualificado para a VM confidencial. Por exemplo,
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID .
Este formato é conhecido como o
selfLink da instância.
|
submods |
Matriz | Uma variedade de várias reivindicações. Consulte as reivindicações de submoderação. |
swname |
String |
O nome do sistema operativo aprovado para a VM. O valor é sempre |
Reivindicações de submods
A tabela seguinte descreve as reivindicações submods
no token de atestação.
Reivindicar | Tipo | Descrição |
---|---|---|
gce |
Objeto | Consulte as reivindicações do Compute Engine. |
Reivindicações do Compute Engine
A tabela seguinte descreve as reivindicações gce
no token de atestação.
Reivindicar | Tipo | Descrição |
---|---|---|
instance_id |
String | O ID da instância de VM. |
instance_name |
String | O nome da instância de VM. |
project_id |
String | O ID do projeto do projeto no qual a VM está a ser executada. |
project_number |
String | O número do projeto no qual a VM está a ser executada. |
zone |
String | A zona do Compute Engine onde a instância de VM confidencial está a ser executada. |
O que se segue?
Consulte o rascunho da IETF para O token de atestação de entidade (EAT) para mais informações sobre as reivindicações de atestação.
Consulte a especificação OpenID Connect Core 1.0 para mais informações sobre as reivindicações de tokens OpenID.
Para mais informações sobre tokens e como obtê-los, consulte o Codelab de atestação de vTPM.