教程 - 使用 Microsoft Entra Cloud Sync 将组预配到 Active Directory 域服务

本教程逐步讲解如何将云同步配置为将组同步到本地 Active Directory 域服务(AD DS)。

重要

建议在将组预配配置为 AD DS 时使用 所选安全组 作为默认范围筛选器。 此默认范围筛选器有助于防止预配组时出现任何性能问题。

将 Microsoft Entra ID 预配到 Active Directory 域服务 - 先决条件

若要将预配组实现到 Active Directory 域服务(AD DS),需要满足以下先决条件。

许可要求

使用此功能需要 Microsoft Entra ID P1 许可证。 若要查找适合你的要求的许可证,请参阅 比较Microsoft Entra ID 的正式版功能

一般要求

  • 至少具有混合标识管理员角色的 Microsoft Entra 帐户。
  • 具有 msDS-ExternalDirectoryObjectId 属性的本地 AD DS 架构,该属性在 Windows Server 2016 及更高版本中可用。
  • 使用内部版本 1.1.3730.0 或更高版本预配代理。

备注

仅在全新安装期间分配对服务帐户的权限。 如果要从以前的版本升级,则需要使用 PowerShell 手动分配权限:

$credential = Get-Credential  

Set-AAD DSCloudSyncPermissions -PermissionType UserGroupCreateDelete -TargetDomain "FQDN of domain" -EACredential $credential

如果手动设置权限,则需要为所有后代组和用户对象分配“读取”、“写入”、“创建”和“删除”所有属性。

默认情况下,这些权限不会应用于 AdminSDHolder 对象。 有关详细信息,请参阅 Microsoft Entra 预配代理 gMSA PowerShell cmdlet

  • 预配代理必须安装在运行 Windows Server 2022、Windows Server 2019 或 Windows Server 2016 的服务器上。
  • 预配代理必须能够与端口 TCP/389 (LDAP) 和 TCP/3268(全局目录)上的一个或多个域控制器通信。
    • 用于全局目录查找以筛选无效的成员资格引用所必需的
  • Microsoft Entra Connect Sync 使用内部版本 2.22.8.0
    • 支持使用 Microsoft Entra Connect Sync 的本地用户成员身份所需
    • 必须同步 AD DS:user:objectGUIDAAD DS:user:onPremisesObjectIdentifier

组预配到 Active Directory 的规模限制

组预配到 Active Directory 功能的性能受到租户大小,以及需要预配到 Active Directory 范畴内的组数和成员数量的影响。 本部分提供指导,说明如何确定 GPAD 是否支持您的规模需求,以及如何选择正确的群组范围模式,以实现更快的初始和增量同步周期。

不支持什么?

  • 不支持超过五万成员的组。
  • 不支持在不使用应用属性范围筛选的情况下使用“所有安全组”范围。

规模限制

范围模式 作用域内的组数量 成员关系链接数量(仅限直接成员) 注释
“所选安全组”模式 最多 10K 个组。 Microsoft Entra 门户中的 CloudSync 窗格仅允许选择最多 999 个组,以及最多显示 999 个组。 如果需要将 1000 多个组添加到范围,请参阅: 通过 API 扩展组选择 涵盖范围内所有组的总成员数最多为 25 万。 如果租户超出这些限制中的任何一个,请使用此范围模式
1.租户用户超过 20 万
租户有超过 4 万个组
3. 租户拥有超过 100 万个组中成员。
具有至少一个属性范围筛选器的“所有安全组”模式。 最多 20K 个组。 范围内的所有组中,成员总数最多达 50 万。 如果您的租户符合以下所有限制,请使用此范围模式:
1.租户用户少于 20 万
2. 租户的组少于 4万 个
3. 租户的成员身份少于 100 万个。

如果超出限制,该怎么办

超过建议的限制会降低初始同步和增量同步的速度,这可能会导致同步错误。 如果发生这种情况,请执行以下步骤:

“所选的安全组”范围模式下的组或组成员数量过多:

减少作用域内组数(以更高价值的组为目标),或将资源配置拆分为多个独立的作业,且范围互不相交

“所有安全组”范围模式下的组或组成员过多:

建议使用 所选安全组 范围模式。

某些组超过 50K 个成员:

跨多个组拆分成员身份,或者采用分阶段组(例如,按区域或业务部门)保持每个组在上限之内。

通过 API 扩展的组选择

如果需要选择超过 999 个组,必须使用 Grant an appRoleAssignment API 对服务主体进行调用。

