Azure 機密 VM で仮想 TPM を活用する
適用対象: ✔️ Linux VM
この "ハウツー" では、機密 VM で仮想トラステッド プラットフォーム モジュール (TPM) によって提供されるいくつかの利点を使用する方法を示します。
前提条件
機密 VM での vTPM の動作を確認するには、概念ページを参照してください。
前述の一部の手順では、トラステッド プラットフォーム モジュール (TPM2.0) のソース リポジトリである tpm2 ツール ライブラリを使用します。 ライブラリをビルドしてインストールするには、こちらの手順に従います。
直接 AMD SEV-SNP ハードウェア レポートを取得する方法
ゲスト構成証明機能は、分離と整合性のためにセキュリティ機能が有効になっているハードウェア ベースの信頼された実行環境 (TEE) で機密 VM が実行されていることを確認するのに役立ちます。 機密 VM が起動すると、AMD SEV-SNP によって発行された署名済みレポート、プラットフォーム ブート設定、およびプラットフォーム測定を含む SEV-SNP ハードウェア レポートが生成されます。 このレポートは、データを安全かつ永続的に格納できる、vTPM の定義済みの不揮発性インデックス (NVIndex) に格納されます。 現在、ゲスト構成証明ライブラリを使用して、SEV-SNP ハードウェア レポートにアクセスして取得できます。 お客様は、Microsoft Azure Attestation を使用してレポートを確認したり、こちらの手順に従って未処理の AMD SEV-SNP レポートを独自に検証したりできます。
測定を PCR に拡張し、vTPM を使用して検証する方法
現在、機密 VM は、仮想のトラステッド プラットフォーム モジュール (vTPM) を介してアクセスできる SEV-SNP レポートを起動時に生成します。 このレポートには、vTPM の公開構成証明キー (AKPub) も含まれています。 AKPub を使用して、プラットフォーム構成レジスタ (PCR) 状態を含む vTPM ランタイム状態の構成証明を生成できます。 したがって、AKPub を使用して、プライベート構成証明キー (AKPri) によって署名された vTPM PCR 測定を SEV-SNP 構成証明にリンクできます。
次の手順では、必要な成果物とその取得方法を示します:
測定を PCR に拡張します。
tpm2 ツール ライブラリを使用して PCR に測定を拡張する方法は複数あります。 このコマンドは、sha256 バンクを使用してファイルをハッシュし、PCR に拡張する方法を示します。
sha256sum <any file> tpm2_pcrextend <pcr_number>:sha256=<result from first command>
AMD の VCEK 証明書を取得します。
AMD バージョン管理チップ保証キー (VCEK) を使用して、AMD SEV-SNP レポートに署名します。 VCEK 証明書を使用すると、レポートが本物の AMD CPU キーによって署名されたことを確認できます。 証明書を取得する方法は 2 つあります:
a. 次のコマンドを実行して VCEK 証明書を取得します。これは、既知の Azure Instance Metadata Service (IMDS) エンドポイントから証明書を取得します:
curl -H Metadata:true http://169.254.169.254/metadata/THIM/amd/certification > vcek cat ./vcek | jq -r '.vcekCert , .certificateChain' > ./vcek.pem
b. 証明書を取得するには、AMD VCEK 証明書ツールと、仕様に記載されている手順を使用します。
構成証明レポートから公開構成証明キー (AKpub) を取得します。
AMD の SEV-SNP ゲスト構成証明レポートは、VCEK を使用して署名されます。 ゲスト構成証明レポートのレポート データ JSON が測定され、ハッシュが SEV-SNP レポートに反映されます。 レポート データ JSON には、ゲスト ファームウェアによって AMD プロセッサに提供される構成証明要求を含む VM 構成セクションが含まれています。 このセクションの要求は、Microsoft ブート ローダーとオペレーティング システムの状態 (セキュア ブートが有効かどうか、Windows シリアル コンソールが有効かどうかなど) に関連します。これらの要求には、TPM の構成証明キー (AKPub) である "HCLAkPub" 署名キーも含まれます。
次の手順では、セット NVIndex から SNP レポートを抽出し、レポート データ JSON をダンプします。 guest_report.bin ファイルは、次の手順で使用します。
tpm2_nvread -C o 0x01400001 > ./snp_report.bin dd skip=32 bs=1 count=1184 if=./snp_report.bin of=./guest_report.bin
レポート データ JSON の例を次に示します:
"keys": [ { "kid": "HCLAkPub", "key_ops": [ "encrypt" ], "kty": "RSA", "e": "AQAB", "n": "2I-ayAABWYhQU-D81quVW4i1sH14-Offul2U2LwsgtihxykIzXY_5YzQAY4e56GMZSpm5r6telRr5rnFJa8iklzol7ecYZEX1nc1WK51a68E2kZNyomFVSIlDPJCn14NpRoxuipIfhe16zWVYZ8dpYbpelyzHZZpskdBLnUKldffUYliWSXLBpjPb89VV0FYxKPi_bSGviBXWOiRtcITRcXfpjlfD3DgZqlK4gj11RChqaEYG_GAPlxceu5h1pusgLuPEULWzvkKuGw7j8ZrxdYEUNB-uHU0nxuQvYxtksPs3zX6ELcV2GjwJupzYUUAu95OQUGI-soDWKvIXM4epw" } ], "vm-configuration": { "console-enabled": true, "secure-boot": true, "tpm-enabled": true, "vmUniqueId": "A80B7FE7-5B93-4027-9971-6CCEE468C2B3" }
VCEK 証明書とゲスト構成証明レポートを検証します。
VCEK 証明書とゲスト構成証明レポートを取得したら、VCEK がゲスト構成証明レポートに署名したことを確認できます。 この手順により、vTPM が AMD SEV-SNP ハードウェアによって適切に測定され、vTPM を信頼できるようになります。 検証を行うには複数の方法があります。次の例では、オープンソースの AMD SEV ツールを使用します。
sudo ./sevtool –-ofolder <location of vcek.pem & guest_report.bin> --validate_guest_report
vTPM ツールを使用して PCR 測定を取得します。
vTPM で信頼を確立したら、AKpub を使用してクォートを取得し、PCR 測定を反映できます。
a. 公開構成証明キーを取得します。 0x81000003 は AKpub の場所です。
tpm2_readpublic -c 0x81000003 -f pem -o <outputfile.pem>
b. ここで説明するオプションを使用して、TPM クォートを生成します。 この例では、クォートを取得し、PCR 15、16、22 を反映する方法を示します。 nonce はリプレイ攻撃から保護するために追加されます。 メッセージ出力ファイルには、TPM によって署名されたデータを構成するクォート メッセージが記録されます。 最後に、PCR 値は PCR_output_file に格納されます。 使用されるオプションの詳細については、tpm2_quote リンクを参照してください。
tpm2_quote -c 0x81000003 -l sha256:15,16,22 -q <nonce> -m <message_output_file.msg> -s <signature_output_file.sig> -o <PCR_output_file.pcrs> -g sha256
c. リモート コンピューターで次のコマンドを使用して、前の手順で生成された機密 VM のクォートを確認できます。 ここで、ステップ a から取得した AKpub を入力として使用します。
tpm2_checkquote -u <outputfile.pem> -m <message_output_file.msg> -s <signature_output_file.sig> -f <PCR_output_file.pcrs> -g sha256 -q <nonce>
証明書利用者は、tpm2_checkquote コマンドを使用して、すべてのブート時間とランタイム拡張 PCR を含むチェーン全体を暗号で検証できます。 PCR23 を使用して、ユーザー モード コンポーネントまたはランタイム データの測定を拡張することをおすすめします。
このドキュメントで説明されている手順を使用すると、任意のランタイム構成証明データ、構成、またはアプリケーションを vTPM PCR に拡張できます。 したがって、AMD SEV-SNP レポートをルートとする vTPM によって提供されるすべてのコンポーネントの測定値のチェーン (選択に応じて) を作成できます。