我们已经为域中的服务帐户配置了 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 脚本进行签名,以防止篡改。