API 调用的示例如下所示:

POST https://graph.microsoft.com/v1.0/servicePrincipals/{servicePrincipalID}/appRoleAssignedTo
Content-Type: application/json

{
  "principalId": "",
  "resourceId": "",
  "appRoleId": ""
}

地点:

  • principalId:组对象 ID。
  • resourceId:作业的服务主体 ID。
  • appRoleId:资源服务主体公开的应用角色的标识符。

下表是适用于云的应用角色 ID 列表:

appRoleId
公众 1a0abf4d-b9fa-4512-a3a2-51ee82c6fd9f
AzureUSGovernment d8fa317e-0713-4930-91d8-1dbeb150978f
AzureUSNatCloud 50a55e47-aae2-425c-8dcb-ed711147a39f
AzureUSSecCloud 52e862b9-0b95-43fe-9340-54f51248314f

详细信息

以下是在将组配置到 AD DS 时需要考虑的更多注意事项。

  • 使用云同步预配到 AD DS 的组只能包含本地同步的用户或其他云创建的安全组。
  • 这些用户必须在其帐户上设置 onPremisesObjectIdentifier 属性。
  • onPremisesObjectIdentifier 必须与目标 AD DS 环境中的相应对象GUID 匹配。
  • 可以使用任一同步客户端将本地用户 objectGUID 属性同步到云用户 onPremisesObjectIdentifier 属性。
  • 只有全局性的 Microsoft Entra ID 租户才能从 Microsoft Entra ID 预配到 AD DS。 不支持 B2C 等租户。
  • 组预配作业计划为每 20 分钟运行一次。

组和用户 SOA 方案

用例 父组类型 用户成员组类型 同步方向 同步的工作原理
SOA 位于中的安全组,所有用户成员都具有本地 SOA SOA 位于云中的安全组 SOA 本地部署的用户 Entra to AD (AAD2ADGroup provisioning) 该作业使用其所有成员引用(成员用户)预配父组。
SOA 位于中的安全组,并且所有用户成员的 SOA 都位于中。 SOA 位于云中的安全组 SOA 位于云中的用户 Entra to AD (AAD2ADGroup provisioning) 该作业预配安全组,但不预配任何成员引用。
一个安全组,其 SOA 位于中,某些用户成员在云中具有 SOA,而另一些安全组则具有本地 SOA SOA 位于云中的安全组 某些用户在云中有 SOA,而有些用户具有本地 SOA Entra to AD (AAD2ADGroup provisioning) 该作业预配安全组,并仅包含其 SOA 在本地的成员引用。 它跳过 SOA 位于云中的成员引用。
SOA 在中且没有用户成员的安全组 SOA 位于云中的安全组 无用户成员 Entra to AD (AAD2ADGroup provisioning) 该作业预配安全组(空成员身份)。
SOA 位于本地所有用户成员都具有本地 SOA 安全组 SOA 位于本地的安全组 SOA 本地部署的用户 Entra to AD (AAD2ADGroup provisioning) 作业 预配安全组。
SOA 位于本地所有用户成员中具有 SOA 的安全组 SOA 位于本地的安全组 SOA 位于云中的用户 Entra to AD (AAD2ADGroup provisioning) 作业 预配安全组。
一个安全组,其 SOA 位于本地,某些用户成员中具有 SOA,而另一些用户成员则具有本地 SOA SOA 位于本地的安全组 某些用户在云中有 SOA,而有些用户具有本地 SOA Entra to AD (AAD2ADGroup provisioning) 作业 预配安全组。
SOA 位于本地所有用户成员都具有本地 SOA 安全组 SOA 位于本地的安全组 SOA 本地部署的用户 AD 到 Entra (AD2AADprovisioning) 该作业使用其所有成员引用(成员用户)预配安全组。
SOA 位于本地所有用户成员中具有 SOA 的安全组 SOA 位于本地的安全组 SOA 位于云中的用户 AD 到 Entra (AD2AADprovisioning) 该作业使用其所有成员引用(成员用户)预配安全组。 因此,那些 SOA 转移到云端的本地组的成员参考也将同步。
一个安全组,其 SOA 位于本地某些用户成员中具有 SOA,而另一些用户成员则具有本地 SOA SOA 位于本地的安全组 某些用户在云中有 SOA,而有些用户具有本地 SOA AD 到 Entra (AD2AADprovisioning) 该作业使用其所有成员引用(成员用户)预配父组。 因此,那些 SOA 转移到云端的本地组的成员参考也将同步。
具有SOA位于本地没有用户成员的安全组 SOA 位于本地的安全组 无用户成员 AD 到 Entra (AD2AADprovisioning) 该作业预配安全组(空成员身份)。
SOA 位于中的安全组,所有用户成员都具有本地 SOA 云计算的SOA安全组 SOA 本地部署的用户 AD 到 Entra (AD2AADprovisioning) 作业 预配安全组。
SOA 位于中的安全组,以及所有用户成员中都有 SOA 云计算的SOA安全组 SOA 位于云中的用户 AD 到 Entra (AD2AADprovisioning) 作业 预配安全组。
一个安全组,其 SOA 位于中,某些用户成员中具有 SOA,而另一些安全组则具有本地 SOA 云计算的SOA安全组 某些用户在云中有 SOA,而有些用户具有本地 SOA AD 到 Entra (AD2AADprovisioning) 作业 预配安全组。

