使用 Azure PowerShell 为本地域创建 Microsoft Entra 域服务林信任

在无法同步密码哈希的环境中,或者用户只使用智能卡登录,因此不知道密码的情况下,你可以创建从 Microsoft Entra 域服务到一个或多个本地 AD DS 环境的单向出站信任。 这种信任关系可让用户、应用程序和计算机通过域服务托管域向本地域进行身份验证。 在这种情况下,本地密码哈希始终不会进行同步。

Diagram of forest trust from Domain Services to on-premises AD DS

在本文中,学习如何:

  • 使用 Azure PowerShell 创建域服务林
  • 使用 Azure PowerShell 在托管域中创建单向出站林信任
  • 在本地 AD DS 环境中配置 DNS 以支持托管域连接
  • 在本地 AD DS 环境中创建单向入站林信任
  • 测试并验证用于身份验证和资源访问的信任关系

如果还没有 Azure 订阅,可以在开始前创建一个帐户

重要

托管域林不支持 Azure HDInsight 或 Azure 文件存储。 默认托管域林支持这两项附加服务。

先决条件

需有以下资源和特权才能完成本文:

登录 Microsoft Entra 管理中心

在本文中,请使用 Microsoft Entra 管理中心从托管域创建并配置出站林信任。 若要开始操作,请先登录到 Microsoft Entra 管理中心

部署过程

这是一个多部分过程,用于创建托管域林以及与本地 AD DS 的信任关系。 以下高级步骤可构建受信任混合环境:

  1. 创建托管域服务主体。
  2. 创建托管域林。
  3. 使用站点到站点 VPN 或 Express Route 创建混合网络连接。
  4. 创建信任关系的托管域端。
  5. 创建信任关系的本地 AD DS 端。

在开始之前,请确保了解网络注意事项、林命名和 DNS 要求。 部署后,便无法更改托管域林名称。

创建 Microsoft Entra 服务主体

域服务要求服务主体从 Microsoft Entra ID 同步数据。 必须先在 Microsoft Entra 租户中创建此主体,然后再创建托管域林。

创建一个 Microsoft Entra 服务主体,使域服务能够通信并对自身进行身份验证。 使用名称为“域控制器服务”的特定应用程序 ID 6ba9a5d4-8456-4118-b521-9c5ca10cdf84 。 请不要更改此应用程序 ID。

使用 New-MgServicePrincipal cmdlet 创建 Microsoft Entra 服务主体:

New-MgServicePrincipal

创建托管域

