Ações de token de VM confidencial

Este documento descreve os itens presentes nos tokens de atestado de VM confidencial, conforme definido no endpoint well-known para VM confidencial. Os tokens são JSON Web Tokens (JWT).

Exemplo de token

Confira a seguir um exemplo de token de comprovação codificado. Use https://jwt.io/ (em inglês) para decodificar:

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

Confira a seguir um exemplo de token decodificado:

{
  "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 com mais detalhes nas seções a seguir.

Itens de token

A tabela a seguir descreve os itens de alto nível em um token de comprovação. Esses itens estão em conformidade com a especificação OpenID Connect 1.0.

Valores de endpoint well-known Descrição
claims_supported Consulte Reivindicações de nível superior.
id_token_signing_alg_values_supported Os algoritmos de assinatura (valores alg) compatíveis com o token. A VM confidencial é compatível com o algoritmo RS256.
issuer

O esquema HTTPS que a VM confidencial usa como identificador do emissor.

O valor é https://confidentialcomputing.googleapis.com.

jwks_uri

O caminho para as chaves públicas usadas para verificar a assinatura do token. Você pode publicar essas chaves em um bucket do Cloud Storage.

Encontre as chaves jwks_uri em https://www.googleapis.com/service_accounts/v1/metadata/jwk/signer@confidentialspace-sign.iam.gserviceaccount.com.

Um valor de exemplo é https://example.storage.googleapis.com/jwks.json.

response_types_supported A lista de tipos de resposta de VM confidencial compatíveis. A VM confidencial é compatível com id_token.
scopes_supported Os valores de escopo do OAuth 2.0 compatíveis com a instância de VM confidencial. O Confidential Space é compatível apenas com openid.
subject_types_supported Os tipos de identificadores de assunto compatíveis com a VM confidencial. A VM confidencial é compatível com public.

Reivindicações de nível superior

A tabela a seguir descreve as declarações de nível superior compatíveis no token de atestado.

Reivindicação Tipo Descrição
aud String

O público-alvo. Para o token padrão usado com um pool de identidades de carga de trabalho, o público-alvo é https://sts.googleapis.com. Esse token é buscado a cada hora pelo iniciador na instância de VM confidencial.

Para tokens com públicos-alvo personalizados, o público-alvo é repetido da solicitação de token. O comprimento máximo é de 512 bytes.

dbgstat String O status de depuração do hardware. Em imagens de produção, o valor é disabled-since-boot. Em imagens de depuração, o valor é enabled.
eat_nonce String ou matriz de strings Um ou mais nonces para o token de atestado. Os valores são repetidos das opções de token enviadas na solicitação de token personalizado. Cada nonce precisa ter entre 10 e 74 bytes, inclusive. São permitidos no máximo seis nonces.
exp Int, carimbo de data/hora do Unix O prazo de validade em ou após o qual o token não pode ser aceito para processamento. O valor é um número JSON que representa a quantidade de segundos de 1970-01-01T0:0:0Z, medidos em UTC, até o horário de expiração.
google_service_accounts Matriz de strings As contas de serviço validadas que estão executando a carga de trabalho da VM confidencial.
hwmodel String

O identificador exclusivo do token de hardware. O identificador precisa ser um dos seguintes valores:

  • GCP_AMD_SEV
  • GCP_AMD_SEV_ES
  • GCP_SHIELDED_VM
  • GCP_INTEL_TDX
iat Int, carimbo de data/hora do Unix O horário em que o JWT foi emitido. O valor é um número JSON que representa o número de segundos de 1970-01-01T0:0:0Z, medido em UTC até o horário do problema.
iss String O emissor do token, que é definido como https://confidentialcomputing.googleapis.com.
nbf Int, carimbo de data/hora do Unix O tempo após o qual o JWT pode ser processado. O valor é um número JSON que representa a quantidade de segundos desde 1970-01-01T0:0:0Z, medidos em UTC.
oemid Uint64 O Número de empresa privada (PEN, na sigla em inglês) do Google, que é 11129.
secboot Booleano Se a inicialização segura está ativada, o que garante que o firmware e o sistema operacional sejam autenticados durante o processo de inicialização da VM. Esse valor é sempre true.
sub String O assunto, que é o ID totalmente qualificado da máquina virtual para a VM confidencial. Exemplo: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID Esse formato é conhecido como selfLink da instância.
submods Matriz Uma matriz de várias declarações. Consulte Reivindicações de submod.
swname String

O nome do sistema operacional aprovado para a VM.

O valor é sempre GCE.

Reivindicações de submoderadores

A tabela a seguir descreve as declarações submods no token de atestado.

Reivindicação Tipo Descrição
gce Objeto Consulte Reivindicações do Compute Engine.

Reivindicações do Compute Engine

A tabela a seguir descreve as declarações gce no token de atestado.

Reivindicação 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 em que a VM está sendo executada.
project_number String O número do projeto em que a VM está sendo executada.
zone String A zona do Compute Engine em que a instância de VM confidencial está em execução.

A seguir