Windows Server 2012のリソース SID 圧縮により、リソース SID 圧縮をサポートしていないデバイスで承認の問題が発生する可能性があります

この記事は、リソース SID 圧縮をサポートしていないデバイスでホストされているファイル共有にアクセスするときに発生する問題を解決するのに役立ちます。

適用対象: Windows Server 2012 R2
元の KB 番号: 2774190

現象

リソース SID 圧縮をサポートしていないデバイスでホストされているファイル共有にアクセスする場合、ドメイン コントローラー Windows Server 2012展開した後、次の現象が発生する可能性があります。

\\servername\sharename\subfolder という形式を使用してマップされたネットワーク ドライブにConnections、Access Denied で失敗します。

注:

IP アドレスを使用して同じパスに接続すると、常に機能します。

リソース グループのメンバーシップによって制御されるリソースへのアクセスは失敗します。

原因

この問題は、次の条件下で発生します。

  • Kerberos は、デバイスに対するユーザーのセッションを認証するために使用されます。
  • セッションセットアップで使用される kerberos チケットは、Windows Server 2012を実行している KDC によって発行されました。
  • ターゲット デバイスはリソース SID 圧縮を理解していません。これは、Windows Server 2012の Kerberos の新機能です。
  • リソース SID の圧縮は、一部の NAS デバイス (ネットワーク アクセス ストレージ デバイス) では認識されない場合があります。

解決方法

Kerberos リソース SID 圧縮の相互運用性の問題を解決するには、2 つの方法があります。

解像度 1: (推奨)

リソース SID 圧縮の相互運用性に対して推奨される解決策は、ターゲット サービス/デバイスのセキュリティ コンテキストを表すプリンシパルである Active Directory 内のオブジェクトの msDS-SupportedEncryptionTypes 属性で、リソース グループ圧縮ビット (0x80000) を無効にすることです。

正しい値を生成するには、次の手順を実行する必要があります。

  1. セキュリティ プリンシパルの msDS-SupportedEncryptionTypes 属性の現在の値を取得します。
  2. 0x80000を使用して現在の値に対してビットごとの OR を実行して、新しい値を計算します。
  3. セキュリティ プリンシパルの msDS-SupportedEncryptionTypes 属性に新しい値を格納します。

または、次のWindows PowerShell スクリプトを使用して、指定されたセキュリティ プリンシパルのリソース SID 圧縮を無効にすることもできます。

DisableKerbGroupCompression.ps1

#
#Script to Disable Kerberos Group SID Compression
#param( $principalName)$newValue = 0# Get the AD principal and value
$obj = get-adobject -Filter {(cn -like $principalName)} -Properties *
if($obj -eq $null)
{
Write-Host "Cannot find $principalName in the directory"
break
}$newValue = $value = $obj."msDS-SupportedEncryptionTypes"
$msgBefore =$msgAfter = "Resource group compression status on principal {0}: " -f $principalName
if( ($value -band 0x0080000) -eq 0)
{$msgBefore += "Enabled"}
else
{$msgBefore += "Disabled"}Write-Host $msgBeforeif( ($value -band 0x00080000) -eq 0) #enable the disable bit
{$newValue = $value -bor 0x00080000}if($newValue -ne $value) #update if values are different
{
Set-ADObject $obj -Replace @{"msDS-SupportedEncryptionTypes"=$newValue}if( ($newvalue -band 0x0080000) -eq 0)
{$msgAfter += "Enabled"}
else
{$msgAfter += "Disabled"}Write-Host $msgAfter
}
else
{ Write-Host "Resource group compression did not change."}

構文

DisableKerbGroupCompression.ps1 objectName

解決方法 2

この解像度は、解像度を使用できない場合にのみ使用する必要があります。

この解決により、個々のWindows Server 2012 ドメイン コントローラー (KDC) に対するリソース SID の圧縮が無効になります。 この設定を各Windows Server 2012ドメイン コントローラーに適用して、ドメイン コントローラーがリソース グループ SID 圧縮を使用するチケットを発行しないようにする必要があります。

リソース SID の圧縮は既定でオンになっています。ただし、無効にすることはできます。 Windows Server 2012 KDC のリソース SID 圧縮は、レジストリ キーの DisableResourceGroupsFields レジストリ値をHKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Kdc\Parameters使用して無効にします。 このレジストリ値には、DWORD レジストリ値の種類があります。 レジストリ値を 1 に設定すると、リソース SID の圧縮を完全に無効にします。 KDC は、サービス チケットの作成時にこの構成を読み取ります。 ビットを有効にすると、KDC はサービス チケットをビルドするときにリソース SID 圧縮を使用しません。

詳細

KDC リソース SID の圧縮

Kerberos 認証では、セキュリティ プリンシパルのセキュリティ識別子 (SID)、SID 履歴、ユーザーがメンバーになっているすべてのグループ (リソース ドメインのユニバーサル グループやグループなど) が挿入されます。 グループ メンバーシップが多すぎるセキュリティ プリンシパルは、認証データのサイズに大きく影響します。 認証データが、Kerberos によってアプリケーションに報告された割り当て済みサイズよりも大きい場合があります。 これにより、一部のアプリケーションで認証エラーが発生する可能性があります。 リソース ドメインの SID は SID の同じドメイン部分を共有します。これらの SID は、リソース ドメイン内のすべての SID に対して 1 回だけリソース ドメイン SID を提供するだけで圧縮できます。

WINDOWS SERVER 2012 KDC は、リソース SID 圧縮を利用して PAC のサイズを縮小するのに役立ちます。 既定では、Windows Server 2012 KDC は常にリソース SID を圧縮します。 リソース SID を圧縮するために、KDC はターゲット リソースがメンバーであるリソース ドメインの SID を格納します。 次に、各リソース SID の RID 部分のみを認証データの ResourceGroupIds 部分に挿入します。

リソース SID 圧縮では、ドメイン SID が各インスタンスではなく 1 回格納されるため、リソース SID の各格納インスタンスのサイズが小さくなります。 リソース SID 圧縮を使用しない場合、KDC はリソース ドメインによって追加されたすべての SID を PAC 構造体の Extra-SID 部分 (SID の一覧) に挿入します。 [MS-KILE]: Kerberos プロトコル拡張機能

相互運用性

一部の Kerberos 実装では、リソース グループの圧縮が理解されていない可能性があるため、互換性がありません。 このようなシナリオでは、リソース グループの圧縮を無効にして、Windows Server 2012 KDC がサードパーティの Kerberos 実装と相互運用できるようにする必要がある場合があります。