kerberos约束委派核心是精准控制服务代用户访问后端资源,要求spn严格匹配、主体为合规域账户、域功能级别≥2012 r2,推荐用powershell配置并验证principalsallowedtodelegatetoaccount属性,同时启用s4u2proxy支持及时间同步。
配置ad环境下的kerberos约束委派,核心是用最小权限原则控制服务代用户访问后端资源的行为,避免非约束委派带来的tgt泄露风险。关键不在“开不开”,而在“准不准”——spn必须匹配、账户类型合规、验证手段到位。
明确适用场景与账户前提
约束委派适用于IIS调SQL Server、SharePoint连后端API、Exchange前端代理等多跳身份传递场景。它不适用于NTLM通信链路,也不接受本地系统账户(如NT AUTHORITY\SYSTEM)或内置管理员账户作为委派主体。
- 委派主体必须是域用户账户(如
svc-webapp)或已加入域的计算机账户(如web01$) - 后端服务必须注册有效SPN,例如
MSSQLSvc/sql01.contoso.com:1433或HTTP/api.internal.contoso.com,大小写不敏感但FQDN和端口需完全一致 - 域功能级别建议≥Windows Server 2012 R2,以支持更细粒度的策略控制
用PowerShell精准配置委派目标
GUI操作易遗漏细节,推荐使用ActiveDirectory模块执行原子化设置。注意区分主体类型:用户账户用Set-ADUser,计算机账户用Set-ADComputer。
- 为用户账户配置:
Set-ADUser "svc-webapp" -PrincipalsAllowedToDelegateToAccount @("MSSQLSvc/sql01.contoso.com:1433", "HTTP/backend.contoso.com") - 为计算机账户配置(如IIS服务器):
Set-ADComputer "web01$" -PrincipalsAllowedToDelegateToAccount @("MSSQLSvc/sql01.contoso.com:1433") - 配置后立即验证:
Get-ADUser "svc-webapp" -Properties PrincipalsAllowedToDelegateToAccount | Select-Object PrincipalsAllowedToDelegateToAccount,输出应为非空数组
同步完成SPN注册与服务端启用
仅配置委派属性不够,后端服务必须能正确接收并处理S4U2Proxy票据。常见断点在于SPN未注册或应用层未开启凭据转发。
- 注册SPN(以HTTP服务为例):
setspn -s HTTP/webapp.contoso.com svc-webapp - IIS场景下,需在
web.config中启用:<system.webserver><security><authentication><windowsauthentication useapppoolcredentials="true"></windowsauthentication></authentication></security></system.webserver> - 确保所有参与节点时间偏差≤5分钟:
w32tm /query /status检查同步源,强制校时可执行w32tm /resync
优先采用基于资源的约束委派(RBCD)
传统约束委派由前端服务账户控制权限,而RBCD把决策权交给后端资源管理员,更符合职责分离原则,也天然支持跨域场景。
- 为SQL服务器(
sql01$)授权允许svc-webapp代用户访问:Set-ADComputer "sql01$" -PrincipalsAllowedToDelegateToAccount "svc-webapp" - RBCD无需前端账户开启“信任委派”属性,也不依赖域控制器的全局策略,攻击面更小
- 若需跨域委派,RBCD仍可工作,只需确保林信任关系正常且SPN在各自域内注册










