是否有一种简单的方法可以为所有域控制器设置 Active Directory 约束委派

是否有一种简单的方法可以为所有域控制器设置 Active Directory 约束委派

我们已经为域中的服务帐户配置了 AD 约束委派,原则上一切正常。但是,要做到这一点,我们必须设置对特定域控制器的 LDAP 委派。这种方法的缺点是,如果我们引入了新的 DC,如果我们无法更新委派以包含新的 DC,则可能会出现服务中断。有没有办法委派给域中的任何/所有 DC,还是只能一次委派一个?

答案1

在所有情况下,Kerberos 委派配置都是一项敏感操作,应谨慎操作,并由受信任的管理员手动完成。由于 SPN 包含提供特定服务的计算机的名称,因此无法一次指定“所有 DC”。这是因为您无法知道将来下一个 DC 的名称是什么。

因此,我建议将 SPN 配置步骤添加到提升 DC 的程序中。

事实上,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 }
}

笔记:此脚本仅供演示!它是未经测试并且可能包含错误。使用前请在实验室中进行测试!

再次强调,这是敏感操作。如果选择自动化,请务必对 PowerShell 脚本进行签名,以防止篡改。

相关内容