MaxTokenSize設定でKerberosトークンサイズを構成する方法

Kerberos チケットサイズと関連する認証の問題を修正する方法

Kerberos関連の認証エラーへの対応は、特にユーザーが「アクセス拒否」エラーや「要求ヘッダーが長すぎます」という奇妙なメッセージを受け取るようになると、イライラさせられることがあります。これは、グループメンバーシップの多さ、SIDHistoryの問題、トークンのサイズが大きすぎるなど、Kerberosチケット自体が大きすぎることが原因である場合もあります。このガイドでは、ユーザーのトークンサイズを決定する方法と、必要に応じてシステムを調整して大きなチケットを処理できるようにする手順に焦点を当てています。Windowsでは、当然ながら、この処理を少し複雑にする必要があるためです。

Kerberos チケットサイズと関連する認証の問題を修正する方法

方法1: ユーザーのKerberosトークンのサイズを確認する

これは、Kerberosチケットのサイズがシステムの処理能力を超えているかどうかを把握するのに役立ちます。特に、イベントビューアーにイベントID 40960やKerberosセキュリティエラーなどのエラーが表示されている場合に役立ちます。Windowsにはこの情報を確認するための組み込みの簡単な方法はありませんが、GitHubリポジトリのPowerShellスクリプトを使えば簡単に確認できます。基本的に、このスクリプトはセキュリティグループ、SIDHistory、そしてトークン全体のサイズを推定します。

まず、このGitHubリンクからスクリプトを入手し、として保存します。CheckMaxTokenSize.ps1次に、スクリプトの実行を許可します。たとえば、次のようにします。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

スクリプトを保存した場所に移動し、cd C:\scripts\次のようにユーザー名でスクリプトを実行します。

.\CheckMaxTokenSize.ps1 -Principals 'yourusername' -Details $true

スクリプトは、推定トークン サイズ、グループ数、SIDHistory 情報、およびサイズが Windows の既定の最大値 (通常、Windows 7 では 12 KB、Windows 8/Server 2012 以降では 48 KB) に近いか超えているかを出力します。

実行後、トークンサイズが問題を引き起こすほど大きくないか確認できます。特に、デフォルトの制限に近づいたり超えたりしている場合は注意が必要です。ネストされたグループやSIDHistoryの数が多いと、サイズが急速に増大する可能性があります。この情報は、グループ数を減らすか、MaxTokenSizeを増やすかを判断するのに役立ちます。

方法2: ユーザーグループのメンバーシップを減らす

これは多くの場合最も簡単な解決策ですが、必ずしも実現可能とは限りません。ユーザーが数百のグループ、特にネストされたグループに属している場合、チケットのサイズが急増します。なぜこれが機能するのかは定かではありませんが、グループメンバーシップを削減するか、可能であればSIDHistoryを削除すると、Kerberosトークンのサイズが大きくなりすぎるのを防ぐことができます。特別な委任オプションを無効にすることでも、チケットに含まれる内容が減るため、効果が出る場合があります。

プロのヒント: 次の方法でユーザー グループのメンバーシップを確認します。

Get-ADUser -Identity 'username' -Properties MemberOf, SIDHistory | Select-Object MemberOf, SIDHistory

制御不能な数のグループに気付いた場合は、メンバーシップを減らすか、SIDHistory をクリーンアップしてチケットのサイズを縮小することについて管理者に相談してください。

方法3: MaxTokenSizeレジストリ値を増やす

グループ数を減らすだけでは不十分、または選択肢にない場合、これが有効な手段です。MaxTokenSizeの設定を高く設定することも可能です(例えば64KBまで)。ただし、設定を上げすぎるとパフォーマンスやセキュリティに影響が出る可能性があるので注意が必要です。古いWindowsではデフォルトは12KBですが、新しいWindowsでは48KBまで拡張されています。この値を上げるには、レジストリを編集する必要があります。

  1. レジストリエディター(regedit)を開きます。
  2. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parametersに移動します。
  3. MaxTokenSizeという新しいDWORD(32ビット)値を作成します。
  4. 値(10進数)を48000(48KB)などに設定します。必要に応じて調整してください。
  5. 変更を有効にするには再起動してください。

レジストリの変更を確認するには、次のコマンドを実行します。

Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters | Select-Object MaxTokenSize

これにより、Windows は Kerberos 認証用に大きなバッファーを割り当てることができ、特に大規模なグループ メンバーシップを持つユーザーのエラーが軽減されます。

はい、グループポリシーの「コンピューターの構成」>「ポリシー」>「管理用テンプレート」>「システム」>「Kerberos」で設定できます。「Kerberos SSPIコンテキストトークンの最大バッファサイズ」の設定を確認してください。

ただし、やり過ぎには注意が必要です。Microsoftは64KBを超えないように推奨しています。バッファサイズが大きいほどメモリ使用量が増え、セキュリティ上の懸念も生じる可能性があります。

方法4: Kerberos使用時のIIS HTTP 400エラーを修正する

ウェブサイトで「リクエストヘッダーが長すぎます」などのHTTP 400エラーが発生する場合、セキュリティグループが原因でKerberosトークンがIISの制限を超えている可能性があります。これは、IISがWWW-Authenticateヘッダーに大量のグループ情報を配置しようとした際に発生します。

これを修正するには、 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parametersのレジストリを調整します。

  • MaxFieldLength — デフォルトは16KBです。徐々に増やしてください(例:32000(32KB))。
  • MaxRequestBytes — デフォルトは 16 MB ですが、必要に応じて、より大きなヘッダー (例: 48000 バイト) を処理するために増やすことができます。

これらの値を増やすと、サーバーのパフォーマンスとセキュリティに影響が出る可能性があるので注意してください。段階的に変更を加え、IISを再起動してください。

iisreset

通常、これで問題は解決しますが、グループが大きい場合は、ヘッダー サイズを大きくするのではなく、グループ メンバーシップの数または範囲を減らすことをお勧めします。

まとめ

  • ユーザーの Kerberos トークンのサイズを確認し、それが根本原因であるかどうかを確認します。
  • 可能であれば、過剰なグループ メンバーシップまたは SIDHistory を減らします。
  • より大きなチケット(最大 64 KB)を許可するには、MaxTokenSize レジストリ設定を慎重に増やしてください。
  • Kerberos 認証を使用しているときに HTTP 400 エラーが発生する場合は、IIS ヘッダー制限を調整します。

まとめ

Kerberosチケットのサイズの問題に対処するには、診断と調整の両方が必要です。必ずしも簡単ではありませんが、以下の手順でサイズが原因かどうかを特定し、対処することができます。通常は、グループの容量を減らすか、影響を受けるエンドポイントのバッファを増やすことで解決できます。ただし、ユーザーが数百ものグループに所属している場合は、奇跡的な解決は期待できません。グループメンバーシップやSIDHistoryのクリーンアップしか解決策がない場合もあります。

これで誰かの時間短縮になれば幸いです。頑張ってください。調整後にエラーが減ったかどうか、イベントビューアーのログで確認してください。