ホスト ガーディアン サービスのトラブルシューティング

この記事では、保護されたファブリックでホスト ガーディアン サービス (HGS) サーバーを展開または操作するときに発生する一般的な問題の解決策について説明します。

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

問題の性質がわからない場合は、まず、HGS サーバーと Hyper-V ホストで保護されたファブリック 診断を実行して、潜在的な原因を絞り込みます。

証明書

HGS では、管理者が構成した暗号化と署名証明書のほか、HGS 自体によって管理される構成証明証明書など、操作するために複数の証明書が必要です。 これらの証明書が正しく構成されていない場合、HGS は、シールドされた VM のキー 保護機能を証明またはロック解除する Hyper-V ホストからの要求を処理できません。 以降のセクションでは、HGS で構成された証明書に関連する一般的な問題について説明します。

証明書のアクセス許可

HGS は、証明書の拇印によって HGS に追加された暗号化証明書と署名証明書の公開キーと秘密キーの両方にアクセスできる必要があります。 具体的には、HGS サービスを実行するグループマネージド サービス アカウント (gMSA) には、キーへのアクセス権が必要です。 HGS で使用される gMSA を見つけるには、HGS サーバーの管理者特権の PowerShell プロンプトで次のコマンドを実行します。

(Get-IISAppPool -Name KeyProtection).ProcessModel.UserName

