Verificar se uma instância de VM do Intel TDX é executada no Google Cloud

Para determinar que uma instância de VM confidencial do Intel TDX está em execução Google Cloud, é necessário estabelecer a provenance dela. O estabelecimento da origem envolve as seguintes verificações:

  • Verificação de cotação e vinculação de desafio: verifique a autenticidade da cotação do Intel TDX usando o certificado raiz incorporado da Intel e, opcionalmente, verifique a atualização em relação a um desafio esperado no campo REPORT_DATA da cotação.

  • Verificação de origem do host: extraia o ID de provisionamento da plataforma (PPID) do certificado PCK incorporado da cotação. Use o PPID para buscar o documento JSON do registro do host em um bucket do Cloud Storage para verificar a origem.

  • Verificação de origem da instância: use o número do projeto, a zona e o ID da instância (PZID) da instância de VM confidencial para calcular um resumo SHA-384, e, em seguida, verifique se o resumo corresponde ao valor do campo MR_OWNER na cotação do Intel TDX.

Verificar a origem remotamente

Recomendamos o uso da gceprovenance ferramenta para determinar a origem das máquinas Intel TDX. A ferramenta automatiza a extração dos valores necessários e a busca do documento de origem.

Para verificar a origem remotamente usando gceprovenance, siga estas instruções:

  1. Clone o repositório do GitHub go-tdx-guest no seu verificador remoto:

    git clone https://github.com/google/go-tdx-guest.git
    
  2. Dependendo do sistema operacional convidado, talvez seja necessário instalar algumas dependências do Go para criar as ferramentas em go-tdx-guest. A maneira de fazer isso muda dependendo do sistema operacional. Por exemplo, os comandos a seguir instalam as dependências necessárias no Ubuntu:

    sudo apt update
    sudo apt install golang-go build-essential
    
  3. Crie a ferramenta gceprovenance:

    go build -C go-tdx-guest/tools/gceprovenance .
    
  4. Gere um desafio de 64 bytes que a instância de VM confidencial do Intel TDX precisa vincular à cotação:

    head -c 64 /dev/urandom > challenge.bin
    
  5. Envie o arquivo de desafio para a instância de VM confidencial do Intel TDX que você quer verificar.

  6. Na instância de VM confidencial do Intel TDX, transmita o arquivo de desafio como entrada (inblob) para o Linux ConfigFS em /sys/kernel/config/tsm/report/:

    sudo mkdir -p /sys/kernel/config/tsm/report/report0
    sudo sh -c 'cat challenge.bin > /sys/kernel/config/tsm/report/report0/inblob'
    

    O desafio é gravado no campo REPORT_DATA da cotação pelo sistema.

  7. Recupere os bytes de cotação brutos do arquivo outblob resultante e limpe o diretório report0:

    sudo cat /sys/kernel/config/tsm/report/report0/outblob > quote.bin
    sudo rmdir /sys/kernel/config/tsm/report/report0
    
  8. Consulte o servidor de metadados local para o ID da instância, o número do projeto e a zona da instância de VM confidencial:

    PROJECT_NUMBER=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/numeric-project-id" -H "Metadata-Flavor: Google")
    INSTANCE_ID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/id" -H "Metadata-Flavor: Google")
    ZONE_PATH=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/zone" -H "Metadata-Flavor: Google")
    ZONE=$(basename "$ZONE_PATH")
    
  9. Envie o binário de cotação (quote.bin), o número do projeto, o ID da instância e a zona para o verificador remoto.

  10. No verificador remoto, converta o desafio em uma string hexadecimal de 128 caracteres e transmita-o para gceprovenance. A ferramenta verifica a assinatura da cotação e as vinculações de origem:

    CHALLENGE_HEX=$(hexdump -v -e '/1 "%02x"' challenge.bin)
    ./go-tdx-guest/tools/gceprovenance/gceprovenance verify \
        -quote PATH_TO_QUOTE \
        -instance projects/PROJECT_NUMBER/zones/ZONE/instances/INSTANCE_ID \
        -challenge $CHALLENGE_HEX
    

    Preencha o seguinte:

    • PATH_TO_QUOTE: o caminho para o arquivo de cotação fornecido.

    • PROJECT_NUMBER: o número do projeto fornecido.

    • ZONE: a zona fornecida.

    • INSTANCE_ID: o ID da instância de VM confidencial fornecido.

    Uma resposta bem-sucedida é semelhante a esta:

    GCE TDX provenance verification: OK
    
    Instance
      Zone: ZONE
      Project: PROJECT_NUMBER
      Instance ID: INSTANCE_ID
    
    Checks
      Quote verification: OK
      REPORT_DATA challenge: OK
      Host registry document: found
      PZID binding: OK
    
    PPID: PPID
    Quote: tdx_quote.bin
    Host registry: host_registry.json
    

Para outros gceprovenance comandos, consulte o repositório do GitHub.