AMD SEV-SNP による Amazon EC2 インスタンスの認証
認証はインスタンスがその状態と身元を証明できるようにするプロセスです。インスタンスで AMD SEV-SNP を有効にすると、基盤となるプロセッサに AMD SEV-SNP 認証レポートをリクエストできます。AMD SEV-SNP 認証レポートには初期ゲストメモリーの内容と vCPU の初期状態の起動測定と呼ばれる暗号化ハッシュが含まれています。認証レポートは、AMD の信頼ルートにチェーンバックする VCEK 署名 (専有ホスト) または VLEK 署名 (共有テナンシー) によって署名されます。認証レポートに含まれる起動測定値を使用して、インスタンスが正規の AMD 環境で実行されていることを確認し、インスタンスの起動に使用された初期ブートコードを検証できます。
前提条件
AMD SEV-SNP が有効になっているインスタンスを起動します。詳細については、「EC2 インスタンスの AMD SEV-SNP の有効化」を参照してください。
専有ホストでのインスタンスの認証
専有ホストは、一意のチップごとの署名キーであるバージョニング付きチップ認証鍵 (VCEK) を使用して、認証レポートに署名します。VCEK 証明書から AMD の信頼チェーンに戻るように、信頼チェーンを検証する必要があります。
注記
現在サポートされているプロセッサーモデルは milan です。
前提条件
Git、Cargo、Perl がインストールされて、AMD SEV-SNP が有効になっている専有ホストで実行中のインスタンス。
ステップ 1: snpguest ユーティリティを構築する
このステップでは、認証レポートの生成、必要な証明書の取得、認証レポートの検証に使用する snpguest ユーティリティをインストールして構築します。
-
インスタンスに接続します。
-
前提条件がインストールされていることを確認します。
$perl --version; cargo --version; git --version -
snpguest repository
から snpguestユーティリティを構築するには次のコマンドを実行します。$git clone https://github.com/virtee/snpguest.git$cd snpguest$cargo build -r$cd target/release
ステップ 2: 認証レポートを生成する
認証レポートのリクエストを生成します。snpguest ユーティリティはホストを介して AMD Secure Processor から認証レポートをリクエストし、バイナリファイルに書き込みます。次の例では、ランダムなリクエスト文字列を作成して、レポートを report.bin に保存します。
$./snpguest reportreport.binrequest-file.txt--random
ステップ 3: VCEK 証明書チェーンを取得して検証する
認証レポートは、専有ホストの AMD チップ固有の VCEK によって署名されます。VCEK から AMD の信頼チェーンに戻るように、信頼チェーンを検証する必要があります。
-
AMD Key Distribution Service (KDS) から VCEK 証明書を取得します。証明書は、認証レポートのチップ ID と TCB バージョンによって識別されます。
$./snpguest fetch vcek pem ./ ./report.bin --processor-model milan -
信頼チェーンを形成する AMD ルート証明書 (AMD ルートキー (ARK) と AMD SEV キー (ASK)) を取得します。
$./snpguest fetch ca PEM ./ milan --endorser vcek -
証明書チェーンを確認します。
$./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) を使用します。VLEK 証明書から AMD の信頼チェーンに戻るように、信頼チェーンを検証する必要があります。
ステップ 1: snpguest ユーティリティを構築する
このステップでは、認証レポートの生成、必要な証明書の取得、認証レポートの検証に使用する snpguest ユーティリティをインストールして構築します。
-
インスタンスに接続します。
-
snpguest repository
から snpguestユーティリティを構築するには次のコマンドを実行します。$git clone https://github.com/virtee/snpguest.git$cd snpguest$cargo build -r$cd target/release
ステップ 2: 認証レポートを生成する
認証レポートのリクエストを生成します。snpguest ユーティリティはホストから認証レポートをリクエストし、バイナリファイルに書き込みます。次の例では、ランダムなリクエスト文字列を作成して、レポートを report.bin に保存します。
$./snpguest reportreport.binrequest-file.txt--random
ホストメモリから証明書をリクエストし、PEM ファイルとして保存します。
$./snpguest certificates PEM./
ステップ 3: VLEK 証明書チェーンを取得して検証する
認証レポートは、AMD が AWS に対して発行する VLEK によって署名されます。VLEK から AMD の信頼チェーンに戻るように、信頼チェーンを検証する必要があります。
-
VLEK の信頼ルート証明書を公式の AMD Key Distribution Service からダウンロードして現在のディレクトリにアップロードします。
$sudo curl --proto '=https' --tlsv1.2 -sSf https://kdsintf.amd.com/vlek/v1/Milan/cert_chain -o ./cert_chain.pem -
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!