秘密キーを使用するための gMSA アカウント のアクセス権を付与する方法は、キーが格納されている場所 (ローカル証明書ファイルとしてマシン上、ハードウェア セキュリティ モジュール (HSM) 上、またはカスタムサード パーティのキー ストレージ プロバイダーを使用する場所によって異なります。

ソフトウェアでサポートされる秘密キーへのアクセスを許可する

自己署名証明書または、ハードウェア セキュリティ モジュールまたはカスタム キー ストレージ プロバイダーに格納されていない証明機関によって発行された証明書を使用している場合は、次の手順を実行して秘密キーのアクセス許可を変更できます。

  1. ローカル証明書マネージャー (certlm.msc) を開きます。
  2. [ 個人用>証明書] を展開し、更新する署名証明書または暗号化証明書を見つけます。
  3. 証明書を右クリックし、[ すべてのタスク]>[秘密キーの管理] を選択します。
  4. [ 追加] を選択して、証明書の秘密キーへの新しいユーザー アクセス権を付与します。
  5. オブジェクト ピッカーで、先ほど見つかった HGS の gMSA アカウント名を入力し、[ OK] を選択します
  6. gMSA に証明書への 読み取り アクセス権があることを確認します。
  7. [ OK] を選択 してアクセス許可ウィンドウを閉じます。

サーバー コアで HGS を実行している場合、またはサーバーをリモートで管理している場合、ローカル証明書マネージャーを使用して秘密キーを管理することはできません。 代わりに、 Guarded Fabric Tools PowerShell モジュールをダウンロードする必要があります。これにより、PowerShell でアクセス許可を管理できます。

  1. Server Core コンピューターで管理者特権の PowerShell コンソールを開くか、HGS に対するローカル管理者アクセス許可を持つアカウントで PowerShell リモート処理を使用します。
  2. 次のコマンドを実行して、Guarded Fabric Tools PowerShell モジュールをインストールし、gMSA アカウントに秘密キーへのアクセス権を付与します。
$certificateThumbprint = '<ENTER CERTIFICATE THUMBPRINT HERE>'

# Install the Guarded Fabric Tools module, if necessary
Install-Module -Name GuardedFabricTools -Repository PSGallery

# Import the module into the current session
Import-Module -Name GuardedFabricTools

# Get the certificate object
$cert = Get-Item "Cert:\LocalMachine\My\$certificateThumbprint"

# Get the gMSA account name
$gMSA = (Get-IISAppPool -Name KeyProtection).ProcessModel.UserName

# Grant the gMSA read access to the certificate
$cert.Acl = $cert.Acl | Add-AccessRule $gMSA Read Allow

HSM またはカスタム プロバイダーがサポートする秘密キーへのアクセスを許可する

証明書の秘密キーがハードウェア セキュリティ モジュール (HSM) またはカスタム キー ストレージ プロバイダー (KSP) によってサポートされている場合、アクセス許可モデルは特定のソフトウェア ベンダーによって異なります。 最適な結果を得るには、ベンダーのドキュメントまたはサポート サイトで、特定のデバイス/ソフトウェアに対する秘密キーのアクセス許可の処理方法に関する情報を確認してください。 いずれの場合も、HGS で使用される gMSA には、署名と暗号化の操作を実行できるように、暗号化、署名、および通信の証明書の秘密キーに対する読み取りアクセス許可が必要です。

一部のハードウェア セキュリティ モジュールでは、特定のユーザー アカウントに秘密キーへのアクセス権を付与することはできません。代わりに、特定のキー セット内のすべてのキーへのコンピューター アカウント アクセスを許可します。 このようなデバイスでは、通常、コンピューターにキーへのアクセス権を付与するだけで十分であり、HGS はその接続を利用できます。

HSM のヒント

以下は、Microsoft とそのパートナーのエクスペリエンスに基づいて、HGS で HSM でサポートされるキーを正常に使用するのに役立つ推奨される構成オプションです。 これらのヒントは、便宜上提供されており、読み取り時に正しいことは保証されておらず、HSM メーカーによって承認されていません。 ご不明な点がある場合は、HSM の製造元に問い合わせて、特定のデバイスに関する正確な情報を確認してください。

HSM ブランド/シリーズ 推奨事項
Gemalto SafeNet 証明書要求ファイルのキー使用法プロパティが 0xa0 に設定されていることを確認し、署名と暗号化に証明書を使用できるようにします。 さらに、ローカル証明書マネージャー ツールを使用して、gMSA アカウントに秘密キーへの読み取りアクセス権を付与する必要があります (上記の手順を参照)。
nCipher nShield 各 HGS ノードが、署名キーと暗号化キーを含むセキュリティワールドにアクセスできることを確認します。 さらに、ローカル証明書マネージャーを使用して、gMSA に秘密キーへの読み取りアクセス権を付与する必要がある場合があります (上記の手順を参照してください)。
Utimaco CryptoServers 証明書要求ファイルの [キー使用法] プロパティが [0x13] に設定されていることを確認し、暗号化、暗号化解除、署名に証明書を使用できるようにします。

証明書要求

証明機関を使用して公開キー インフラストラクチャ (PKI) 環境で証明書を発行する場合は、証明書要求に HGS によるこれらのキーの使用に関する最小要件が含まれていることを確認する必要があります。

署名証明書

CSR プロパティ 必須の値
Algorithm Rsa
キー サイズ 少なくとも 2048 ビット
キー使用法 Signature/Sign/DigitalSignature

暗号化証明書

CSR プロパティ 必須の値
Algorithm Rsa
キー サイズ 少なくとも 2048 ビット
キー使用法 Encryption/Encrypt/DataEncipherment

Active Directory Certificate Services テンプレート

Active Directory Certificate Services (ADCS) 証明書テンプレートを使用して証明書を作成する場合は、次の設定でテンプレートを使用することをお勧めします。

ADCS テンプレート プロパティ 必須の値
プロバイダー カテゴリ キー ストレージ プロバイダー
アルゴリズム名 Rsa
キーの最小サイズ 2048
用途 署名と暗号化
キー使用法拡張機能 Digital Signature、Key Encipherment、Data Encipherment ("ユーザー データの暗号化を許可する")

時間ドリフト

サーバーの時間が、保護されたファブリック内の他の HGS ノードまたは Hyper-V ホストの時間と大幅にずれた場合は、構成証明署名者証明書の有効性に関する問題が発生する可能性があります。 構成証明署名者証明書は HGS のバックグラウンドで作成および更新され、構成証明サービスによって保護されたホストに発行された正常性証明書に署名するために使用されます。

構成証明署名者証明書を更新するには、管理者特権の PowerShell プロンプトで次のコマンドを実行します。

Start-ScheduledTask -TaskPath \Microsoft\Windows\HGSServer -TaskName
AttestationSignerCertRenewalTask

または、 タスク スケジューラ (taskschd.msc) を開き、タスク スケジューラ ライブラリ>Microsoft>Windows>HGSServer に移動し、 AttestationSignerCertRenewalTask という名前のタスクを実行して、スケジュールされたタスクを手動で実行することもできます。

構成証明モードの切り替え

Set-HgsServer コマンドレットを使用して HGS を TPM モードから Active Directory モードに、またはその逆に切り替える場合、HGS クラスター内のすべてのノードが新しい構成証明モードの適用を開始するまでに最大 10 分かかる場合があります。

これは通常の動作です。

すべてのホストが新しい構成証明モードを使用して正常に構成証明されていることを確認するまで、以前の構成証明モードからホストを許可するポリシーを削除しないことをお勧めします。

TPM から AD モードへの切り替え時の既知の問題

TPM モードで HGS クラスターを初期化した後で Active Directory モードに切り替えた場合、HGS クラスター内の他のノードが新しい構成証明モードに切り替えなくなる既知の問題があります。 すべての HGS サーバーが正しい構成証明モードを適用していることを確認するには、HGS クラスターの各ノードで を実行 Set-HgsServer -TrustActiveDirectory します。

TPM モードから AD モードに切り替え、クラスターが最初に AD モードで設定されている場合、この問題は適用されません。

Get-HgsServer を実行することで、HGS サーバーの構成証明モードを確認できます。

メモリ ダンプ暗号化ポリシー

メモリ ダンプ暗号化ポリシーを構成しようとして、既定の HGS ダンプ ポリシー (Hgs_NoDumps、Hgs_DumpEncryption、Hgs_DumpEncryptionKey) またはダンプ ポリシー コマンドレット (Add-HgsAttestationDumpPolicy) が表示されない場合は、最新の累積的な更新プログラムがインストールされていない可能性があります。

これを修正するには、 HGS サーバーを 最新の累積的な Windows 更新プログラムに更新し、 新しい構成証明ポリシーをアクティブ化します

新しいダンプ暗号化機能がインストールされていないホストは、HGS ポリシーがアクティブになると構成証明が失敗する可能性が高くなりますので、新しい構成証明ポリシーをアクティブ化する前に、Hyper-V ホストを同じ累積的な更新プログラムに更新してください。

保証キー証明書のエラー メッセージ

Add-HgsAttestationTpmHost コマンドレットを使用してホストを登録すると、提供されたプラットフォーム識別子ファイルから 2 つの TPM 識別子 (保証キー証明書 (EKcert) とパブリック保証キー (EKpub) が抽出されます。 EKcert は TPM の製造元を識別し、TPM が正規のサプライ チェーンを通じて製造されていることを保証します。 EKpub はその特定の TPM を一意に識別し、HGS がシールドされた VM を実行するためのホスト アクセスを許可するために使用するメジャーの 1 つです。

次の 2 つの条件のいずれかが true の場合、TPM ホストを登録するとエラーが発生します。

  • プラットフォーム識別子ファイルに保証キー証明書が含まれていない。
  • プラットフォーム識別子ファイルには保証キー証明書が含まれていますが、その証明書はシステムで信頼されていません。

一部の TPM 製造元は、TPM に EKcerts を含めません。

これが TPM の場合と思われる場合は、TPM に EKcert が含まれていないことを OEM に確認し、フラグを -Force 使用してホストを HGS に手動で登録します。 TPM に EKcert がある必要があるが、プラットフォーム識別子ファイルに EKcert が見つからなかった場合は、ホストで Get-PlatformIdentifier を実行するときに管理者 (管理者特権) PowerShell コンソールを使用していることを確認します。

EKcert が信頼されていないというエラーを受け取った場合は、各 HGS サーバーに 信頼された TPM ルート証明書パッケージがインストール されていること、および TPM ベンダーのルート証明書がローカル コンピューターの "TrustedTPM_RootCA" ストアに存在することを確認します。 適用可能な中間証明書は、ローカル コンピューターの "TrustedTPM_IntermediateCA" ストアにもインストールする必要があります。 ルート証明書と中間証明書をインストールすると、正常に実行 Add-HgsAttestationTpmHost できるようになります。

グループ管理サービス アカウント (gMSA) 特権

HGS サービス アカウント (IIS の Key Protection Service アプリケーション プールに使用される gMSA) には、 セキュリティ監査の生成 特権 (とも呼ばれます SeAuditPrivilege) を付与する必要があります。 この特権がない場合は、最初の HGS 構成が成功し、IIS が起動しますが、Key Protection Service は機能しません。HTTP エラー 500 ("/KeyProtection アプリケーションのサーバー エラー" ) を返します。 アプリケーション イベント ログには、次の警告メッセージが表示される場合もあります。

System.ComponentModel.Win32Exception (0x80004005): A required privilege is not held by the client
at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.NativeUtility.RegisterAuditSource(String pszSourceName, SafeAuditProviderHandle& phAuditProvider)
at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.SecurityLog.RegisterAuditSource(String sourceName)

または

Failed to register the security event source.
   at System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app)
   at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
   at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
   at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

Failed to register the security event source.
   at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.SecurityLog.RegisterAuditSource(String sourceName)
   at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.SecurityLog.ReportAudit(EventLogEntryType eventType, UInt32 eventId, Object[] os)
   at Microsoft.Windows.KpsServer.KpsServerHttpApplication.Application_Start()

A required privilege is not held by the client
   at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.NativeUtility.RegisterAuditSource(String pszSourceName, SafeAuditProviderHandle& phAuditProvider)
   at Microsoft.Windows.KpsServer.Common.Diagnostics.Auditing.SecurityLog.RegisterAuditSource(String sourceName)

さらに、Key Protection Service コマンドレット ( Get-HgsKeyProtectionCertificate など) が機能せず、代わりにエラーが返される場合があります。

この問題を解決するには、gMSA に "セキュリティ監査の生成" (SeAuditPrivilege) を付与する必要があります。 これを行うには、HGS クラスターのすべてのノードでローカル セキュリティ ポリシー SecPol.msc を使用するか、グループ ポリシーを使用します。 または、 SecEdit.exe ツールを使用して現在のセキュリティ ポリシーをエクスポートし、構成ファイル (プレーン テキスト) で必要な編集を行い、インポートし直します。

注:

この設定を構成する場合、特権に対して定義されているセキュリティ原則の一覧は、既定値を完全にオーバーライドします (連結されません)。 そのため、このポリシー設定を定義するときは、追加する gMSA に加えて、この特権の既定の所有者 (ネットワーク サービスとローカル サービス) の両方を含める必要があります。