2015/08/28

Windows Server 2016 TP3 > Host Guardian Service のセットアップ手順の TP2 からの変更点 (追記あり)

[仮想マシンに追加されている TPM  は HGS 関連のもの]
Windows Server 2016 Technical Preview 3 の Host Guardian Service のセットアップ手順は、Technical Preview 2 から微妙に変わっています。PowerShell のパラメーターが変更になってたりしいて、以下のドキュメントの手順だとセットアップできないはず。

Shielded VMs and Guarded Fabric Validation Guide for Windows Server 2016 (v1.4 8/15/2015)
[URL] https://gallery.technet.microsoft.com/Shielded-VMs-and-Guarded-44176db3
追記) 8/29 付けで TP3 対応版 Shielded VM and Guarded Fabric Deployment Guide for TP3.docx が出ました。TP3 対応版では、Windows Azure Pack がシールド VM 対応になり、その手順も書いてました。
追記) 11/24 付けで TP4 対応版 Technical Preview 4 Step-by-Step Guide:
Deploy Shielded VMs Using Hardware-trusted (TPM) Attestation が出ました。


上のドキュメントが TP3 対応になるのを待てないというあなため。私が成功した手順をメモ...

詳しい説明は省略します。赤い部分が変更点。

● Host Guardian Service のインストールと構成

Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools


(※ 以下の手順に進む前に、TP3 の FailoverClusters モジュールの修正が必要名場合があります。Install-HgsServer はクラスターをセットアップするために Get-Cluster とか使うんですが、システムロケールが ja-jp の場合、Install-HgsServer を実行する前に対処しておかないとクラスター関連の PowerShell が見つからずに失敗します。原因は、 Microsoft.FailoverClusters.PowerShell.psm1 の 74-75行目、96 行目あたりの文字が壊れているから。→ Windows Server 2016 TP3 > システムロケールと FailoverClusters モジュール問題(の真相))

$dsrmPassword = ConvertTo-SecureString -AsPlainText "<ディレクトリサービス復元モード(DSRM)のパスワード>" -Force
 

Install-HgsServer -HgsDomainName <HGS専用Active DirectoryドメインのFQDN> -SafeModeAdministratorPassword $dsrmPassword -Restart
(※Initialize-HgsServer の前に自己署名証明書を作っておきます)
 

$signingCert = New-SelfSignedCertificate -DnsName "Signing-$env:computername.$env:userdnsdomain" -CertStoreLocation Cert:\LocalMachine\My -KeyExportPolicy Exportable

$encryptionCert = New-SelfSignedCertificate -DnsName "Encryption-$env:computername.$env:userdnsdomain" -CertStoreLocation Cert:\LocalMachine\My -KeyExportPolicy Exportable
 

$communicationCert = New-SelfSignedCertificate -DnsName "$env:computername.$env:userdnsdomain" -CertStoreLocation  Cert:\LocalMachine\My -KeyExportPolicy Exportable
 

Export-Certificate -Cert $communicationCert -FilePath ".\communication.cer" 

 
Import-Certificate -CertStoreLocation Cert:\LocalMachine\Root -FilePath ".\communication.cer"

(※ 同じような手順で $signingCert と $encryptionCert と $communicationCert をエクスポートして、シールド用のホストや Guarded Host の 信頼されたルート証明書にインポートしておく必要があるかも。GuardianKey.xml のインポート時のエラー回避のため。Import-HgsGuardian の -AllowUntrustedRoot オプションを使えば証明書のインポートなしで GuardianKey.xml をインポートできます)

New-WebBinding -Name "Default Web Site" -IP "*" -Port 443 -Protocol https
$communicationCert | New-Item IIS:\SslBindings\0.0.0.0!443

Initialize-HgsServer -HgsServiceName "MyHgsService" -TrustActiveDirectory -EncryptionCertificateThumbprint $encryptionCert.Thumbprint -SigningCertificateThumbprint $signingCert.Thumbprint -CommunicationsCertificateThumbprint $communicationCert.Thumbprint


