ProxmoxおよびKVMにおけるswtpmを使用したvTPM 2.0の設定:仮想マシンのBitLocker有効化の鍵

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

なぜ今、仮想マシンにとってvTPMが重要なのか?

ラボや仮想化システムを運用しているなら、Windows 11のハードウェア要件に頭を悩ませたことがあるでしょう。通常のインストールではレジストリをバイパスする手法もありますが、エンタープライズ環境においてセキュリティを無視することは大きな間違いです。BitLockerCredential Guard、またはWindows Helloを展開するには、仮想マシンにvTPM(Virtual Trusted Platform Module)が不可欠です。

24時間365日稼働する12台の仮想マシンを持つ私のホームラボ環境では、TPMをエミュレートすることで、仮想環境を物理マシンに99%近づけています。この記事では、現在のKVMおよびProxmoxで最も一般的なオープンソースのTPMエミュレータであるswtpmに焦点を当てます。

仮想マシン向けTPMオプションの比較

コマンドを入力する前に、なぜswtpmが他の手法に代わってゴールドスタンダード(標準)となったのかを理解しておく必要があります。

1. TPMパススルー(ハードウェア直接割り当て)

この方法は、マザーボード上の物理TPMチップを仮想マシンに直接接続します。最も安全に思えるかもしれませんが、実際には非常に制限が多いです。通常、各TPMチップは1つのVMにしか割り当てられません。さらに重要なことに、移行先ノードに対応するTPMチップがないため、Live Migration(ライブマイグレーション)が無効になります。

2. ソフトウェアエミュレートTPM (swtpm)

これは、仮想的なTPMチップを作成するソフトウェアソリューションです。機密データはホストのハードドライブ上のステートファイル(state file)に保存されます。この方法は非常に柔軟です。スナップショット、バックアップ、またはクラスター内のサーバー間での仮想マシンの移動を、何の障害もなく行うことができます。

クイック比較表:

  • 柔軟性: swtpm(非常に高い) | パススルー(低い)
  • マイグレーション機能: swtpm(フルサポート) | パススルー(不可)
  • 複雑さ: swtpm(設定が容易) | パススルー(ハードウェアに依存)

Proxmox VEでのvTPMの実装

Proxmox VE(バージョン7.xおよび8.x)では、vTPMがグラフィカルインターフェースに統合されています。以前のようにコマンドラインを深く操作する必要はありません。

実行手順:

  1. 設定対象のWindows仮想マシンをシャットダウンします。
  2. Hardware -> Add -> TPM Stateにアクセスします。
  3. ストレージの選択: 仮想マシンのハードディスクと同じパーティション(例:CephまたはLVM-Thin)を選択してください。これにより、VMを移動する際にTPMファイルも一緒に移動し、暗号化キーの紛失を防ぐことができます。

常にバージョンv2.0を選択してください。Windows 11はv1.2のような古いバージョンを認識しません。

# vTPMが動作していることを確認するために設定ファイルをチェック
cat /etc/pve/qmu-server/101.conf
# 結果に以下の行が表示されます: tpmstate: local-lvm:vm-101-tpmstate,version=v2.0

KVM/LibvirtでのvTPMの手動設定

Ubuntu ServerやDebianを使用している場合、swtpmパッケージは通常デフォルトでは含まれていません。よくあるミスは、パッケージのインストールを忘れてvirt-managerにTPMオプションが表示されないことです。

必要なパッケージのインストール:

sudo apt update
sudo apt install swtpm swtpm-tools libvirt-daemon-system -y

仮想マシンのXML編集:

virsh edit <VM名>コマンドを使用します。<devices>タグ内に以下のコードを追加する必要があります。Windowsとの互換性を最大限に高めるため、モデルにはtpm-tisを使用してください。

<tpm model='tpm-tis'>
  <backend type='emulator' version='2.0'/>
</tpm>

保存後、Libvirtは仮想マシンの起動ごとに個別のswtpmインスタンスを自動的に初期化します。ソケットファイルは通常/var/lib/libvirt/swtpm/に配置されます。

BitLockerの有効化と重要な注意点

仮想マシンがTPMを認識したら、BitLockerの有効化は実機と同じ手順で行えます。ただし、Windowsが「このデバイスではTPMを使用できません」というエラーを表示する場合は、仮想マシンのBIOSを再確認してください。vTPM 2.0には、従来のSeaBIOSではなくOVMF (UEFI)規格が必要です。

データに関する警告: tpmstateファイルはハードドライブを復号するための鍵そのものです。誤ってこのファイルを削除したり、バックアップなしでホストを再インストールしたりすると、VM内のデータは永久に失われます。tpmstateファイルの紛失は、BitLockerの回復キー(Recovery Key)を持っていない限り, ドライブが永久にロックされることを意味します。

実践的なアドバイス

swtpm技術は現在、非常に安定しています。ラボ用の仮想マシンであっても、最初からvTPMとUEFIを有効にすることをお勧めします。この習慣により、LinuxのLUKSやWindowsのBitLockerなどのセキュリティ機能をいつでもテストできるようになります。

定期的なバックアップスケジュールの設定を忘れないでください。Proxmoxでは、デフォルトのバックアップ機能にTPMステートファイルが含まれているため、ハードウェアトラブルの際も安心です。

Share: