
我們已經為網域中的服務帳戶配置了 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 腳本進行簽署以防止竄改。