(※ -StaticAddress は使用できなくなりました。TPM モード(既定)とAD モードの切り替えは TP3 ではできないので、-TrustActiveDirectory の指定を忘れた場合は Uninstall-HgsServer しないとだめらしい。)

$attestationCert = Set-HgsAttestationSignerCertificate

Add-HgsKeyProtectionAttestationSignerCertificate -Certificate $attestationCert[0] 


ローカル環境で以下の 2 つの URL に IE でアクセスできることを確認。
http://localhost/KeyProtection/service/metadata/2014-07/metadata.xml
http://<Host Guardian ServiceのFQDN>/KeyProtection/service/metadata/2014-07/metadata.xml

(※ TP2のときの Register-HgsAttestation -TrustActiveDirectory -force -confirm:$false は実行する必要なし)

● Active Directory ドメインの信頼関係の作成

HGS 専用の Active Directory ドメインの DNS と、ファブリック用 Active Directory ドメインの DNS の両方で、お互いのスタブ ゾーンを作成し、相互に名前解決できるようにしておく。

HGS 側の DC で
netdom trust <Host Guardian Service専用Active DirectoryドメインのFQDN> /domain: <ファブリックのActive DirectoryドメインのFQDN> /userD:<ファブリックのドメイン名>\<ドメイン管理者のユーザー名> /passwordD:<ドメイン管理者のパスワード> /add

ファブリック側の DC で
netdom trust <ファブリックActive DirectoryドメインのFQDN> /domain: <Host Guardian Service専用Active DirectoryドメインのFQDN> /userD:<Host Guardian Service専用Active Directoryドメイン名>\<ドメイン管理者のユーザー名> /passwordD:<ドメイン管理者のパスワード> /add

ファブリック側の DC で
New-ADGroup -Name "GuardedHosts" -SamAccountName "GuardedHosts" -GroupCategory Security -GroupScope Global
 

Add-ADGroupMember -Identity GuardedHosts -Members guardedhost01$,guardedhost02$
 

$ADGroup = Get-ADGroup -Identity GuardedHosts

$ADGroup.SID.Value 
(※ SID を控える)

HGS 側の DC で
Add-HgsAttestationHostGroup -Name "GuardedHosts" -Identifier "上で控えた SID"
(※ Add-HgsAttestationHostGroupPolicy から Add-HgsAttestationHostGroup に変更されている)

● ファブリック内の Guarded Host の構成

Install-WindowsFeature HostGuardian, RSAT-Shielded-VM-Tools -Restart
または (Hyper-V も一緒にインストールする場合)
Install-WindowsFeature Hyper-V, HostGuardian, RSAT-Shielded-VM-Tools -InculdeManagementTools -Restart
(※ RSAT-Shielded-VM-Tools は必須ではないと思う )

Invoke-WebRequest -Uri http://<Host Guardian ServiceサービスのFQDN>/KeyProtection/service/metadata/2014-07/metadata.xml -outfile ".\GuardianKey.xml"

Import-HgsGuardian -Path ".\GuardianKey.xml" -Name "Guardian"

-AllowUntrustedRoot

Set-HgsClientConfiguration -KeyProtectionServerUrl http://<Host Guardian ServiceのFQDN>/KeyProtection -AttestationServerUrl http://<Host Guardian ServiceのFQDN>/Attestation

(※ クライアントじゃなくするには Set-HgsClientConfiguration -EnableLocalMode を実行する)

● シールド用の Hyper-V ホストの構成 (テナントさんのオンプレミスの Hyper-V 環境)

Install-WindowsFeature HostGuardian, RSAT-Shielded-VM-Tools -Restart
または (Hyper-V も一緒にインストールする場合)
Install-WindowsFeature Hyper-V, HostGuardian, RSAT-Shielded-VM-Tools -InculdeManagementTools -Restart
(※ RSAT-Shielded-VM-Tools は必須ではないと思う )

Invoke-WebRequest -Uri http://<Host Guardian ServiceサービスのFQDN>/KeyProtection/service/metadata/2014-07/metadata.xml -outfile ".\GuardianKey.xml"

Import-HgsGuardian -Path ".\GuardianKey.xml" -Name "Guardian" -AllowUntrustedRoot


Get-HgsGardian
(ローカルのシールド ツールの証明書の名前を確認。DefaultOwner から UntrustedGuardian に変わっているようです)

● 仮想マシンのシールド

第 2 世代仮想マシンにゲスト OS をインストールして、リモートデスクトップ接続を有効化(シールドするとローカルログオンできなくなるので)、シャットダウンして停止したら...

$Guardian = Get-HgsGuardian -Name "Guardian"

$Owner = Get-HgsGuardian -Name "UntrustedGuardianr"
 

$KP = New-HgsKeyProtector -Owner $Owner -Guardian $Guardian

(※ "A required certificte is not within its validity period when ..."云々のエラーが出る場合は2日ほどあとに実行すれば解決すると思います。日本のタイムゾーンだと、UntrustedOwner の証明書の有効期限がツールインストール時の時間+ 9 時間からになる問題がありそう。ホストの日付を 2 日ほどバックデートして、New-HgsGuardian -GenerateCertificates で作成するという方法もありかも。)

$VMName="<仮想マシン名>"
 

Add-VMTPM -VMName $vmName
 

Set-VMTPM -VMName $vmName -Enabled $true -Shielded $true -KeyProtector $kp.RawData
(※ -Shiedled $true が必要になった)


Start-VM -VMName $vmName


仮想マシンが起動したら、リモートデスクトップ接続でゲスト OS に接続し...

Install-WindowsFeature BitLocker -Restart


Enable-BitLocker -MountPoint "C:" -UsedSpaceOnly -TPMProtector
(※この後も再起動必要。再移動後、暗号化スタート)


暗号化が完了したら、シャットダウンして、エクスポートし、Guarded Host にインポート。そして、シールド VM を起動。

● シールドされたテンプレート(VMM用)の作成ツールは?

%Windir%\System32\TemplateDiskWizard.exe と ShieldingDataFileWizard.exe は TP3 には存在しないみたいです。System Center 2016 TP3 の VMM に New-SCVMShieldingData というコマンドレットがあるのですが、VMM に統合されたのかなぁ? この件に関しては謎です。分かり次第お伝えします。(←単に入れ忘れてただけでした)

Protected Template Disk Creation Wizard (C:\Windows\System32\TemplateDiskWizard.exe) と Shielding Data File Wizard (C:\Windows\System32\ShieldingDataFileWizard.exe) は、Remote Server Administration Tools\Feature Administration Tools\Shielded VM Tools(RSAT-Shielded-VM-Tools )に入ってます。

Install-WindowsFeature -Name  RSAT-Shielded-VM-Tools -Restart
(※BitLocker も入るので再起動が必要です)



以下は、System Center 2016 TP3 Virtual Machine Manager 側のインポート画面

追記)
 8/29 付けで TP3 対応版 Shielded VM and Guarded Fabric Deployment Guide for TP3.docx が出ました。Guarded Host とシールド用ホストによるシールドと Guarded Host によるシールド VM の実行までの手順は、Import-HgsGuardian の-AllowUntrustedRoot パラメーター以外は私の手順で問題なかったようです(私は自己署名証明書を信頼されたルート証明書としてインポートすることで回避しましたが...)。

さらに追記) VMM の手順、きました。
How to Deploy Host Guardian Service using Service Templates in VMM Tech Preview 3 (16 Sep 2015)
[URL] http://blogs.technet.com/b/scvmm/archive/2015/09/16/how-to-deploy-host-guardian-service-using-service-templates-in-vmm-tech-preview-3.aspx



0 件のコメント: