雑な hinananoha

やさしいせかいをさがして三千里

Windows 11に備えて仮想マシンでもTPMを使いたい! ~ESXi(vSphere)/Hyper-V/VMware Workstationなどでの実現方法~

TL;DR

Windows 11 では最低要件にTPM2.0が追加されました。
www.microsoft.com

物理マシンの話はさておき、普通に仮想マシンを構築すると、多くの場合、TPMは使えません。
「え、じゃあWindows 11は仮想マシンでは動かせないのか!?」となったので色々調べたり実験したりしました。

結果は、少なくとも2021年6月25日現在、仮想WindowsマシンでTPMをどうにかする方法は

  • ESXiを使う場合、ESXi単体で使う場合はどうひっくり返っても不可
  • vCenter Serverを運用している場合は、以下のどちらかを満たすこと
    • vSphere 7.0u2以上で、ESXiホストにvSphere Enterprise Plus ライセンスが適用されていること(Native Key Providerを使う場合、ホストにTPMが載っていることが推奨されるが必須ではない)
    • vSphere 6.7以上*2で何らかのKMIPに対応したKMSを用意すること

という結論に達しました。この中では特にESXiの場合について、そして無料でKMSを用意する方法としてPyKMIPを使う方法を述べていきます。
なお、先にオチを言っておくと、ESXi環境の場合、どちらにせよ現状(別でグラボが用意されてない場合)WDDMが1.3なのでWindows 11の最低要件を満たしません。
(将来的にどうにかなるのか、ホスト側のハード依存なのか、引き続き精査したいところだけど情報が無い……。誰か教えてください)


※2021年6月26日追記:WDDMのバージョンではWindows 11実行可能かどうかの判定をしていないようで、シンプルにプロセッサがサポートリスト(下記)に載っているかどうか + TPMとかの要件で見ているようです。
 ただこの要件表、Windows 10の時点で載ってないマシンに普通にインストールして稼働できているので、現状確実にインストールできるものにだけ「OK」を出している説が出てきました。
 なので、「○が出る」ことには意味があっても「×が出る」ことにはあまり意味がないかもです。

docs.microsoft.com

※2021年10月7日追記:CPUの要件については、別途検証記事を書きました。よろしくお願いします。
kokura.hatenadiary.jp




注意事項:
今回紹介する内容は、あくまで「自宅サーバ」や、「検証/開発用環境」などの仮の環境をベースにしたものです。
PyKMIPは安定して稼働する保証はないため、業務の、本番環境として利用する場合は、適切なKMSを購入/契約するか、vSphere Enterprise Plusライセンスを用意してください。

ESXiを使う場合のvTPM事情

ESXiでvTPM(仮想TPM)を使う場合の要件はVMwareの以下のページに記載があります。
docs.vmware.com

vTPM の要件

vTPM を使用するには、vSphere 環境が以下の要件を満たす必要があります。

この要件のうち、厄介なのが「vCenter Server に構成されたキー プロバイダ」というものです。これについて説明していきます。

vSphereのキープロバイダ

vCenter Serverに構築されたキープロバイダ、について『vSphere セキュリティ』ドキュメントには以下のように記載されています。
docs.vmware.com

vSphereで使える「キープロバイダ」には大きく3つあります。

  • 標準のキープロバイダ
  • 信頼済みキープロバイダ
  • VMware vSphere Native Key Provider

このうち、「信頼済みキープロバイダ」については今回割愛します(どうひっくり返っても自宅に入れられるものではないため)。
残りの二つが、今回検討するものになります。

まず、標準のキープロバイダとは。
docs.vmware.com
これはシンプルに「KMIPに対応した外部のKMSサーバを使う」というものです。KMIP1.1に対応していれば何でも良いです。
こちらは他に要件はありません。ライセンスも一番安いEssential Kitとかでもおそらく大丈夫なはずです*3