若要创建托管域,请使用 New-AaddsResourceForest 脚本。 此脚本是一组更广泛的命令的一部分,这些命令支持托管域,包括下一部分中的创建单向绑定林。 这些脚本可从 PowerShell 库获取,由 Microsoft Entra 工程团队进行数字签名。

  1. 首先,使用 New-AzResourceGroup cmdlet 创建一个资源组。 以下示例中,资源组名为 myResourceGroup,在 westus 区域中创建。 使用自己的名称和所需区域:

    New-AzResourceGroup `
      -Name "myResourceGroup" `
      -Location "WestUS"
    
  2. 使用 Install-Script cmdlet,从 New-AaddsResourceForest安装 New-AaddsResourceForest 脚本:

    Install-Script -Name New-AaddsResourceForest
    
  3. 查看 New-AaddsResourceForest 脚本所需的以下参数。 确保还具有必备的 Azure PowerShell 和 Microsoft Graph PowerShell 模块。 确保计划了虚拟网络要求,以提供应用程序和本地连接。

    名称 脚本参数 说明
    订阅 -azureSubscriptionId 用于域服务计费的订阅 ID。 可以使用 Get-AzureRMSubscription cmdlet 获取订阅列表。
    资源组 -aaddsResourceGroupName 托管域和关联资源的资源组的名称。
    位置 -aaddsLocation 承载托管域的 Azure 区域。 有关可用区域,请参阅域服务支持的区域
    域服务管理员 -aaddsAdminUser 第一个托管域管理员的用户主体名称。 此帐户必须是 Microsoft Entra ID 中的现有云用户帐户。 该用户(以及运行脚本的用户)会添加到“AAD DC 管理员”组中。
    域服务域名 -aaddsDomainName 托管域的 FQDN,基于前面有关如何选择林名称的指导。

    如果这些资源尚未存在,则 New-AaddsResourceForest 脚本可以创建 Azure 虚拟网络和域服务子网。 如果进行了指定,脚本可以选择创建工作负载子网:

    名称 脚本参数 描述
    虚拟网络名称 -aaddsVnetName 托管域的虚拟网络的名称。
    地址空间 -aaddsVnetCIDRAddressSpace 采用 CIDR 表示法的虚拟网络地址范围(如果创建虚拟网络)。
    域服务子网名称 -aaddsSubnetName 承载托管域的 aaddsVnetName 虚拟网络的子网名称。 不要将自己的 VM 和工作负载部署到此子网中。
    域服务地址范围 -aaddsSubnetCIDRAddressRange 域服务实例的子网地址范围(采用 CIDR 表示法),例如 192.168.1.0/24。 地址范围必须包含在虚拟网络的地址范围中,并且与其他子网不同。
    工作负载子网名称(可选) -workloadSubnetName 在 aaddsVnetName 虚拟网络中要为自己的应用程序工作负载创建的子网的可选名称。 VM 和应用程序,也改为连接到对等互连 Azure 虚拟网络。
    工作负载地址范围(可选) -workloadSubnetCIDRAddressRange 用于应用程序工作负载的可选子网地址范围(采用 CIDR 表示法),如 192.168.2.0/24。 地址范围必须包含在虚拟网络的地址范围中,并且与其他子网不同。
  4. 现在使用 New-AaddsResourceForest 脚本创建托管域林。 以下示例创建名为 addscontoso.com 的林,并创建工作负载子网。 提供自己的参数名称和 IP 地址范围或现有虚拟网络。

    New-AzureAaddsForest `
        -azureSubscriptionId <subscriptionId> `
        -aaddsResourceGroupName "myResourceGroup" `
        -aaddsLocation "WestUS" `
        -aaddsAdminUser "contosoadmin@contoso.com" `
        -aaddsDomainName "aaddscontoso.com" `
        -aaddsVnetName "myVnet" `
        -aaddsVnetCIDRAddressSpace "192.168.0.0/16" `
        -aaddsSubnetName "AzureADDS" `
        -aaddsSubnetCIDRAddressRange "192.168.1.0/24" `
        -workloadSubnetName "myWorkloads" `
        -workloadSubnetCIDRAddressRange "192.168.2.0/24"
    

    创建托管域林和支持资源需要花费大量时间。 允许脚本完成。 在后台进行 Microsoft Entra 林预配的同时,继续进行下一部分,配置本地网络连接。

配置和验证网络设置

随着托管域继续部署,配置和验证与本地数据中心的混合网络连接。 还需要一个管理 VM,用于管理域以便进行定期维护。 你的环境中可能已存在一些混合连接,或者你可能需要与团队中的其他人员合作配置连接。

在开始之前,请确保了解网络注意事项和建议

  1. 使用 Azure VPN 或 Azure ExpressRoute 连接创建与 Azure 的本地网络的混合连接。 混合网络配置超出了本文档的范围,你的环境中可能已存在该配置。 有关特定方案的详细信息,请参阅以下文章:

    重要

    如果直接创建与托管域的虚拟网络的连接,请使用单独的网关子网。 请勿在托管域的子网中创建网关。

  2. 若要管理托管域,请创建管理 VM,将它加入托管域,并安装所需 AD DS 管理工具。

    在部署托管域期间,创建 Windows Server VM,然后安装核心 AD DS 管理工具以安装所需管理工具。 等待将管理 VM 加入托管域,直到在成功部署域之后执行以下步骤之一。

  3. 验证本地网络与 Azure 虚拟网络之间的网络连接。

    • 例如,使用 ping 或远程桌面确认本地域控制器可以连接到托管 VM。
    • 再次使用诸如 ping 之类的实用工具验证管理 VM 是否可以连接到本地域控制器。
  4. 在 Microsoft Entra 管理中心中,搜索并选择“Microsoft Entra 域服务”。 选择托管域(如 aaddscontoso.com),并等待状态报告为“正在运行”。

    运行时,更新 Azure 虚拟网络的 DNS 设置,然后为域服务启用用户帐户,以便为托管域完成配置。

  5. 记下概述页上显示的 DNS 地址。 在后续部分中配置信任关系的本地 Active Directory 端时,需要使用这些地址。

  6. 重启管理 VM 以便它可接收新 DNS 设置,然后将 VM 加入托管域

  7. 管理 VM 加入托管域之后,再次使用远程桌面进行连接。

    在命令提示符下,使用 nslookup 和托管域名称验证林的名称解析。

    nslookup aaddscontoso.com
    

    该命令应返回林的两个 IP 地址。

创建林信任

林信任分为两个部分:托管域中的单向出站林信任,以及本地 AD DS 林中的单向入站林信任。 需手动创建此信任关系的两端。 创建两端后,用户和资源可以使用林信任成功进行身份验证。 托管域支持多达五个到本地林的单向出站林信任。

创建信任关系的托管域端

使用 Add-AaddsResourceForestTrust 脚本可创建信任关系的托管域端。 首先,使用 Install-Script cmdlet,从 Add-AaddsResourceForestTrust安装 Add-AaddsResourceForestTrust 脚本:

Install-Script -Name Add-AaddsResourceForestTrust

现在请为脚本提供以下信息:

名称 脚本参数 说明
域服务域名 -ManagedDomainFqdn 托管域的 FQDN,如 aaddscontoso.com
本地 AD DS 域名 -TrustFqdn 受信任林的 FQDN,如 onprem.contoso.com
信任友好名称 -TrustFriendlyName 信任关系的友好名称。
本地 AD DS DNS IP 地址 -TrustDnsIPs 所列受信任域的 DNS 服务器 IPv4 地址的逗号分隔列表。
信任密码 -TrustPassword 信任关系的复杂密码。 在本地 AD DS 中创建单向入站信任时也会输入此密码。
凭据 -Credentials 用于对 Azure 进行身份验证的凭据。 用户必须处于 AAD DC 管理员组中。 如果未提供,则脚本会提示进行身份验证。

下面的示例创建到 onprem.contoso.com 的信任关系,名为 myAzureADDSTrust 。 使用自己的参数名称和密码:

Add-AaddsResourceForestTrust `
    -ManagedDomainFqdn "aaddscontoso.com" `
    -TrustFqdn "onprem.contoso.com" `
    -TrustFriendlyName "myAzureADDSTrust" `
    -TrustDnsIPs "10.0.1.10,10.0.1.11" `
    -TrustPassword <complexPassword>

