Inicializar uma VM com segurança

A inicialização segura ajuda a garantir que o sistema execute apenas um software autêntico. Para isso, ela verifica a assinatura digital de todos os componentes de inicialização e interrompe o processo de inicialização se a verificação da assinatura falhar.

O Google Distributed Cloud (GDC) isolado usa o firmware da Unified Extensible Firmware Interface (UEFI) para gerenciar certificados e chaves usados na assinatura de software.

O firmware UEFI gerencia com segurança os certificados que contêm as chaves usadas pelos fabricantes de software para assinar o firmware do sistema, o carregador de inicialização do sistema e todos os binários que eles carregam. Para consultar a documentação do UEFI, acesse https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf.

Em cada inicialização, o firmware UEFI verifica a assinatura digital de cada componente de inicialização em relação às chaves aprovadas armazenadas com segurança. Qualquer componente de inicialização que não esteja devidamente assinado ou que simplesmente não tenha sido assinado não poderá ser executado. Para ativar a inicialização segura, defina o tipo bootloader da VM como uefi.

Um vTPM é um módulo de plataforma confiável virtualizado. Consulte https://trustedcomputinggroup.org/trusted-platform-module-tpm-summary/ para mais informações sobre vTPMs. Ele é um chip de computador especializado que pode ser usado para proteger objetos, como chaves e certificados, que você usa para autenticar o acesso ao sistema. Também é possível usar o vTPM para proteger chaves secretas por meio de blindagem ou bloqueio. Para mais informações sobre o armazenamento lacrado, consulte https://en.wikipedia.org/wiki/Trusted_Computing#SEALED-STORAGE. Consulte o projeto Go-TPM no GitHub: https://github.com/google/go-tpm (em inglês), para exemplos de linguagem Go que ilustram como usar um vTPM para essa finalidade.

Antes de começar

Para usar os comandos da interface de linha de comando (CLI) gdcloud, verifique se você baixou, instalou e configurou a CLI gdcloud. Todos os comandos do Distributed Cloud usam a CLI gdcloud ou kubectl e exigem um ambiente de sistema operacional (SO).

Extrair o caminho do arquivo kubeconfig

Para executar comandos no servidor da API Management, verifique se você tem os seguintes recursos:

  1. Faça login e gere o arquivo kubeconfig para o servidor da API Management se você não tiver um.

  2. Use o caminho para o arquivo kubeconfig do servidor da API Management para substituir MANAGEMENT_API_SERVER nestas instruções.

Solicitar permissões e acesso

Para executar as tarefas listadas nesta página, é preciso ter o papel de administrador de máquina virtual do projeto. Siga as etapas para verificar se você tem o papel de administrador de máquinas virtuais do projeto (project-vm-admin) no namespace do projeto em que a VM reside.

Ativar a inicialização segura

Ative a inicialização segura para uma VM. Use as instruções a seguir para uma VM chamada VM_NAME no namespace do projeto (PROJECT_NAMESPACE).

  1. Atualize o recurso personalizado da VM para ativar a inicialização segura:

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
     shieldConfig:
       bootType: uefi
       enableSecureBoot: true
    '
    
  2. Se a VM estiver em execução, reinicie-a seguindo as instruções para reiniciar uma VM.

  3. Verifique se você ativou a inicialização segura. Estabeleça uma conexão SSH com a VM e execute o seguinte comando:

    mokutil --sb-state
    

    Se você tiver ativado a inicialização segura, o comando vai retornar SecureBoot enabled.

    Se a ferramenta mokutil informar que você não ativou a inicialização segura, siga as etapas na seção Resolver problemas de configuração da inicialização segura.

Resolver problemas na configuração de inicialização segura

  1. Abra o recurso personalizado da VM em um editor:

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. Procure campos ou valores ausentes, conforme mostrado no campo spec em "Execute o seguinte comando". Esses campos são obrigatórios.

  3. Se algum estiver faltando ou incorreto, edite spec para adicionar os campos ausentes e corrigir os valores errados.

  4. Salve o arquivo.

  5. Siga as etapas em Reiniciar a VM.

Se as etapas anteriores não resolverem o problema, consulte a documentação correspondente ao sistema operacional (SO) da VM para verificar se a versão do SO é compatível com a inicialização segura.

Ativar o módulo de plataforma confiável virtual (vTPM)

Ative o vTPM para uma VM. Use as instruções a seguir para uma VM chamada VM_NAME no namespace do projeto (PROJECT_NAMESPACE).

  1. Atualize seu recurso personalizado de VM para ativar o vTPM:

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
       shieldConfig:
          enableVtpm: true
    '
    
  2. Se a VM estiver em execução, reinicie-a seguindo as instruções para reiniciar uma VM.

  3. Verifique se você ativou o vTPM. Estabeleça uma conexão SSH com a VM e execute o seguinte comando:

    dmesg | grep -i tpm
    

    Se você tiver ativado o vTPM, o comando vai retornar o módulo TPM como parte das tabelas ACPI. A saída será assim:

    [    7.620985] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1, rev-id 1)
    

    Se o ACPI tables não mostrar o módulo TPM, siga as etapas na seção Solução de problemas da configuração do vTPM.

Resolver problemas de configuração do vTPM

  1. Abra o recurso personalizado da VM em um editor:

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. Procure campos ou valores ausentes, conforme mostrado no campo spec em Execute o seguinte comando. Esses campos são obrigatórios.

  3. Se algum estiver faltando ou incorreto, edite spec para adicionar os campos ausentes e corrigir os valores errados.

  4. Salve o arquivo.

  5. Siga as etapas em Reiniciar a VM.

Se as etapas anteriores não resolverem o problema, consulte a documentação correspondente ao sistema operacional (SO) da VM para verificar se a versão do SO é compatível com o vTPM.