AMD SEV-SNP による Amazon EC2 インスタンスの認証 - Amazon Elastic Compute Cloud

AMD SEV-SNP による Amazon EC2 インスタンスの認証

認証は、インスタンスがその状態と身元を証明できるようにするプロセスです。インスタンスで AMD SEV-SNP を有効にすると、基盤となるプロセッサに AMD SEV-SNP 認証レポートをリクエストできます。AMD SEV-SNP 認証レポートには、初期ゲストメモリーの内容と vCPU の初期状態の起動測定と呼ばれる暗号化ハッシュが含まれています。認証レポートには VLEK 署名が付いており、AMD のルートオブトラストに紐づいています。認証レポートに含まれる起動測定値を使用して、インスタンスが正規の AMD 環境で実行されていることを確認し、インスタンスの起動に使用された初期ブートコードを検証できます。

AMD SEV-SNP で認証を実行するには、次のステップを完了します。

ステップ 1: インスタンス起動時に AMD SEV-SNP を有効にする

AWS CLI を使用して、AMD SEV-SNP を有効にした状態でインスタンスを起動できます。

AMD SEV-SNP を有効にした状態でインスタンスを起動するには、AWS CLI を使用する必要があります。run-instances コマンドを使用し、--cpu-options AmdSevSnp=enabled オプションを含めます。--image-id には、uefi uefi-prefered またはブートモードの AMI と AMD SEV-SNP をサポートするオペレーティングシステムを指定します。--instance-type には、サポートされているインスタンスタイプを指定してください。

$ aws ec2 run-instances \ --image-id supported_ami_id \ --instance-type supported_instance_type \ --key-name key_pair_name \ --subnet-id subnet_id \ --cpu-options AmdSevSnp=enabled

ステップ 2: 認証レポートを取得する

このステップでは、snpguest ユーティリティをインストールして構築し、それを使用して AMD SEV-SNP 認証レポートと証明書を要求します。

  1. snpguest repository から snpguest ユーティリティを構築するには、次のコマンドを実行します。

    $ git clone https://github.com/virtee/snpguest.git $ cd snpguest $ cargo build -r $ cd target/release
  2. 認証レポートのリクエストを生成します。ユーティリティはホストから認証レポートをリクエストし、提供されたリクエストデータを使用してバイナリファイルに書き込みます。

    次の例では、ランダムなリクエスト文字列を作成し、それをリクエストファイル (request-file.txt) として使用します。コマンドによって認証レポートが返されると、指定したファイルパス (report.bin) に保存されます。この場合、ユーティリティはレポートを現在のディレクトリに保存します。

    $ ./snpguest report report.bin request-file.txt --random
  3. ホストメモリから証明書をリクエストし、PEM ファイルとして保存します。次の例では、snpguest ユーティリティと同じディレクトリにファイルを保存します。指定したディレクトリに証明書が既に存在する場合、その証明書は上書きされます。

    $ ./snpguest certificates PEM ./

ステップ 3: 認証レポートの署名を検証する

認証レポートには、AMD が AWS のために発行するバージョン対応認証キー (VLEK) と呼ばれる証明書が署名されています。このステップでは、VLEK 証明書が AMD によって発行されていること、および認証レポートが VLEK 証明書によって署名されていることを確認します。

  1. VLEK の Root of Trust 証明書を、AMD の公式ウェブサイトから現在のディレクトリにダウンロードします。

    $ 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

    正常な出力:

    certs/vcek.pem: OK
  3. snpguest ユーティリティを使用して、認証レポートが VLEK 証明書によって署名されていることを確認します。

    $ ./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!