重要

请记住信任密码。 创建信任的本地端时,必须使用相同密码。

在本地域中配置 DNS

若要从本地环境正确解析托管域,可能需要向现有 DNS 服务器添加转发器。 如果尚未将本地环境配置为与托管域进行通信,请在管理工作站中针对本地 AD DS 域完成以下步骤:

  1. 选择“开始”|“管理工具”|“DNS”
  2. 右键单击 DNS 服务器(例如 myAD01)并选择“属性”
  3. 选择“转发器”,然后选择“编辑”以添加更多转发器。
  4. 添加托管域的 IP 地址,例如 10.0.1.4 和 10.0.1.5 。
  5. 在本地命令提示符下,使用托管域名的 nslookup 验证名称解析。 例如,Nslookup aaddscontoso.com 应返回托管域的两个 IP 地址。

在本地域中创建入站林信任

本地 AD DS 域需要托管域的传入林信任。 必须手动在本地 AD DS 域中创建此信任,而不能在 Microsoft Entra 管理中心创建。

若要在本地 AD DS 域上配置入站信任,请在管理工作站中针对本地 AD DS 域完成以下步骤:

  1. 选择“开始”|“管理工具”|“Active Directory 域和信任”
  2. 右键单击域(例如 onprem.contoso.com)并选择“属性”
  3. 依次选择“信任”选项卡、“新建信任”
  4. 输入托管域的名称(如 aaddscontoso.com),然后选择“下一步”
  5. 选择创建“林信任”的选项,然后选择创建“单向: 传入”信任的选项。
  6. 选择创建“仅限此域”的信任。 在下一步中,在 Microsoft Entra 管理中心为托管域创建信任。
  7. 选择使用“全林性身份验证”,然后输入并确认信任密码。 在下一部分中,也要在 Microsoft Entra 管理中心输入同一密码。
  8. 在接下来的几个窗口中使用默认选项完成每个步骤,然后选择选项“否,不要确认传出信任”。 无法验证信任关系,因为针对托管域的委托管理员帐户没有所需权限。 此行为是设计使然。
  9. 选择“完成”

验证资源身份验证

可以使用以下常用方案来验证林信任是否正确对用户进行身份验证以及是否正确访问资源:

通过域服务林进行本地用户身份验证