次にVMware vSphere Native Key Provider
docs.vmware.com
これは、ESXiホストのライセンスをvSphere Enterprise Plus(最上位ライセンス)にする必要がある代わりに、vCenter Serverの機能としてKMSを提供するというものです。
要件は、以下の3つです。

  • vSphere 7.0 Update 2 以降
  • ESXi ホストがクラスタに含まれていること(※単一ホストであっても)
  • vSphere Enterprise Plus エディションであること

こちらは、ESXiホストにTPMが搭載されていることが推奨はされているようですが、必須要件ではありません。


以上の2つから、自宅や開発環境のような環境でキープロバイダを用意する場合、

  • ホストがvSphere Enterprise PlusライセンスかつvSphere 7.0u2以上であるか
  • PyKMIPを使って外部KMSを構築する

の2択となります。

vSphere Native Key Providerの設定

まずは簡単な方、vSphere Native Key Providerの設定方法を簡単に紹介します。
なお、この方法はvCenter Server 7.0.2現在のものです。
docs.vmware.com

  1. 予めクラスタを作成し、ホストをクラスタに所属させます。
  2. インベントリでvCenter Serverを選択し、「設定」タブを開き、「セキュリティ」内の「キープロバイダ」をクリック
  3. 左上の「追加」をクリックし、「ネイティブ キー プロバイダの追加」をクリック
  4. 任意のvSphere Native Key Provider名を入力します(ex: Default)。
  5. ESXiホストに物理TPMが載っているのを前提にする場合は、「TPM で保護された ESXi ホストでのみキー プロバイダを使用する」のチェックボックスをオンにします。そうでない場合は、ここをオフにしてください。
  6. 「キープロバイダの追加」をクリックします。
  7. 「キープロバイダ」の画面に戻ってくるので、追加したキープロバイダをクリックします。
  8. 下に表示される「詳細」タブ内の「キープロバイダのバックアップ」をクリックします。これは、万が一キープロバイダの設定が壊れてしまったとき、元のキープロバイダを復元して仮想マシンが起動できない状態になるのを防ぐためのものです。
  9. バックアップファイルをパスワードで保護する場合(推奨)、「ネイティブ キー プロバイダ データをパスワードで保護」をチェックし、パスワードを入力、「パスワードを安全な場所に保存しました」をチェックして下さい。
  10. 「キープロバイダのバックアップ」をクリック。すると.p12ファイルがダウンロードされます。これがキープロバイダのバックアップです。大切に保管してください。
  11. 準備完了です。

PyKMIPを使った標準のキープロバイダの設定

次に、「Enterprise Plusなんか買えるわけないだろハゲ!」という人の為に、標準キープロバイダを使う場合について説明します。
標準キープロバイダを使う場合、KMSを建てる必要があります。無料で使えるKMSは、今の所PyKMIPくらいのようなので、導入方法と適用方法を解説します。

