View a markdown version of this page

Atestar uma instância do Amazon EC2 com o AMD SEV-SNP - Amazon Elastic Compute Cloud

Atestar uma instância do Amazon EC2 com o AMD SEV-SNP

A declaração é um processo que permite que sua instância prove seu estado e sua identidade. Após habilitar o AMD SEV-SNP para a instância, será possível solicitar um relatório de atestado do AMD SEV-SNP para o processador subjacente. O relatório de declaração do AMD SEV-SNP contém um hash criptográfico, chamado de medição de lançamento, do conteúdo inicial da memória do convidado e do estado inicial da vCPU. O relatório de declaração AMD SEV-SNP é assinado com uma assinatura VCEK (em hosts dedicados) ou uma assinatura VLEK (em locação compartilhada) que remonta a uma raiz de confiança da AMD. É possível usar a medida de inicialização incluída no relatório de declaração para validar se a instância está sendo executada em um ambiente AMD genuíno e para validar o código de inicialização inicial usado para iniciar a instância.

Pré-requisito

Iniciar uma instância habilitada para o AMD SEV-SNP. Para obter mais informações, consulte Habilitar o AMD SEV-SNP para uma instância do EC2.

Declaração para instâncias em hosts dedicados

Os hosts dedicados usam uma chave de endosso por chip versionado (VCEK), uma chave de assinatura exclusiva por chip, para assinar o relatório de atestado. Você deve validar a cadeia de confiança do certificado VCEK até a raiz de confiança da AMD.

nota

O modelo de processador atualmente suportado é milan.

Pré-requisitos

Uma instância executada em um host dedicado habilitado para AMD SEV-SNP com Git, Cargo e Perl instalados.

Etapa 1: criar o utilitário snpguest

Nessa etapa, você instala e cria o utilitário snpguest, que você usa para gerar o relatório de declaração, obter os certificados necessários e validar o relatório de atestado.

  1. Conecte-se à sua instância.

  2. Verifique se os pré-requisitos estão instalados.

    $ perl --version; cargo --version; git --version
  3. Execute os comandos apresentados a seguir para desenvolver o utilitário snpguest usando o repositório snpguest repository.

    $ git clone https://github.com/virtee/snpguest.git $ cd snpguest $ cargo build -r $ cd target/release

Etapa 2: gerar o relatório de atestado

Gere uma solicitação para o relatório de atestado. O utilitário snpguest solicita o relatório de atestado do Processador de segurança do AMD via host e o grava em um arquivo binário. O exemplo apresentado a seguir cria uma solicitação randômica e armazena o relatório em report.bin.

$ ./snpguest report report.bin request-file.txt --random

Etapa 3: buscar e validar a cadeia de certificados VCEK

O relatório de certificação é assinado pelo VCEK, que é exclusivo do chip AMD em seu host dedicado. Você deve validar a cadeia de confiança do VCEK até a raiz de confiança da AMD.

  1. Obtenha o certificado VCEK do Serviço de distribuição de chaves AMD (KDS). O certificado é identificado pelo ID do chip e pela versão TCB do relatório de atestado.

    $ ./snpguest fetch vcek pem ./ ./report.bin --processor-model milan
  2. Obtenha os certificados raiz da AMD (AMD Root Key (ARK) e AMD SEV Key (ASK)) que formam a cadeia de confiança.

    $ ./snpguest fetch ca PEM ./ milan --endorser vcek
  3. Verifique a cadeia do certificado.

    $ ./snpguest verify certs ./

    O seguinte é um exemplo de saída.

    The AMD ARK was self-signed! The AMD ASK was signed by the AMD ARK! The VCEK was signed by the AMD ASK!

Opcional: para maior transparência, você pode verificar a cadeia de forma independente baixando os certificados diretamente da AMD e usando openssl.

$ curl --proto '=https' --tlsv1.2 -sSf https://kdsintf.amd.com/vcek/v1/Milan/cert_chain -o ./cert_chain.pem $ openssl verify --CAfile ./cert_chain.pem vcek.pem

O seguinte é um exemplo de saída.

vcek.pem: OK

Etapa 4: validar a assinatura do relatório de atestado

Verifique se o relatório do atestado foi assinado pelo certificado VCEK. Isso confirma que o relatório foi gerado em um hardware AMD genuíno e que não foi adulterado.

$ ./snpguest verify attestation ./ report.bin

O seguinte é um exemplo de saída.

Reported TCB Boot Loader from certificate matches the attestation report. Reported TCB TEE from certificate matches the attestation report. Reported TCB SNP from certificate matches the attestation report. Reported TCB Microcode from certificate matches the attestation report. VEK signed the Attestation Report!

Os campos de versão do TCB (Trusted Computing Base) confirmam que as versões do firmware no certificado correspondem às relatadas no relatório de atestado. A linha final confirma que o VCEK assinou o relatório.

Atestado para instâncias em locação compartilhada

As instâncias de locação compartilhada usam uma Versioned Loaded Endorsement Key (VLEK) emitida pela AMD para AWS. Você deve validar a cadeia de confiança do certificado VLEK até a raiz de confiança da AMD.

Etapa 1: criar o utilitário snpguest

Nessa etapa, você instala e cria o utilitário snpguest, que você usa para gerar o relatório de declaração, obter os certificados necessários e validar o relatório de atestado.

  1. Conecte-se à sua instância.

  2. Execute os comandos apresentados a seguir para desenvolver o utilitário snpguest usando o repositório snpguest repository.

    $ git clone https://github.com/virtee/snpguest.git $ cd snpguest $ cargo build -r $ cd target/release

Etapa 2: gerar o relatório de atestado

Gere uma solicitação para o relatório de atestado. O utilitário snpguest solicita o relatório de atestado do host e o grava em um arquivo binário. O exemplo apresentado a seguir cria uma solicitação randômica e armazena o relatório em report.bin.

$ ./snpguest report report.bin request-file.txt --random

Solicite os certificados usando a memória do host e armazene-os como arquivos PEM.

$ ./snpguest certificates PEM ./

Etapa 3: buscar e validar a cadeia de certificados VLEK

O relatório de declaração é assinado pelo VLEK, emitido pela AMD para AWS. Você deve validar a cadeia de confiança do VLEK até a raiz de confiança da AMD.

  1. Faça o download dos certificados VLEK de raiz de confiança do Serviço de distribuição de chaves AMD oficial para o diretório atual.

    $ sudo curl --proto '=https' --tlsv1.2 -sSf https://kdsintf.amd.com/vlek/v1/Milan/cert_chain -o ./cert_chain.pem
  2. Use openssl para validar se o certificado VLEK está assinado pela raiz dos certificados de confiança da AMD.

    $ sudo openssl verify --CAfile ./cert_chain.pem vlek.pem

    O seguinte é um exemplo de saída.

    vlek.pem: OK

Etapa 4: validar a assinatura do relatório de atestado

Verifique se o relatório do atestado foi assinado pelo certificado VLEK. Isso confirma que o relatório foi gerado em um hardware AMD genuíno e que não foi adulterado.

$ ./snpguest verify attestation ./ report.bin

O seguinte é um exemplo de saída.

Reported TCB Boot Loader from certificate matches the attestation report. Reported TCB TEE from certificate matches the attestation report. Reported TCB SNP from certificate matches the attestation report. Reported TCB Microcode from certificate matches the attestation report. VEK signed the Attestation Report!