假设

本教程假定:

  • 您拥有一个 AD DS 本地部署环境

  • 你有云同步设置,可将用户同步到 Microsoft Entra ID。

  • 你有两个同步的用户:Britta Simon 和 Lola Jacobson。 这些用户存在于本地和 Microsoft Entra ID 中。

  • 在 AD DS 中为以下每个部门创建了一个组织单位(OU):

    显示名称 可分辨名称
    群组 OU=Marketing,DC=contoso,DC=com
    Sales OU=Sales,DC=contoso,DC=com
    Marketing OU=Groups,DC=contoso,DC=com

将用户添加到云原生或颁发机构源(SOA)转换后的安全组

若要添加同步的用户,请执行以下步骤:

备注

仅将同步的用户成员引用预配到 AD DS。

  1. 以至少混合标识管理员身份登录到 Microsoft Entra 管理中心
  2. 浏览到 Entra ID>群组>所有群组
  3. 在顶部的搜索框中输入“Sales”
  4. 选择新的 “销售 ”组。
  5. 在左侧,选择“ 成员”。
  6. 在顶部,选择“ 添加成员”。
  7. 在顶部的搜索框中,输入“Britta Simon”
  8. Britta Simon 旁边放置一个检查,然后选择“ 选择”。
  9. 它应成功将用户添加到组。
  10. 在最左侧,选择 “所有组”。 使用 Sales 组重复此过程,并将 Lola Jacobson 添加到该组。

准备已转换的 SOA 组以将其预配到原始的组织单位(OU)路径

完成以下步骤,准备计划转换为云管理的组,以便从 Microsoft Entra ID 预配回本地 Active Directory 域服务(AD DS)中的原始 OU 路径:

  1. 将 AD DS 组范围更改为通用。
  2. 创建特殊应用程序。
  3. 为组创建目录扩展属性。

将 AD DS 组的组范围更改为通用

  1. 打开“Active Directory 管理中心”。
  2. 右键单击组,单击“ 属性”。
  3. “组 ”部分中,选择“ 通用 ”作为组范围。
  4. 单击“ 保存”。

创建扩展

Cloud Sync 仅支持在名为 CloudSyncCustomExtensionsApp 的特殊应用程序上创建的扩展。 如果租户中不存在应用,则必须创建它。 此步骤为每个租户执行一次。

有关如何创建扩展的详细信息,请参阅 云同步目录扩展和自定义属性映射

  1. 打开提升的 PowerShell 窗口并运行以下命令以安装模块并连接:

    Install-Module Microsoft.Graph -Scope CurrentUser -Force 
    Connect-MgGraph -Scopes "Application.ReadWrite.All","Directory.ReadWrite.All","Directory.AccessAsUser.All" 
    
  2. 检查应用程序是否存在。 如果没有,请创建它。 此外,请确保存在服务主体。

    $tenantId = (Get-MgOrganization).Id 
    $app = Get-MgApplication -Filter "identifierUris/any(uri:uri eq 'API://$tenantId/CloudSyncCustomExtensionsApp')" 
    if (-not $app) { 
      $app = New-MgApplication -DisplayName "CloudSyncCustomExtensionsApp" -IdentifierUris "API://$tenantId/CloudSyncCustomExtensionsApp" 
    } 
    
    $sp = Get-MgServicePrincipal -Filter "AppId eq '$($app.AppId)'" 
    if (-not $sp) { 
      $sp = New-MgServicePrincipal -AppId $app.AppId 
    } 
    
  3. 现在添加名为 GroupDN 的目录扩展属性。 这是组对象上可用的字符串属性。

    New-MgApplicationExtensionProperty ` 
      -ApplicationId $app.Id ` 
      -Name "GroupDN" ` 
      -DataType "String" ` 
      -TargetObjects Group 
    