应已将 Windows Server 虚拟机加入托管域资源域。 使用此虚拟机来测试本地用户是否可在虚拟机上进行身份验证。

  1. 使用远程桌面和托管域管理员凭据连接到已加入托管域的 Windows Server VM。 如果收到网络级别身份验证 (NLA) 错误,请检查所使用的用户帐户是否不是域用户帐户。

    提示

    若要安全地连接到已加入 Microsoft Entra 域服务的 VM,可以在支持的 Azure 区域中使用 Azure Bastion Host Service

  2. 打开命令提示符,使用 whoami 命令显示当前已通过身份验证的用户的可分辨名称:

    whoami /fqdn
    
  3. 以本地域中的用户身份使用 runas 命令进行身份验证。 在以下命令中,请将 userUpn@trusteddomain.com 替换为受信任本地域中某个用户的 UPN。 该命令会提示你输入用户密码:

    Runas /u:userUpn@trusteddomain.com cmd.exe
    
  4. 如果身份验证成功,则会打开一个新的命令提示符。 新命令提示符的标题包含 running as userUpn@trusteddomain.com

  5. 在新命令提示符下使用 whoami /fqdn 查看本地 Active Directory 中已通过身份验证的用户的可分辨名称。

以非本地用户身份访问域服务中的资源

使用已加入托管域的 Windows Server VM,可以测试以下场景:用户在可以访问托管在林中的资源的情况下,通过本地域中的计算机与本地域中的其他用户进行身份验证。 以下示例展示了如何创建并测试各种常用方案。

启用文件和打印机共享

  1. 使用远程桌面和托管域管理员凭据连接到已加入托管域的 Windows Server VM。 如果收到网络级别身份验证 (NLA) 错误,请检查所使用的用户帐户是否不是域用户帐户。

    提示

    若要安全地连接到已加入 Microsoft Entra 域服务的 VM,可以在支持的 Azure 区域中使用 Azure Bastion Host Service

  2. 打开“Windows 设置”,然后搜索并选择“网络和共享中心”。

  3. 选择“更改高级共享设置”的选项。

  4. 在“域配置文件”下,依次选择“启用文件和打印机共享”、“保存更改”。

  5. 选择“网络和共享中心”。

创建安全组并添加成员

  1. 打开“Active Directory 用户和计算机”。

  2. 右键单击域名,然后依次选择“新建”、“组织单位”。

  3. 在名称框中键入“LocalObjects”,然后选择“确定”。

  4. 在导航窗格中选择并右键单击“LocalObjects”。 依次选择“新建”、“组”。

  5. 在“组名称”框中键入“FileServerAccess”。 对于“组作用域”,选择“域本地”,然后选择“确定”。

  6. 在内容窗格中,双击“FileServerAccess”。 依次选择“成员”、“添加”、“位置”。

  7. 从“位置”视图中选择你的本地 Active Directory,然后选择“确定”。

  8. 在“输入要选择的对象名称”框中键入“域用户”。 选择“检查名称”,提供本地 Active Directory 的凭据,然后选择“确定”。

    注意

    必须提供凭据,因为信任关系只是单向的。 这意味着,托管域中的用户无法访问资源或搜索受信任的(本地)域中的用户或组。

  9. 本地 Active Directory 中的“域用户”组应是“FileServerAccess”组的成员。 选择“确定”以保存该组并关闭窗口。

创建文件共享用于跨林访问

  1. 在已加入托管域的 Windows Server VM 上,创建一个文件夹并提供名称 (例如 CrossForestShare)。
  2. 右键单击该文件夹并选择“属性”。
  3. 依次选择“安全性”选项卡、“编辑”。
  4. 在“CrossForestShare 的权限”对话框中,选择“添加”。
  5. 在“输入要选择的对象名称”中键入“FileServerAccess”,然后选择“确定”。
  6. 从“组或用户名称”列表中选择“FileServerAccess”。 在“FileServerAccess 的权限”列表中,对“修改”和“写入”权限选择“允许”,然后选择“确定”。
  7. 依次选择“共享”选项卡、“高级共享...”。
  8. 选择“共享此文件夹”,然后在“共享名称”中为该文件共享输入一个易记的名称,例如“CrossForestShare”。
  9. 选择“权限”。 在“每个人的权限”列表中,对“更改”权限选择“允许”。
  10. 选择“确定”两次,然后选择“关闭”。

验证向资源进行的跨林身份验证

  1. 使用本地 Active Directory 中的用户帐户登录到已加入本地 Active Directory 的 Windows 计算机。

  2. 使用完全限定的主机名和共享名称(例如 )通过“Windows 资源管理器”连接到你创建的共享。

  3. 若要验证写入权限,请在文件夹中单击右键,然后依次选择“新建”、“文本文档”。 使用默认名称“新建文本文档”。

    如果正确设置了写入权限,则会创建一个新的文本文档。 然后,可以使用以下步骤相应地打开、编辑和删除文件。

  4. 若要验证读取权限,请打开“新建文本文档”。

  5. 若要验证修改权限,请在文件中添加文本,然后关闭“记事本”。 当系统提示是否保存更改时,请选择“保存”。

  6. 若要验证删除权限,请右键单击“新建文本文档”并选择“删除”。 选择“是”以确认删除文件。

