View a markdown version of this page

AMD SEV-SNP로 Amazon EC2 인스턴스 증명 - - Amazon Elastic Compute Cloud

AMD SEV-SNP로 Amazon EC2 인스턴스 증명

증명은 인스턴스가 상태 및 ID를 증명할 수 있는 프로세스입니다. 인스턴스에서 AMD SEV-SNP를 활성화한 후에는 기본 프로세서에 AMD SEV-SNP 증명 보고서를 요청할 수 있습니다. AMD SEV-SNP 증명 보고서에는 초기 게스트 메모리 콘텐츠 및 초기 vCPU 상태에 대한 시작 측정값이라는 암호화 해시가 포함되어 있습니다. 증명 보고서는 AMD 루트 신뢰 체인으로 연결되는 VCEK 서명(전용 호스트의 경우) 또는 VLEK 서명(공유 테넌시의 경우)으로 서명됩니다. 증명 보고서에 포함된 시작 측정값을 사용하여 인스턴스가 정품 AMD 환경에서 실행되고 있는지 확인하고 인스턴스를 시작하는 데 사용된 초기 부팅 코드를 확인할 수 있습니다.

사전 조건

AMD SEV-SNP에 대해 활성화된 인스턴스를 시작합니다. 자세한 내용은 EC2 인스턴스에서 AMD SEV-SNP 활성화 섹션을 참조하세요.

전용 호스트 인스턴스에 대한 증명

전용 호스트는 칩별 고유 서명 키인 VCEK(Versioned Chip Endorsement Key)를 사용하여 증명 보고서에 서명합니다. VCEK 인증서에서 AMD 루트 신뢰까지의 신뢰 체인을 검증해야 합니다.

참고

현재 지원되는 프로세서 모델은 milan입니다.

사전 조건

Git, Cargo, Perl이 설치된 AMD SEV-SNP가 활성화된 전용 호스트에서 실행 중인 인스턴스입니다.

1단계: snpguest 유틸리티 빌드

이 단계에서는 증명 보고서 생성, 필요한 인증서 가져오기, 증명 보고서 검증에 사용하는 snpguest 유틸리티를 설치하고 빌드합니다.

  1. 인스턴스에 연결합니다.

  2. 필수 구성 요소가 설치되어 있는지 확인합니다.

    $ perl --version; cargo --version; git --version
  3. snpguest repository에서 snpguest 유틸리티를 구축하려면 다음 명령을 실행합니다.

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

2단계: 증명 보고서 생성

증명 보고서에 대한 요청을 생성합니다. snpguest 유틸리티는 호스트를 통해 AMD Secure Processor에 증명 보고서를 요청하고 이를 바이너리 파일에 기록합니다. 다음 예에서는 임의의 요청 nonce를 생성하고 보고서를 report.bin에 저장합니다.

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

3단계: VCEK 인증서 체인 가져오기 및 검증

증명 보고서는 전용 호스트의 AMD 칩에 고유한 VCEK로 서명됩니다. VCEK에서 AMD 루트 신뢰까지의 신뢰 체인을 검증해야 합니다.

  1. AMD Key Distribution Service(KDS)에서 VCEK 인증서를 가져옵니다. 인증서는 증명 보고서의 칩 ID와 TCB 버전으로 식별됩니다.

    $ ./snpguest fetch vcek pem ./ ./report.bin --processor-model milan
  2. 신뢰 체인을 구성하는 AMD 루트 인증서(AMD Root Key(ARK) 및 AMD SEV Key(ASK))를 가져옵니다.

    $ ./snpguest fetch ca PEM ./ milan --endorser vcek
  3. 인증서 체인을 검증합니다.

    $ ./snpguest verify certs ./

    다음은 예제 출력입니다.

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

선택 사항: 추가적인 투명성을 위해 AMD에서 직접 인증서를 다운로드하고 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

다음은 예제 출력입니다.

vcek.pem: OK

4단계: 증명 보고서 서명 확인

증명 보고서가 VCEK 인증서로 서명되었는지 검증합니다. 이는 보고서가 정품 AMD 하드웨어에서 생성되었으며 변조되지 않았음을 확인합니다.

$ ./snpguest verify attestation ./ report.bin

다음은 예제 출력입니다.

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!

TCB(Trusted Computing Base) 버전 필드는 인증서의 펌웨어 버전이 증명 보고서에 보고된 버전과 일치하는지 확인합니다. 마지막 줄은 VCEK가 보고서에 서명했음을 확인합니다.

공유 테넌시 인스턴스에 대한 증명

공유 테넌시 인스턴스는 AMD가 AWS용으로 발급한 VLEK(Versioned Loaded Endorsement Key)를 사용합니다. VLEK 인증서에서 AMD 루트 신뢰까지의 신뢰 체인을 검증해야 합니다.

1단계: snpguest 유틸리티 빌드

이 단계에서는 증명 보고서 생성, 필요한 인증서 가져오기, 증명 보고서 검증에 사용하는 snpguest 유틸리티를 설치하고 빌드합니다.

  1. 인스턴스에 연결합니다.

  2. snpguest repository에서 snpguest 유틸리티를 구축하려면 다음 명령을 실행합니다.

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

2단계: 증명 보고서 생성

증명 보고서에 대한 요청을 생성합니다. snpguest 유틸리티는 호스트에 증명 보고서를 요청하고 이를 바이너리 파일에 기록합니다. 다음 예에서는 임의의 요청 nonce를 생성하고 보고서를 report.bin에 저장합니다.

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

호스트 메모리에서 인증서를 요청하고 PEM 파일로 저장합니다.

$ ./snpguest certificates PEM ./

3단계: VLEK 인증서 체인 가져오기 및 검증

증명 보고서는 AMD가 AWS용으로 발급한 VLEK로 서명됩니다. VLEK에서 AMD 루트 신뢰까지의 신뢰 체인을 검증해야 합니다.

  1. 공식 AMD Key Distribution Service에서 VLEK 루트 신뢰 인증서를 현재 디렉터리로 다운로드합니다.

    $ sudo curl --proto '=https' --tlsv1.2 -sSf https://kdsintf.amd.com/vlek/v1/Milan/cert_chain -o ./cert_chain.pem
  2. openssl을(를) 사용하여 VLEK 인증서가 AMD 신뢰 루트 인증서에 의해 서명되었는지 확인합니다.

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

    다음은 예제 출력입니다.

    vlek.pem: OK

4단계: 증명 보고서 서명 확인

증명 보고서가 VLEK 인증서로 서명되었는지 검증합니다. 이는 보고서가 정품 AMD 하드웨어에서 생성되었으며 변조되지 않았음을 확인합니다.

$ ./snpguest verify attestation ./ report.bin

출력의 예제는 다음과 같습니다.

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!