有关如何为组创建目录扩展属性的详细信息,请参阅 云同步目录扩展和自定义属性映射

配置预配

若要配置预配,请执行以下步骤:

  1. 以至少混合标识管理员身份登录到 Microsoft Entra 管理中心

  2. 浏览到 Entra ID>Entra Connect>云同步

    显示Microsoft Entra Connect Cloud Sync 主页的屏幕截图。

  1. 选择“新配置”。

  2. 选择“Microsoft Entra ID 与 AD 同步”。

    配置选择的屏幕截图。

  3. 在配置屏幕上,选择域以及是否启用密码哈希同步。选择“ 创建”。

    新配置的屏幕截图。

  4. 此时将打开“开始使用”屏幕。 在此处,可以继续配置云同步。

  5. 在左侧,选择 范围筛选器

  6. 对于组范围,请选择所选安全组

    范围筛选器部分的屏幕截图。

  7. 有两种方法可以设定 OU:

    • 可以使用自定义表达式,确保使用相同的 OU 重新创建组。 将以下表达式用于 ParentDistinguishedName 值:

      IIF(
          IsPresent([extension_<AppIdWithoutHyphens>_GroupDistinguishedName]),
          Replace(
              Mid(
                  Mid(
                      Replace([extension_<AppIdWithoutHyphens> _GroupDistinguishedName], "\,", , , "\2C", , ),
                      Instr(Replace([extension_<AppIdWithoutHyphens> _GroupDistinguishedName], "\,", , , "\2C", , ), ",", , ),
                      9999
                  ),
                  2,
                  9999
              ),
              "\2C", , , ",", ,
          ),
      "<Existing ParentDistinguishedName>",
      )
      

      此表达式:

      • 如果扩展为空,则使用默认 OU。
      • 否则将删除 CN 部分,并保留 parentDN 路径,同时再次处理转义的逗号。

      此更改会导致完全同步,不会影响现有组。 使用 Microsoft Graph 测试为现有组设置 GroupDN 属性,并验证其移回原始 OU。

    • 如果不想保留本地的原始 OU 路径和 CN 信息,请在 “目标容器 ”下选择 “编辑属性映射”。

      1. 映射类型 更改为 表达式

      2. 在表达式框中,输入:

        Switch([displayName],"OU=Groups,DC=contoso,DC=com","Marketing","OU=Marketing,DC=contoso,DC=com","Sales","OU=Sales,DC=contoso,DC=com")

      3. 默认值 更改为 OU=Groups,DC=contoso,DC=com.

        如何更改 OU 的默认值的屏幕截图。

      4. 选择应用。 目标容器根据组 displayName 属性更改。

  8. 可以使用自定义表达式确保组以相同的 CN 重新创建。 将以下表达式用于 CN 值:

    IIF(
        IsPresent([extension_<AppIdWithoutHyphens>_GroupDistinguishedName]),
        Replace(
            Replace(
                Replace(
                    Word(Replace([extension_<AppIdWithoutHyphens> _GroupDistinguishedName], "\,", , , "\2C", , ), 1, ","),
                    "CN=", , , "", ,
                ),
                "cn=", , , "", ,
            ),
            "\2C", , , ",", ,
        ),
    Append(Append(Left(Trim([displayName]), 51), "_"), Mid([objectId], 25, 12)),
    )
    

    此表达式:

    • 如果扩展名为空,则从 DisplayName 和 ObjectId 生成备用 CN。
    • 否则,将转义的逗号临时替换为十六进制值以提取 CN。
  9. 选择“保存”

  10. 在左侧,选择“ 概述”。

  11. 在顶部,选择“ 查看并启用”。

  12. 在右侧,选择“ 启用配置”。

测试配置

备注

运行按需预配时,不会自动预配成员。 需要选择要测试的成员,限制为五个成员。

  1. 以至少混合标识管理员身份登录到 Microsoft Entra 管理中心

  2. 浏览到 Entra ID>Entra Connect>云同步

    显示Microsoft Entra Connect Cloud Sync 主页的屏幕截图。

  1. 在“配置”下选择你的配置。

  2. 在左侧,选择“按需预配”。

  3. “所选组”框中输入 Sales

  4. “所选用户 ”部分,选择要测试的一些用户。

    添加成员的屏幕截图。

  5. 选择“预配”

  6. 你应会看到组已预配。

按需成功预配的屏幕截图。

在 AD DS 中验证

按照以下步骤确保将组配置到 AD DS:

  1. 登录到本地环境。

  2. 启动“Active Directory 用户和计算机”

  3. 验证是否已预配新组。

    新预配组的屏幕截图。

针对 SOA 转换的对象将组预配到 AD DS 行为

将颁发机构源(SOA)转换为本地组的云时,该组有资格将组预配到 AD DS。

例如,在下图中,SOA 或 SOATestGroup1 转换为云。 因此,它可用于组预配到 AD DS 的作业范围。

作用域中作业的屏幕截图。

  • 作业运行时,已成功预配 SOATestGroup1

  • 预配日志中,可以搜索 SOATestGroup1 并验证是否已预配组。

    预配日志的屏幕截图。

  • 详细信息显示 SOATestGroup1 已与现有目标组匹配。

    匹配属性的屏幕截图。

  • 还可以确认目标组的 adminDescriptioncn 已更新。

    更新的属性的屏幕截图。

  • 查看 AD DS 时,可以看到原始组已更新。

    更新后的组的屏幕截图。

    组属性的屏幕截图。

云跳过预配转换后的 SOA 对象到 Microsoft Entra ID

如果在将 SOA 转换为云后尝试在 AD DS 中编辑组的属性,则 Cloud Sync 在预配过程中会跳过该对象。

假设我们有一个组 SOAGroup3,并且将其组名称更新为 SOA Group3.1

对象名称更新的屏幕截图。

预配日志中,可以看到已 跳过 SOAGroup3

跳过的对象屏幕截图。

详细信息说明对象未同步,因为它的 SOA 已转换为云。

阻止的同步的屏幕截图。

嵌套组和成员资格引用处理

下表介绍了在不同用例中转换 SOA 后预配如何处理成员身份引用。

用例 父组类型 成员组类型 工作 同步的工作原理
一个 Microsoft Entra 父安全组仅包含 Microsoft Entra 成员。 Microsoft Entra 安全组 Microsoft Entra 安全组 AAD2ADGroupProvisioning (AD DS 的组预配) 该作业使用其所有成员引用(成员组)预配父组。
Microsoft Entra 父安全组具有一些已同步组的成员。 Microsoft Entra 安全组 AD DS 安全组(已同步组) AAD2ADGroupProvisioning (AD DS 的组预配) 该作业预配父组,但未预配 AD DS 组的所有成员引用(成员组)。
Microsoft Entra 的父安全组包含一些成员,这些成员是其 SOA 已转换为云的同步组。 Microsoft Entra 安全组 其 SOA 转换为云的 AD DS 安全组。 AAD2ADGroupProvisioning (AD DS 的组预配) 该作业使用其所有成员引用(成员组)预配父组。
将具有云拥有的组作为成员的同步组(父组)的 SOA 进行转换。 将 SOA 转换为云的 AD DS 安全组 Microsoft Entra 安全组 AAD2ADGroupProvisioning (AD DS 的组预配) 该作业使用其所有成员引用(成员组)预配父组。
将具有其他已同步组作为成员的同步组(父组)的 SOA 进行转换。 将 SOA 转换为云的 AD DS 安全组 AD DS 安全组(已同步组) AAD2ADGroupProvisioning (AD DS 的组预配) 该作业预配父组,但未预配 AD DS 安全组的所有成员引用(成员组)。
转换已同步组(父级)的 SOA,其成员是已将 SOA 转换为云的其他同步组。 将 SOA 转换为云的 AD DS 安全组 将 SOA 转换为云的 AD DS 安全组 AAD2ADGroupProvisioning (AD DS 的组预配) 该作业使用其所有成员引用(成员组)预配父组。

回滚 SOA 转换后的组后,将组预配到 AD DS 行为

如果作用域中有 SOA 转换组,并且回滚 SOA 转换后的组以使其归 AD DS 所有,则到 AD DS 的组预配会停止同步更改,但不会删除本地组。 它还从配置范围中删除组。 下一个同步周期中,组的本地控制将恢复。

  • 可以在审核日志中验证此对象不会发生同步,因为它在本地托管。

    审核日志详细信息的屏幕截图。

    还可以签入 AD DS,该组仍然完好无损且未删除。

    用户和计算机的屏幕截图。

后续步骤