更新或删除出站林信任

如果需要从托管域更新现有单向出站林,可以使用 Get-AaddsResourceForestTrustsSet-AaddsResourceForestTrust 脚本。 这些脚本在需要更新林信任友好名称或信任密码的方案中会有所帮助。 若要从托管域中删除单向出站信任,可以使用 Remove-AaddsResourceForestTrust 脚本。 必须手动删除关联本地 AD DS 林中的单向入站林信任。

更新林信任

在正常操作中,托管域和本地林在各自之间协商定期密码更新过程。 这是正常 AD DS 信任关系安全过程的一部分。 除非信任关系遇到问题并且你要手动重置为已知密码,否则无需手动轮换信任密码。 有关详细信息,请参阅受信任的域对象密码更改

以下示例步骤演示在需要手动重置出站信任密码时,如何更新现有信任关系:

  1. 使用 Set-AaddsResourceForestTrust cmdlet,从 Get-AaddsResourceForestTrusts安装 Get-AaddsResourceForestTrustsSet-AaddsResourceForestTrust 脚本:

    Install-Script -Name Get-AaddsResourceForestTrusts,Set-AaddsResourceForestTrust
    
  2. 在可以更新现有信任之前,请先使用 Get-AaddsResourceForestTrusts 脚本获取信任资源。 在下面的示例中,将现有信任分配给名为 existingTrust 的对象。 指定自己的托管域林名称和本地林名称以进行更新:

    $existingTrust = Get-AaddsResourceForestTrust `
        -ManagedDomainFqdn "aaddscontoso.com" `
        -TrustFqdn "onprem.contoso.com" `
        -TrustFriendlyName "myAzureADDSTrust"
    
  3. 若要更新现有信任密码,请使用 Set-AaddsResourceForestTrust 脚本。 指定来自上一步的现有信任对象,然后指定新的信任关系密码。 PowerShell 未强制执行任何密码复杂性,因此请确保为环境生成并使用安全密码。

    Set-AaddsResourceForestTrust `
        -Trust $existingTrust `
        -TrustPassword <newComplexPassword>
    

删除林信任

如果不再需要从托管域到本地 AD DS 林的单向出站林信任,则可以删除它。 请确保在删除信任之前,没有应用程序或服务需要对本地 AD DS 林进行身份验证。 还必须手动删除本地 AD DS 林中的单向入站信任。

  1. 使用 Install-Script cmdlet,从 Remove-AaddsResourceForestTrust安装 Remove-AaddsResourceForestTrust 脚本:

    Install-Script -Name Remove-AaddsResourceForestTrust
    
  2. 现在使用 Remove-AaddsResourceForestTrust 脚本删除林信任。 在下面的示例中,删除名为 aaddscontoso.com 的托管域林与本地林 onprem.contoso.com 之间名为 myAzureADDSTrust 的信任。 指定自己的托管域林名称和本地林名称以进行删除:

    Remove-AaddsResourceForestTrust `
        -ManagedDomainFqdn "aaddscontoso.com" `
        -TrustFqdn "onprem.contoso.com" `
        -TrustFriendlyName "myAzureADDSTrust"
    

若要从本地 AD DS 林中删除单向入站信任,请连接到有权访问本地 AD DS 林的管理计算机并完成以下步骤:

  1. 选择“开始”|“管理工具”|“Active Directory 域和信任”。
  2. 右键单击域 (例如 onprem.contoso.com) 并选择“属性”。
  3. 选择“信任”选项卡,然后从托管域林中选择现有传入信任。
  4. 选择“删除”,然后确认要删除传入信任。

后续步骤

本文介绍了如何执行以下操作:

  • 使用 Azure PowerShell 创建托管域
  • 使用 Azure PowerShell 在托管域中创建单向出站林信任
  • 在本地 AD DS 环境中配置 DNS 以支持托管域连接
  • 在本地 AD DS 环境中创建单向入站林信任
  • 测试并验证用于身份验证和资源访问的信任关系

有关域服务中的林类型的更多概念信息,请参阅林信任在域服务中的工作原理是什么?

Connect-MgGraph: /powershell/microsoftgraph/authentication-commands

New-MgServicePrincipal: /powershell/module/microsoft.graph.applications/new-mgserviceprincipal