この記事は、リソース SID 圧縮をサポートしていないデバイスでホストされているファイル共有にアクセスするときに発生する問題を解決するのに役立ちます。
元の KB 番号: 2774190
現象
リソース SID 圧縮をサポートしていないデバイスでホストされているファイル共有にアクセスする場合、Windows Server 2012 ドメイン コントローラーを展開した後、次の現象が発生する可能性があります。
\\servername\sharename\subfolder 形式を使用してマップされたネットワーク ドライブへの接続は、アクセス拒否で失敗します。
Note
IP アドレスを使用して同じパスに接続すると、常に機能します。
リソース グループのメンバーシップによって制御されるリソースへのアクセスは失敗します。
原因
この問題は、次の条件下で発生します。
- Kerberos は、デバイスに対するユーザーのセッションを認証するために使用されます。
- セッションセットアップで使用された kerberos チケットは、Windows Server 2012 を実行している KDC によって発行されました。
- ターゲット デバイスは、Windows Server 2012 の Kerberos の新機能であるリソース SID 圧縮を理解していません。
- リソース SID の圧縮は、一部の NAS デバイス (ネットワーク アクセス ストレージ デバイス) では認識されない場合があります。
解決方法
Kerberos リソース SID 圧縮の相互運用性の問題を解決するには、2 つの方法があります。
解像度 1: (推奨)
リソース SID 圧縮の相互運用性に対して推奨される解決策は、ターゲット サービス/デバイスのセキュリティ コンテキストを表すプリンシパルである Active Directory 内のオブジェクトの msDS-SupportedEncryptionTypes 属性で、リソース グループ圧縮ビット (0x80000) を無効にすることです。
正しい値を生成するには、次の手順を実行する必要があります。
- セキュリティ プリンシパルの msDS-SupportedEncryptionTypes 属性の現在の値を取得します。
- 0x80000を使用して現在の値に対してビットごとの OR を実行して、新しい値を計算します。
- セキュリティ プリンシパルの 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 では、HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Kdc\Parameters
レジストリ キーの下にある DisableResourceGroupsFields レジストリ値を使用して、リソース SID 圧縮を無効にします。 このレジストリ値には、DWORD レジストリ値型があります。 レジストリ値を 1 に設定すると、リソース SID の圧縮が完全に無効になります。 KDC は、サービス チケットを構築するときにこの構成を読み取ります。 ビットが有効になっている場合、KDC はサービス チケットのビルド時にリソース SID 圧縮を使用しません。
詳細
KDC リソース SID の圧縮
Kerberos 認証では、セキュリティ プリンシパルのセキュリティ識別子 (SID) 、SID 履歴、ユーザーがメンバーであるすべてのグループ (リソース ドメインのユニバーサル グループとグループを含む) が挿入されます。 グループ メンバーシップが多すぎるセキュリティ プリンシパルは、認証データのサイズに大きく影響します。 認証データが、Kerberos によってアプリケーションに報告された割り当て済みサイズよりも大きい場合があります。 これにより、一部のアプリケーションで認証エラーが発生する可能性があります。 リソース ドメインの SID は SID の同じドメイン部分を共有します。これらの SID は、リソース ドメイン内のすべての SID に対してリソース ドメイン SID を 1 回だけ指定することによって圧縮できます。
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 実装と相互運用できるようにするには、リソース グループの圧縮を無効にする必要がある場合があります。