Linux シールド VM テンプレート ディスクを作成する

適用対象: Windows Server 2022、Windows Server 2019

このトピックでは、1 つ以上のテナント VM をインスタンス化するために使用できる、Linux のシールド VM 用のテンプレート ディスクを準備する方法について説明します。

前提条件

Linux のシールドされた VM を準備してテストするには、次のリソースを利用できる必要があります。

  • Windows Server バージョン 1709 以降を実行している、仮想化の機能を備えたサーバー
  • Hyper-V マネージャーを実行して実行中の VM のコンソールに接続できる 2 台目のコンピューター (Windows 10 または Windows Server 2016)
  • サポートされている Linux のシールドされた VM OS のいずれかの ISO イメージ:
    • 4.4 カーネルを備えた Ubuntu 16.04 LTS
    • Red Hat Enterprise Linux 7.3
    • SUSE Linux Enterprise Server 12 Service Pack 2
  • lsvmtools パッケージと OS 更新プログラムをダウンロードするためのインターネット アクセス

重要

前述の Linux OS の新しいバージョンには、シールドされた VM としての正常なプロビジョニングを妨げる既知の TPM ドライバー バグが含まれている場合があります。 修正プログラムが利用可能になるまで、テンプレートまたはシールドされた VM を新しいリリースに更新することはお勧めしません。 更新プログラムが公開されると、上記のサポートされている OS の一覧は更新されます。

Linux VM を準備する

シールドされた VM は、セキュリティで保護されたテンプレート ディスクから作成されます。 テンプレート ディスクには VM のオペレーティング システムとメタデータ (/boot および /root パーティションのデジタル署名など) が含まれており、デプロイ前にコア OS コンポーネントが変更されていないことが保証されます。

テンプレート ディスクを作成するには、まず、将来のシールドされた VM の基本イメージとして準備する通常の (シールドされていない) VM を作成する必要があります。 この VM に対してインストールするソフトウェアと、行う構成変更は、このテンプレート ディスクから作成されるすべてのシールドされた VM に適用されることになります。 これらの手順では、テンプレート化のために Linux VM を準備するのに必要最小限の要件について説明します。

注意

Linux ディスクの暗号化は、ディスクがパーティション分割されるときに構成されます。 つまり、Linux シールド VM テンプレート ディスクを作成するには、dm-crypt を使用して事前に暗号化された新しい VM を作成する必要があります。

  1. 仮想化サーバーで、管理者特権の PowerShell コンソールで次のコマンドを実行して、Hyper-V とホスト ガーディアン Hyper-V サポート機能がインストールされていることを確認します。

    Install-WindowsFeature Hyper-V, HostGuardian -IncludeManagementTools -Restart
    
  2. 信頼できるソースから ISO イメージをダウンロードし、仮想化サーバーまたは仮想化サーバーからアクセスできるファイル共有に保存します。

  3. Windows Server バージョン 1709 を実行している管理コンピューターで、次のコマンドを実行して、シールドされた VM リモート サーバー管理ツールをインストールします。

    Install-WindowsFeature RSAT-Shielded-VM-Tools
    
  4. 管理コンピューターで Hyper-V マネージャーを開き、仮想化サーバーに接続します。 これを行うには、[アクション] ペインで、[サーバーに接続] をクリックするか、Hyper-V マネージャーを右クリックし、[サーバーに接続] を選択します。Hyper-V サーバーの DNS 名と、必要に応じて、それに接続するために必要な資格情報を指定します。

  5. Hyper-V マネージャーを使用して、仮想化サーバーで外部スイッチを構成して、Linux VM がインターネットにアクセスして更新プログラムを取得できるようにします。

  6. 次に、Linux OS をインストールする新しい仮想マシンを作成します。 [アクション] ペインで、[新規]>[仮想マシン] をクリック してウィザードを起動します。 VM のフレンドリ名 ("Pre-templatized Linux" など) を指定し、[次へ] をクリックします。

  7. ウィザードの 2 番目のページで [第 2 世代] を選択して、VM が UEFI ベースのファームウェア プロファイルでプロビジョニングされるようにします。

  8. ご自分の好みに応じて、ウィザードの残りの部分を完了します。 この VM には差分ディスクを使用しないでください。シールド VM テンプレート ディスクでは、差分ディスクを使用できません。 最後に、OS をインストールできるように、前にダウンロードした ISO イメージを、この VM の仮想 DVD ドライブに接続します。

  9. Hyper-V マネージャーで、新しく作成した VM を選択し、[アクション] ペインで [接続] をクリックして、VM の仮想コンソールに接続します。 表示されたウィンドウで、[開始] をクリックして、仮想マシンを開始します。

  10. 選択した Linux ディストリビューションのセットアップ プロセスを進めます。 各 Linux ディストリビューションは異なるセットアップ ウィザードを使用しますが、Linux シールドVM テンプレート ディスクになる VM の場合、次の要件を満たす必要があります。

    • ディスクは、GUID Paritioning Table (GPT) レイアウトを使用してパーティション分割されている必要がある
    • ルート パーティションは dm-crypt で暗号化されている必要がある。 パスフレーズは、passphrase(すべて 小文字) に設定されている必要がある。 シールドされた VM がプロビジョニングされるときに、このパスフレーズはランダム化され、パーティションは再暗号化されます。
    • ブート パーティションでは ext2 ファイル システムが使用される必要がある
  11. Linux OS が完全に起動され、サインインしたら、linux-virtual カーネルおよび関連する Hyper-V 統合サービス パッケージをインストールすることをお勧めします。 さらに、シールドされた VM にアクセスするために、SSH サーバーまたは他のリモート管理ツールをインストールする必要があります。

    Ubuntu では、次のコマンドを実行して、これらのコンポーネントをインストールします。

    sudo apt-get install linux-virtual linux-tools-virtual linux-cloud-tools-virtual linux-image-extra-virtual openssh-server
    

    RHEL では、代わりに次のコマンドを実行します。

    sudo yum install hyperv-daemons openssh-server
    sudo service sshd start
    

    また SLES では、次のコマンドを実行します。

    sudo zypper install hyper-v
    sudo chkconfig hv_kvp_daemon on
    sudo systemctl enable sshd
    
  12. 必要に応じて Linux OS を構成します。 インストールするソフトウェア、追加するユーザー アカウント、システム全体に行う構成変更は、このテンプレート ディスクから作成される今後のすべての VM に適用されることになります。 シークレットや不要なパッケージをディスクに保存しないようにしてください。

  13. System Center Virtual Machine Manager を使用して VM をデプロイする予定の場合は、VM のプロビジョニング中に VMM で OS を特殊化できるように、VMM ゲスト エージェントをインストールします。 特殊化により、異なるユーザーと SSH キー、ネットワーク構成、カスタム セットアップ手順を使用して各 VM を安全に設定できるようになります。 VMM ドキュメントで VMM ゲスト エージェントを取得およびインストールする方法について確認してください。

  14. 次に、パッケージ マネージャーに Microsoft Linux ソフトウェア リポジトリを追加します。

  15. パッケージ マネージャーを使用して、lsvmtools パッケージをインストールします。これには、Linux シールド VM ブートローダー shim、プロビジョニング コンポーネント、およびディスク準備ツールが含まれています。

    # Ubuntu 16.04
    sudo apt-get install lsvmtools
    
    # SLES 12 SP2
    sudo zypper install lsvmtools
    
    # RHEL 7.3
    sudo yum install lsvmtools
    
  16. Linux OS のカスタマイズが完了したら、システムに lsvmprep インストール プログラムを配置して実行します。

    # The path below may change based on the version of lsvmprep installed
    # Run "find /opt -name lsvmprep" to locate the lsvmprep executable
    sudo /opt/lsvmtools-1.0.0-x86-64/lsvmprep
    
  17. VM をシャットダウンします。

  18. VM のチェックポイント (Windows 10 Fall Creators Update が適用された Hyper-V によって作成された自動チェックポイントを含みます) を取得した場合は、続行する前に必ず削除してください。 チェックポイントを取得すると、テンプレート ディスク ウィザードでサポートされていない差分ディスク (.avhdx) が作成されます。

    チェックポイントを削除するには、Hyper-V マネージャーを開き、VM を選択し、[チェックポイント] ペインで最上位チェックポイントを右クリックして、[チェックポイントのサブツリーを削除] をクリックします。

    Delete all checkpoints for your template VM in Hyper-V manager

テンプレート ディスクを保護する

前のセクションで準備した VM は、Linux シールド VM テンプレート ディスクとして使用する準備がほとんどできています。 最後の手順は、テンプレート ディスク ウィザードを使用してディスクを実行することです。これにより、ルートおよびとブートの各パーティションの現在の状態がハッシュされ、デジタル署名されます。 テンプレートの作成とデプロイの間にこの 2 つのパーティションに対して承認されていない変更が行われなかったことを確認するために、シールドされた VM がプロビジョニングされるときにハッシュとデジタル署名が検証されます。

ディスクに署名する証明書を取得する

ディスク測定値にデジタル署名するために、テンプレート ディスク ウィザードを実行するコンピューターで証明書を取得する必要があります。 証明書は次の要件を満たす必要があります。

Certificate プロパティ 必須の値
キー アルゴリズム RSA
最小キー サイズ 2048 ビット
署名アルゴリズム SHA256 (推奨)
キー使用法 デジタル署名

この証明書の詳細は、テナントがシールド データ ファイルを作成し、それらが信頼するディスクを承認しているときにテナントに対して表示されます。 そのため、ご自分とテナントによって相互に信頼されている証明機関からこの証明書を取得することが重要です。 自分がホストとテナントの両方であるエンタープライズ シナリオでは、エンタープライズ証明機関からこの証明書を発行することを検討できます。 この証明書の所有者はだれでも、実際のディスクと同じように、信頼される新しいテンプレート ディスクを作成できるので、この証明書を慎重に保護してください。

テスト ラボ環境では、次の PowerShell コマンドを使用して自己署名証明書を作成できます。

New-SelfSignedCertificate -Subject "CN=Linux Shielded VM Template Disk Signing Certificate"

テンプレート ディスク ウィザード コマンドレットを使用してディスクを処理する

Windows Server バージョン 1709 を実行しているコンピューターにテンプレート ディスクと証明書をコピーし、次のコマンドを実行して署名プロセスを開始します。 -Path パラメーターに指定した VHDX は、更新されたテンプレート ディスクで上書きされるため、コマンドを実行する前に必ずコピーを作成してください。

重要

Windows Server 2016 またはWindows 10 で利用できるリモート サーバー管理ツールは、Linux シールド VM テンプレート ディスクの準備には使用できません。 Linux シールド VM テンプレート ディスクの準備には、Windows Server バージョン 1709 で利用できる Protect-TemplateDisk コマンドレット または Windows Server 2019 で利用できる リモート サーバー管理ツールのみを使用します。

# Replace "THUMBPRINT" with the thumbprint of your template disk signing certificate in the line below
$certificate = Get-Item Cert:\LocalMachine\My\THUMBPRINT

Protect-TemplateDisk -Path 'C:\temp\MyLinuxTemplate.vhdx' -TemplateName 'Ubuntu 16.04' -Version 1.0.0.0 -Certificate $certificate -ProtectedTemplateTargetDiskType PreprocessedLinux

これで、テンプレート ディスクを使用して Linux のシールドされた VM をプロビジョニングする準備ができました。 VM のデプロイに System Center Virtual Machine Manager を使用する場合は、ここで VHDX を VMM ライブラリにコピーできます。

VHDX からボリューム署名カタログを抽出することもできます。 このファイルは、テンプレートを使用したい VM 所有者に署名証明書、ディスク名、バージョンに関する情報を提供するために使用されます。 彼らは、自分たち用の今回と今後のテンプレート ディスクを作成するために、シールド データ ファイル ウィザードにこのファイルをインポートして、署名証明書を所有するテンプレート作成者を認可する必要があります。

ボリューム署名カタログを抽出するには、PowerShell で次のコマンドを実行します。

Save-VolumeSignatureCatalog -TemplateDiskPath 'C:\temp\MyLinuxTemplate.vhdx' -VolumeSignatureCatalogPath 'C:\temp\MyLinuxTemplate.vsc'