なお、検証環境は以下の通りです。

  • PyKMIPインストール先環境
  • 前提要件
    • 証明書が必要です。オレオレでもいいので適当にCAを建てて証明書を作成して下さい。(作成方法は調べればいっぱい転がっていると思うので今回は割愛します。
KMS構築(PyKMIPのインストール)
  • 対象のシステムがvCenter Serverから到達可能であることを確認して下さい。
  • 必要なパッケージをインストールします。
# apt install python3-dev libffi-dev libssl-dev libsqlite3-dev
# mkdir /usr/local/PyKMIP
# mkdir /etc/pykmip
# mkdir /var/log/pykmip
  • PyKMIPをGithubから持って来て、インストールします。
# cd /usr/local
# git clone https://github.com/OpenKMIP/PyKMIP
# python3 /usr/local/PyKMIP/setup.py install
  • 設定ファイルを作成します。
# vi /etc/pykmip/server.conf
[server]
database_path=/etc/pykmip/pykmip.database
hostname=[vCenter ServerからアクセスするときのこのホストのIPアドレス]
port=5696
certificate_path=[証明書ファイル]
key_path=[秘密鍵ファイル]
ca_path=[証明書のCAファイル]
auth_suite=TLS1.2
policy_path=/usr/local/PyKMIP/examples/
enable_tls_client_auth=False
logging_level=DEBUG
  • 自動起動するためのSystemdのユニットファイルを作成します。
# vi /etc/systemd/system/pykmip.service
[Unit]
Description=Python implementation of the Key Management Interoperability Protocol Server
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/local/PyKMIP/bin/run_server.py
Restart=no

[Install]
WantedBy=default.target
  • Systemdに登録して起動します。
# systemctl enable pykmip.service
# systemctl start pykmip.service

以上でサーバの構築が完了です。PyKMIPのログは /var/log/pykmip/server.log に出力されます。
Logrotateとかはおそらく自分で設定する必要がありそう*4なので、必要に応じて設定して下さい。

KMSのvCenterへの追加

追加方法はNative Key Providerより少し複雑です。
docs.vmware.com

  1. インベントリでvCenter Serverを選択し、「設定」タブを開き、「セキュリティ」内の「キープロバイダ」をクリック
  2. 左上の「追加」をクリックし、「標準のキー プロバイダの追加」をクリック
  3. 名前に任意のキープロバイダ名を入力します。
  4. KMSには「PyKMIP」、アドレスにPyKMIPを入れたサーバのIPアドレス、ポート番号は「5696」を入力し、「キープロバイダの追加」をクリックします。
  5. 接続に成功すると「vCenter Server にキー プロバイダを信頼させる」というウィンドウが表示され、先程作成した証明書が表示されます。間違いないことを確認して右下の「信頼」をクリックします。
  6. キープロバイダの画面に戻って来たら、追加したキープロバイダをクリックします。
  7. 下に表示される詳細画面の「PyKMIP」の左の「>」をクリックしてウィザードを表示させます。
  8. 「KMS が vCenter Server を信頼するようにします」の下の「VCENTER SERVERを信頼する」をクリック
  9. 「方法の選択」が表示されるので、「KMS証明書及びプライベートキー」を選択し、「次へ」をクリックします。
  10. PyKMIPに設定した証明書と秘密鍵のファイルをアップロードするか、証明書ファイルをエディタで開き、証明書であれば「-----BEGIN CERTIFICATE-----」から「-----END CERTIFICATE-----」まで、秘密鍵であれば「-----BEGIN RSA PRIVATE KEY-----」から「-----END RSA PRIVATE KEY-----」まで(それ自身も含む)をコピーして貼り付けます。
  11. 「信頼の確立」ボタンをクリックします。
  12. 正常に完了すれば、上のキープロバイダのリストで、当該項目のステータスが「健全」、証明書が「有効」と表示されます。

KMSを使ったTPMが有効な仮想マシンの作成方法

前述の方法でNative Key ProviderかPyKMIPでKMSを構築完了すると、仮想マシンの作成ができます。
仮想マシンの作成時もいくつかのステップを踏む必要があるので、以下解説します。

  1. 通常通り、「仮想マシンの作成」を実行
  2. ストレージの選択の時に「この仮想マシンを暗号化」のチェックボックスにチェックを入れます。なお、その際、チェック後にストレージに「互換性無し」と表示された場合、前述のチェックボックスの下の「仮想マシン ストレージ ポリシー」を「VM Encryption Policy」に変更すると利用できるようになります。
  3. ゲストOSの選択の際に「Windows 仮想化ベースのセキュリティの有効化」にチェックを入れて下さい。
  4. ハードウェアのカスタマイズ画面が表示されたら、「新規デバイスの追加」から「Trusted Platform Module (TPM)」を選択して下さい。

以上で完了です。これで仮想マシンTPMを適用することが出来るようになりました。

f:id:hinananoha:20210626122100p:plain
雑なスクリーンショット


ここまででESXiでTPMを使う方法の話は終わりです。ここから先は余談(Windows上の仮想マシンでどうにかする方法と、ESXi仮想マシンでは結局Windows11は動きそうにないという話)です。

Windows上でTPM有効なWindows仮想マシンを建てる方法考察

Windows上で仮想マシンを建てるハイパーバイザソフトウェアには大きく3種類あります。

  • Hyper-VMicrosoft謹製のWindowsの機能。昔は使いづらいはトラブルだらけだで苦しめられた
  • VMware Workstation系(Player/Pro):VMwareの製品。Playerは個人使用目的であれば無料、Proは有償。
  • VirtualBox:みんな大好き[要出典]Oracleのソフト。

vTPMを使った仮想マシンを建てる難易度は、
Hyper-V(超簡単) > VMware Workstation Pro(やり方さえわかれば) >> VMware Workstation Player(少し面倒くさい) >>>>>>>>>>>>>>> VirtualBox(無理)
という感じです。一応それぞれについて軽く。

Hyper-VでvTPMを有効にする

超簡単です。第二世代仮想マシンの設定で仮想マシンを作った後、「設定」→「セキュリティ」で「トラステッド プラットフォーム モジュールを有効にする」にチェックを入れるだけです。
ハードウェア要件はたしかありません。OSもWindows 10 Proの最新バージョンを使ってれば特に問題ないはずです*5
これでインストール、起動すると無事使えます。そして、Windows11にはもちろん、対応しています。

f:id:hinananoha:20210626122818p:plain
Hyper-Vでの互換性チェック結果

VMware Workstation ProでvTPMを有効にする

こちらはちょっと面倒くさいです。VMware製品はTPMを有効にする場合は仮想マシンの暗号化が必須となります。そのため、以下の操作が必要です。

  • 仮想マシン作成時にファームウェアタイプを「UEFI」にし、「セキュアブート」にチェックを入れる
  • 仮想マシン作成後、初回起動前に以下の設定をする
    • 「オプション」タブの「アクセス コントロール」で「暗号化」ボタンをクリックし、パスワードを設定、暗号化する(※この操作により、今後仮想マシンを操作する場合にパスワードが要求されることがあります)

この操作をした上で、ハードウェアの追加から「Trusted Platform Module」を選択すると、TPMを追加することが出来るようになります。
ちなみに、Workstation Pro 15の環境で上記の設定を踏まえて建てた仮想マシンは、Windows 11に対応しているようです。

f:id:hinananoha:20210626123542p:plain
Workstation Pro での実行結果

VMware Workstation PlayerでvTPMを有効にする

Workstation Player(無償製品)の場合、vTPMや仮想マシンの暗号化にかかる設定項目がGUI上は表示されないそうです。
こちらは、フォーラムを見ると、VMの設定ファイルを直接いじることでできる、らしいですが、未確認です。(どなたか是非試して見て下さい)
communities.vmware.com

VirtualBoxでvTPMを使う

できない、というのが結論のようです。
forums.virtualbox.org
古い議論ではありますが、下の方を見ると割と最近の投稿もあり、依然TPMの実装はないようです。今までのVirtualBoxの開発の様子も見ていると、まあ、おそらく(少なくともすぐには)実装はされないだろう、というのが私の感想です。

ESXiではWindows 11の仮想マシンが建てられるか

さて、こんな感じで長々と色々検証し、TPMまで用意した、のですが。

f:id:hinananoha:20210626124105p:plain
vSphere 7.0u2でWindows 11の互換性チェックを実行した結果

VMware Workstation Proをリモートクライアント画面として使っているので混乱しますが、ESXi上の仮想マシンです)
この通り、ダメでした。原因はVMware ToolsのディスプレイドライバがWDDM 2.xに対応していないためです。
これが、ESXi(vSphere)に起因するモノなのか、ESXiが載っているハードに起因するモノなのかが残念ながら分からず……。もし前者なら、今後VMwareが対応してくれることを祈りましょう。
後者だった場合は……。(目を伏せる)

CPUがサポートリストからはずれているだけっぽいので、引き続き様子を見たいと思います。頼む動いてくれ……!

*1:一応、VMの設定ファイルを直接編集すればOKらしいが……

*2:Windowsの場合。Linuxの場合はvSphere 7.0u2以上

*3:未検証なので一応導入前にご確認下さい

*4:未検証

*5:古いバージョンの場合、特定の設定を入れないと行けないらしいですが、その場合はこのウィンドウでどういう設定が必要か表示されます。