すべてのドメイン コントローラに対して Active Directory の制約付き委任を設定する簡単な方法はありますか?

すべてのドメイン コントローラに対して Active Directory の制約付き委任を設定する簡単な方法はありますか?

ドメイン内のサービス アカウントに対して AD 制約付き委任を構成する作業を完了し、原則としてすべてが機能するようになりました。ただし、そのためには、特定のドメイン コントローラーへの LDAP 委任を設定する必要がありました。このアプローチの欠点は、新しい DC を導入した場合、委任を更新して新しい DC を含めないと、サービスが停止する可能性があることです。ドメイン内の任意の DC またはすべての DC に委任する方法はありますか。それとも、一度に 1 つしか実行できないのでしょうか。

答え1

いずれの場合も、Kerberos 委任の構成は機密性の高い操作であり、信頼できる管理者が手動で慎重に行う必要があります。SPN には特定のサービスを提供するコンピューターの名前が含まれているため、一度に「すべての DC」を指定することはできません。これは、将来、次の DC の名前が何になるかがわからないためです。

したがって、DC を昇格するための手順に SPN 構成手順を追加することをお勧めします。

実際、Kerberos 制約付き委任 UI は「msDS-AllowedToDelegateTo」属性を入力します。そのため、PowerShell を使用して委任を自動化するのは簡単です。たとえば、次のようになります。

$userWithConstrainedDelegation = "put_username_here" 
$domain = Get-ADDomain
$user = Get-ADUser $userWithConstrainedDelegation -Properties "msDS-AllowedToDelegateTo"

$spns = @()
$spnsToAdd = @()

#// Get all domain controllers in the current domain
Get-ADDomainController -Filter * | % {

    #// Construct SPNs (an example for ldap SPN)
    $spns += "ldap/{0}" -f $_.Name
    $spns += "ldap/{0}" -f $_.HostName
    $spns += "{0}/{1}" -f $s1,$domain.NetBIOSName

    #// Check if SPN should be added
    foreach($service in $spns){
        if ($user.'msDS-AllowedToDelegateTo' -inotcontains $service){
            "ADDING: {0}" -f $service
            $spnsToAdd += $service
        }
    }

    $spns = @()

}

#// Add missing SPNs
if ($spnsToAdd.Count -gt 0){
    Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = $spnsToAdd }
}

注記:このスクリプトはデモ用です。未テストバグが含まれている可能性があります。使用する前に LAB でテストしてください。

繰り返しますが、これは機密性の高い操作です。自動化を選択する場合は、改ざんを防ぐために PowerShell スクリプトに必ず署名してください。

関連情報