是否有簡單的方法可以為所有網域控制站設定 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 腳本進行簽署以防止竄改。

相關內容