本文指导你配置 Microsoft Entra Cloud Sync,以便将用户和组从Microsoft Entra ID预配到本地Active Directory 域服务(AD DS)。 创建配置、选择预配的对象、设置范围筛选器和属性值筛选、选择目标容器和自定义属性映射。
由于范围选择确定属性值筛选是否可用,因此此处将一起介绍范围和属性映射。 配置完成后, 测试并启用它,对于所有部署选项都是相同的。 最后一部分介绍预配运行后执行的任务,例如验证结果和移动预配的用户。
如果要从 AD 预配到Microsoft Entra ID,请参阅配置从Active Directory到Microsoft Entra ID的预配。
Prerequisites
在继续之前,请完成从Microsoft Entra ID预配到Active Directory的先决条件中的步骤。
选择部署选项
所有部署选项都使用相同的配置类型:Microsoft Entra ID 到 AD 同步。不同之处在于要纳入范围的对象类型:
| 选项 | 规定 | Availability |
|---|---|---|
| 仅限群组 | 安全组与成员身份 | 正式发布 |
| 仅限用户 | 用户 | Preview |
| 用户和群组 | 两者都在一个配置中 | Preview |
有关如何选择方案以及扩展性方面的考量,请参阅 部署选项。
创建配置
若要创建 Microsoft Entra ID 到 AD 的预配配置,请执行以下步骤:
请以至少混合身份管理员的身份登录Microsoft Entra 管理中心。
浏览到 Entra ID>Entra Connect>云同步。
选择“新配置”。
选择“Microsoft Entra ID 与 AD 同步”。
在配置屏幕上,选择你的域。 选择“创建”。
此时将打开“开始使用”屏幕。 在此处,可以继续配置云同步。
配置分为以下五个部分:
| 章节 | 说明 |
|---|---|
| 1.添加范围筛选器 | 定义哪些对象在预配范围内。 |
| 2. 地图属性 | 映射 Microsoft Entra ID 用户/组与 AD 对象之间的属性。 |
| 3. 测试 | 在部署配置之前对其进行测试。 |
| 4.查看默认属性 | 查看默认设置,并在适当情况下对其进行更改。 |
| 5. 启用您的配置 | 启用配置和对象开始同步。 |
本文介绍了第 1 节和第 2 节。 有关第 3–5 节,请参阅测试并启用向 Active Directory 预配。
配置作用域筛选器
作用域筛选器决定要预配哪些对象。 范围筛选器页面显示当前配置的只读视图。 选择 “编辑” 以打开向导。
分配范围
在 “编辑 ”模式下,使用 “按分配范围 ”选择是同步所有对象还是所选对象。 属性值筛选可用于任一选择,但仅适合其中一种:
所有用户和组 — 下一步是 按属性划分的范围。 为每个启用的对象类型(用户、组或两者)添加 属性值筛选器 ,以便预配仅评估所需的对象。
所选用户和组 - 下一步是 选择用户和组,可在其中选取特定对象。 属性值筛选在此模式下可用,但不建议这样做,因为所选内容已确定范围。 有关详细信息,请参阅 建议的配置。
注释
如果选择成员中包含嵌套安全组的安全组,则仅写回该嵌套安全组,而非其成员。 若要预配嵌套成员,请同时将所有成员组添加到范围。
属性值筛选
基于属性的范围筛选通过评估对象的属性值来缩小预配对象的范围。 您可以在 按属性确定范围 步骤中的 用户 选项卡、组 选项卡,或同时在这两个选项卡中进行配置。
将其与 所有用户和组 一起使用时,筛选器是唯一用于缩小范围的因素:如果没有筛选器,租户中的每个用户和组都会在每个周期被评估。
不要将其与 所选用户和组一起使用,因为所选内容已缩小范围,因此筛选器会添加处理时间,而无需更改预配的对象。
预配配置在这两种情况下都显示警告,但不会阻止你。 有关详细信息,请参阅 建议的配置。
默认安全条款
默认安全子句会通过使用 AND 逻辑应用于组,并叠加在您创建的子句之上:
securityEnabled IS TRUE AND dirSyncEnabled IS FALSE AND mailEnabled IS FALSE
默认的安全子句会在您配置的子句之前进行评估。
筛选逻辑
单个子句定义一个属性值的一个条件。 在单个作用域筛选器中,各子句使用 AND 进行求值——所有子句都必须为 TRUE。
系统会对多个范围筛选器进行求值 OR — 如果任何筛选器为 TRUE,则会预配该对象。
创建基于属性的筛选器
若要创建评估属性值的筛选器,
- 选择 “添加属性范围筛选器”。
- 在 “名称”中,输入筛选器的名称。
- 在 “属性”下,选择要评估的属性。
- 在“运算符”下,选择一个运算符(例如,
EQUALS、NOT EQUALS、INCLUDESREGEX MATCH)。 - 在 “值”下输入值。
- 选择“保存”。
支持的运算符
支持以下运算符:
| Operator | 说明 |
|---|---|
EQUALS |
如果计算的属性与输入字符串完全匹配,则 TRUE 返回。 比较是区分大小写的。 |
GREATER_THAN |
如果计算的属性大于指定的值,则返回 TRUE 。 指定的值和计算的属性必须是整数,例如 0、1 或 2。 |
GREATER_THAN_OR_EQUALS |
如果计算的属性大于或等于指定的值,则返回 TRUE 。 指定的值和计算的属性必须是整数。 |
IS FALSE |
如果求值后的属性包含值为 false 的布尔值,则返回 TRUE。 |
IS NOT NULL |
如果计算的属性不为空,则返回 TRUE 。 |
IS NULL |
如果计算的属性为空,则返回 TRUE 。 |
IS TRUE |
如果求值后的属性包含值为 true 的布尔值,则返回 TRUE。 |
NOT EQUALS |
如果计算的属性与输入字符串不匹配,则返回 TRUE 。 比较是区分大小写的。 |
NOT REGEX MATCH |
如果计算的属性与正则表达式模式不匹配,则返回 TRUE 。 如果该属性为 null 或为空,则返回 FALSE。 |
REGEX MATCH |
如果计算的属性与正则表达式模式匹配,则 TRUE 返回。 例如, ([1-9][0-9]) 匹配从 10 到 99 的任何数字。 比较是区分大小写的。 |
使用正则表达式筛选
若要进行更高级的筛选,请使用 REGEX MATCH 搜索子字符串的属性字符串。 例如,假设有描述如下的组:
Contoso-Sales-USContoso-Marketing-USContoso-Operations-USContoso-LT-US
若要仅将 Sales、Marketing 和 Operations 组预配到Active Directory,请使用以下正则表达式:
REGEX MATCH description (?:^|\W)Sales|Marketing|Operations(?:$|\W)
该表达式会在组描述中搜索所提供的字词,并且仅预配匹配的组。
有关编写表达式的详细信息,请参阅有关在 Microsoft Entra ID 中编写属性映射的表达式的参考。
本地用户的组成员身份
启用组同步后,可以选择在 “配置组成员身份 ”步骤中将成员身份从云组预配到本地用户。 默认情况下,此设置处于关闭状态。
使用目录扩展的范围
若要进行更高级的范围和筛选,可以使用目录扩展。 有关概述,请参阅用于将Microsoft Entra ID预配到Active Directory的目录扩展。 有关分步教程,请参阅预配到Active Directory时使用目录扩展。
配置目标容器
使用目标容器控制在Active Directory中创建用户和组对象的组织单位(OU)。 可以在 parentDistinguishedName 属性上使用 常量、直接或 表达式 映射。
用户 — 默认用户目标容器自动保留其授权源(SOA)转换为云的用户的原始 OU(默认
parentDistinguishedName表达式使用onPremisesDistinguishedName)。 将在CN=Users,DC=<selected AD domain>中创建一个云原生用户,您可以覆盖该设置。组 - 默认组目标容器为
CN=Users,DC=<selected AD domain>。 若要按属性将组放置到不同的 OU 中,请使用包含Switch()函数的表达式。 以下示例按显示名称对组进行路由:Switch([displayName],"OU=Default,OU=container,DC=contoso,DC=com","Marketing","OU=Marketing,OU=container,DC=contoso,DC=com","Sales","OU=Sales,OU=container,DC=contoso,DC=com")显示名称是一个弱路由密钥,因为它可以更改,并且不能保证遵循一致的模式。 若要按稳定值路由组,或者若要将组保留在它已占用的组织单位中,请改用目录扩展。 有关详细信息,请参阅 “保留 OU 路径”。
保留 OU 路径
原始 OU 的保留方式取决于对象类型:
-
用户——已内置保留功能。 默认的
parentDistinguishedName映射会在经 SOA 转换的用户原始 OU 中重新创建该用户,因此无需进行额外配置。 -
组——不会自动检测到原始 OU。 在转换该组的 SOA 之前,使用
GroupDN目录扩展捕获该组的可分辨名称 (DN),然后在 OU 和通用名称 (CN) 映射表达式中引用此扩展。
若要设置扩展,请参阅 “保留组的组织单位和名称”。 在将组转换为云托管之前完成该设置,然后使用下面的表达式。
保留组的原始组织单位
若要将经 SOA 转换的组映射到其原始 OU,请调整示例表达式:将 <Default ParentDistinguishedName> 替换为租户中的扩展属性名称,并将 extension_<AppIdWithoutHyphens>_GroupDN 替换为当扩展值为空时要使用的目标 OU:
IIF(
IsPresent([extension_<AppIdWithoutHyphens>_GroupDN]),
Replace(
Mid(
Mid(
Replace([extension_<AppIdWithoutHyphens>_GroupDN], "\,", , , "\2C", , ),
Instr(Replace([extension_<AppIdWithoutHyphens>_GroupDN], "\,", , , "\2C", , ), ",", , ),
9999
),
2,
9999
),
"\2C", , , ",", ,
),
"<Default ParentDistinguishedName>"
)
将默认值(如果为 null)设置为目标 OU,以便在GroupDN扩展为空时使用。
将表达式应用于目标容器映射:
- 在 “组目标容器”下,选择 “编辑属性映射”。
- 将 映射类型 更改为 表达式。
- 将表达式粘贴到表达式框中。
- 选择“应用”,然后选择“保存”。
保留组的原始公用名
使用相同的 GroupDN 扩展来保留公用名(CN)。 该表达式从已存储的可分辨名称中提取 CN,并将组显示名称和对象 ID 用作后备值:
IIF(
IsPresent([extension_<AppIdWithoutHyphens>_GroupDN]),
Replace(
Replace(
Replace(
Word(Replace([extension_<AppIdWithoutHyphens>_GroupDN], "\,", , , "\2C", , ), 1, ","),
"CN=", , , "", ,
),
"cn=", , , "", ,
),
"\2C", , , ",", ,
),
Append(Append(Left(Trim([displayName]), 51), "_"), Mid([objectId], 25, 12))
)
将表达式应用于 cn 属性映射,然后选择“ 保存架构”。
完成配置范围筛选器和目标容器后,选择“ 保存”。 一条消息告知下一步配置的内容;选择链接以继续。
配置属性映射
Microsoft Entra Cloud Sync 映射Microsoft Entra ID用户/组与 AD 对象之间的属性。 由于 AD 架构不可发现,因此 AD 配置的每个Microsoft Entra ID都使用固定的默认映射集,你可以根据业务需求自定义这些映射。
保留相同的组名称
默认情况下,sAMAccountName 不会从 Microsoft Entra ID 同步到 Active Directory,因此,在 AD 中新建的组会被分配一个随机生成的 sAMAccountName。 若要在 AD 中保持组名称一致,请创建到 sAMAccountName 的自定义映射。 例如,使用以下表达式:
Join("_", [displayName], "Contoso_Group")
该表达式将 displayName 值与 Contoso_Group 组合。 例如,具有显示名称 Marketing 的组接收 sAMAccountName 值 Marketing_Contoso_Group。
重要
确保每个自定义sAMAccountName值在Active Directory中是唯一的。
根据需要更改其他属性映射
下表列出了默认用户和组属性映射。 可以根据要求更改其中任何一个映射 , 修改现有映射、删除一个映射或添加新映射。 某些映射由服务管理,无法编辑。
要添加映射:
浏览到 Entra ID>Entra Connect>云同步。
在“配置”下,选择 Microsoft Entra ID 到 Active Directory 的配置。
在左侧选择“属性映射”。
在顶部,选择要映射的对象类型: 用户、 组或 联系人。
选择 “添加属性映射”,然后选择映射类型:
- 直接 — 目标属性采用源属性的值。
- 常量 - 目标属性采用指定的固定字符串。
- 表达式 - 目标属性采用表达式的结果。
- 无 — 目标属性未修改。
填写所选映射类型的剩余选项,选择何时应用映射,然后选择 “应用”。
选择“保存架构”。 保存架构会触发同步。
有关编写表达式的详细信息,请参阅有关在 Microsoft Entra ID 中编写属性映射的表达式的参考。
用户属性映射
| 目标属性(Active Directory) | 源属性(Microsoft Entra ID) | 映射类型 |
|---|---|---|
accountDisabled |
Not([accountEnabled]) |
Expression |
cn |
Append(Append(Left(Trim([displayName]), 51), "_"), Mid([objectId], 25, 12)) |
Expression |
co |
IgnoreFlowIfNullOrEmpty(Trim([country])) |
Expression |
company |
IgnoreFlowIfNullOrEmpty(Trim([companyName])) |
Expression |
department |
IgnoreFlowIfNullOrEmpty(Trim([department])) |
Expression |
displayName |
displayName |
直接 |
employeeID |
IgnoreFlowIfNullOrEmpty([employeeId]) |
Expression |
givenName |
IgnoreFlowIfNullOrEmpty(Trim([givenName])) |
Expression |
l |
IgnoreFlowIfNullOrEmpty(Trim([city])) |
Expression |
manager |
manager |
直接 |
mobile |
IgnoreFlowIfNullOrEmpty(Trim([mobile])) |
Expression |
msDS-ObjectSoa |
Cloud |
定额 |
parentDistinguishedName |
保留原始 OU 的表达式 | Expression |
postalCode |
IgnoreFlowIfNullOrEmpty(Trim([postalCode])) |
Expression |
preferredLanguage |
IgnoreFlowIfNullOrEmpty(Trim([preferredLanguage])) |
Expression |
sAMAccountName |
Left(Item(Split([userPrincipalName], "@"), 1), 15) |
Expression |
sn |
IgnoreFlowIfNullOrEmpty(Trim([surname])) |
Expression |
st |
IgnoreFlowIfNullOrEmpty(Trim([state])) |
Expression |
streetAddress |
IgnoreFlowIfNullOrEmpty(Trim([streetAddress])) |
Expression |
userPrincipalName |
IIF(IsPresent([onPremisesUserPrincipalName]), [onPremisesUserPrincipalName], Append(Item(Split([userPrincipalName], "@"), 1), Append("@", %DomainFQDN%))) |
Expression |
某些用户映射(例如, adminDescription 和 msDS-ExternalDirectoryObjectId)由服务管理,在 UI 中不可见,不得编辑。
组属性映射
| 目标属性(Active Directory) | 源属性(Microsoft Entra ID) | 映射类型 |
|---|---|---|
cn |
Append(Append(Left(Trim([displayName]),51),"_"),Mid([objectId],25,12)) |
Expression |
description |
Left(Trim([description]),448) |
Expression |
displayName |
displayName |
直接 |
isSecurityGroup |
True |
定额 |
member |
members |
直接 |
parentDistinguishedName |
CN=Users,DC=<selected AD domain> |
定额 |
UniversalScope |
True |
定额 |
服务管理的组映射(adminDescription、、msDS-ExternalDirectoryObjectIdObjectGUID)在 UI 中不可见,不得编辑。
目录扩展和自定义属性映射
Microsoft Entra Cloud Sync 允许添加目录扩展并将其映射到自定义属性。 有关详细信息,请参阅用于将Microsoft Entra ID预配到Active Directory的目录扩展。
属性映射完成后,选择“ 保存架构”。 一条消息告知下一步配置的内容;选择链接以继续。
验证和管理预配的对象
以下任务在预配运行完成后执行。 在完成这些操作之前, 请测试和启用配置。
验证预配
转换 SOA 且对象处于范围内后,运行预配并确认结果。 这些步骤适用于所有三个部署选项:仅用户、组或用户和组。
组:
确认经 SOA 转换的组可在预配配置的组范围内使用。
作业运行时,经 SOA 转换的组会被成功预配。 在 预配日志中,搜索组并验证是否已预配。
打开预配日志详细信息,确认该组已与现有目标组 匹配 。
在 “修改的属性 ”选项卡上,确认目标组
adminDescription和cn属性已更新。
在 AD DS 中验证
在Active Directory 用户和计算机中,确认原始组在预期的 OU 中更新,而不是正在创建的重复组。
打开组属性并验证是否存在预期的组名称、范围和属性。
云跳过在 SOA 转换后 AD 中所做的更改
将对象的 SOA 迁移到云端后,云端就是权威来源。 如果直接在 AD DS 中编辑该对象的属性(例如重命名组),则 Cloud Sync 在预配过程中 会跳过 该对象。 在 预配日志中,该对象显示为 “跳过”,详细信息说明该对象不会同步,因为它的 SOA 已转换为云。
将预配的用户移动到其他组织单位
用户完成预配后,更改 目标容器 不会将其移到新位置,并且在 AD DS 中手动移动该对象的操作会在下一个同步周期被撤销。 此行为是预期的,因为默认 parentDistinguishedName 表达式检查用户是否已有本地位置:
IIF(IsNullOrEmpty([onPremisesDistinguishedName]), "OU=Cloud_Users,DC=contoso,DC=com", Replace([onPremisesDistinguishedName], , "^.*?,(?=(?:CN|OU|DC)=)", , "", , ))
如果 onPremisesDistinguishedName 为空,则会在指定的常量目标容器中创建用户。 填充该表达式时,该表达式会从该属性派生 OU,并忽略常量。 这种优先顺序会保留其 SOA 已迁移到云端的用户的原始 OU。 这也是已预配的用户继续返回到其云对象上记录的 OU 的原因。
云原生用户在首次预配周期之前没有 onPremisesDistinguishedName,该周期会将该值写回云对象。 有关已写回属性的完整列表,请参阅 写回到 Microsoft Entra ID 的本地属性。
若要移动用户,请使用与更改范围匹配的选项:
- 与映射规则匹配的所有用户 - 更改目标容器映射,使其指向新 OU,然后选择“ 保存”。 预配将在下一个周期重新启动,并移动所有符合映射规则的用户。
-
单个用户 — 在 Microsoft Entra ID 中更新该用户的
onPremisesDistinguishedName属性。 - 移动到其他域的用户 - 从当前配置的范围中删除用户,然后将用户添加到面向其他域的配置范围。
属性为只读,除非你至少被分配了onPremisesDistinguishedName角色。 Microsoft Entra 管理中心不公开用于编辑的本地属性,因此请使用Microsoft Graph更新单个用户:
PATCH https://microsoftgraph.chinacloudapi.cn/v1.0/users/{user-id}
Content-Type: application/json
{
"onPremisesDistinguishedName": "CN=Cloud User,OU=Cloud_Users,DC=contoso,DC=com"
}
响应 204 No Content 确认更新。 用户将在下一次同步周期中移动到新的 OU。
若要确认移动,请在 预配日志 中打开用户的条目,然后选择 “修改的属性”。 该 parentDistinguishedName 行显示旧值和新值。
回滚已转换为 SOA 的用户或组
如果将经过 SOA 转换的用户或组回滚,使其重新由 AD DS 管理,预配将不再同步该对象的更改,并将其从配置作用域中移除。 不会删除本地对象,并且本地控件在下一个同步周期中恢复。
若要确认回滚,请检查 审核日志 以验证该对象不再发生同步,因为它在本地托管,然后在 AD DS 中确认该对象仍然存在。