运行应用程序时,可能需要这些应用程序访问其他用户上下文中的资源。 Active Directory 域服务(AD DS)支持一种称为 Kerberos 委派 的机制,用于启用此用例。 然后,Kerberos 约束委派 (KCD) 将基于此机制进行构建,以定义可以在此用户的上下文中访问的特定资源。
与传统的本地 AD DS 环境相比,Microsoft Entra 域服务托管域可以更安全地进行锁定,因此,请使用更安全的基于资源的 KCD。
本文介绍如何在域服务托管域中配置基于资源的 Kerberos 约束委派。
先决条件
若要完成本文,需准备好以下资源:
- 有效的 Azure 订阅。
- 如果你没有 Azure 订阅,请创建一个帐户。
- 与您的订阅关联的 Microsoft Entra 租户,可以是与本地目录同步的,也可以是仅限于云端的目录。
- 在 Microsoft Entra 租户中启用和配置的 Microsoft Entra 域服务托管域。
- 已加入域服务托管域的 Windows Server 管理 VM。
- 如果需要,请完成创建 Windows Server VM 并将其加入托管域 的教程,然后 安装 AD DS 管理工具。
- 属于 Microsoft Entra 租户中“Microsoft Entra DC 管理员”组的用户帐户。
Kerberos 约束委派概述
Kerberos 委派允许一个帐户模拟另一个帐户来访问资源。 例如,访问后端 Web 组件的 Web 应用程序可以在后端连接时将自身模拟为不同的用户帐户。 Kerberos 委派不安全,因为它不会对模拟帐户可以访问哪些资源进行限制。
Kerberos 约束委派 (KCD) 限制指定的服务器或应用程序在模拟其他标识时可以连接的服务或资源。 传统 KCD 需要域管理员权限才能为服务配置域帐户,并限制该帐户在单个域中运行。
传统的 KCD 也有一些问题。 例如,在早期操作系统中,服务管理员没有有效途径来了解哪些前端服务委派给了其拥有的资源服务。 可以委托给资源服务的任何前端服务是潜在的攻击点。 如果托管了配置为委托给资源服务的前端服务的服务器遭到入侵,则资源服务也可能遭到入侵。
在托管域中,你没有域管理员权限。 因此,无法在托管域中配置基于帐户的传统 KCD。 可以改用基于资源的 KCD,这也更安全。
基于资源的 KCD
Windows Server 2012 及更高版本使服务管理员能够为其服务配置约束委派。 此模型称为基于资源的 KCD。 使用此方法,后端服务管理员可以允许或拒绝使用 KCD 的特定前端服务。
可使用 PowerShell 配置基于资源的 KCD。 可以使用 Set-ADComputer 或 Set-ADUser cmdlet,具体取决于模拟帐户是计算机帐户还是用户帐户/服务帐户。
为计算机帐户配置基于资源的 KCD
在此方案中,假设你有一个在名为 contoso-webapp.aaddscontoso.com 的计算机上运行的 Web 应用。
Web 应用需要访问在域用户上下文中名为 contoso-api.aaddscontoso.com 的计算机上运行的 Web API。
完成以下步骤以配置此方案:
创建自定义 OU。 可以将管理此自定义 OU 的权限委托给托管域中的用户。
将虚拟机(运行 Web 应用的虚拟机和运行 Web API 的虚拟机)加入托管域。 在上一步的自定义 OU 中创建这些计算机帐户。
注释
Web 应用和 Web API 的计算机帐户必须位于你有权配置基于资源的 KCD 的自定义 OU 中。 无法为内置“Microsoft Entra DC 计算机”容器中的计算机帐户配置基于资源的 KCD。
最后,使用 Set-ADComputer PowerShell cmdlet 配置基于资源的 KCD。
在已加入域的管理 VM 中,使用属于“Microsoft Entra DC 管理员”组成员的用户帐户登录,运行以下 cmdlet。 根据需要提供自己的计算机名称:
$ImpersonatingAccount = Get-ADComputer -Identity contoso-webapp.aaddscontoso.com Set-ADComputer contoso-api.aaddscontoso.com -PrincipalsAllowedToDelegateToAccount $ImpersonatingAccount
为用户帐户配置基于资源的 KCD
在此方案中,假设你有一个作为名为 appsvc 的服务帐户运行的 Web 应用。 此 Web 应用需要访问一个 Web API,后者在域用户的上下文中作为名为 backendsvc 的服务帐户运行。 完成以下步骤以配置此方案:
创建自定义 OU。 可以将管理此自定义 OU 的权限委托给托管域中的用户。
将运行后端 Web API/资源的虚拟机加入到托管域。 在自定义 OU 中创建计算机帐户。
创建用于在自定义 OU 中运行 Web 应用的服务帐户(例如 appsvc)。
注释
同样,Web API VM 的计算机帐户和 Web 应用的服务帐户必须位于有权配置基于资源的 KCD 的自定义 OU 中。 你无法为内置“Microsoft Entra DC 计算机”容器或“Microsoft Entra DC 用户”容器中的帐户配置基于资源的 KCD。 这也意味着你无法使用从 Microsoft Entra 同步的用户帐户来设置基于资源的 KCD。 必须创建和使用在域服务中专门创建的服务帐户。
最后,使用 Set-ADUser PowerShell cmdlet 配置基于资源的 KCD。
在已加入域的管理 VM 中,使用属于“Microsoft Entra DC 管理员”组成员的用户帐户登录,运行以下 cmdlet。 根据需要提供自己的服务名称:
$ImpersonatingAccount = Get-ADUser -Identity appsvc Set-ADUser backendsvc -PrincipalsAllowedToDelegateToAccount $ImpersonatingAccount
后续步骤
若要详细了解委派在 Active Directory 域服务中的工作原理,请参阅 Kerberos 约束委派概述。