Microsoft Entra Connect 同步:了解声明性预配

本文介绍 Microsoft Entra Connect 中的配置模型。 该模型称为声明性预配,让用户能够轻松地更改配置。 本文中介绍的许多内容都是高级内容,在大部分客户应用场景中并非必要。

概述

声明性预配正在处理来自源连接目录的对象。 它确定应如何将对象和属性从源转换到目标中。 对象在同步管道中进行处理,入站和出站规则的管道相同。 入站规则是从连接器空间到 metaverse,而出站规则是从 metaverse 到连接器空间。

显示同步管道示例的示意图。

管道有多个不同的模块。 每个模块负责对象同步中的一个概念。

显示管道中的模块的示意图。

  • 源:源对象
  • 范围:查找范围内的所有同步规则
  • 联接:确定连接器空间与 metaverse 之间的关系
  • 转换:计算属性应如何转换和流动
  • 优先级:解决冲突的属性提供问题
  • 目标:目标对象

范围

范围模块会计算对象,并确定在范围内且应纳入处理的规则。 根据对象的属性值,不同同步规则的计算结果都是在范围内。 例如,没有 Exchange 邮箱的已禁用用户拥有与具有邮箱的已启用用户不同的规则。
显示对象的范围模块的示意图。

范围可定义为组和子句。 子句位于组内。 逻辑 AND 用于组中的所有子句之间。 例如,(department =IT AND country = Denmark)。 逻辑 OR 用于组之间。

范围
此图中的范围应理解为 (department = IT AND country = Denmark) OR (country=Sweden)。 如果组 1 或组 2 的计算结果为 true,则该规则在范围内。

范围模块支持以下运算。

Operation 说明
EQUAL、NOTEQUAL 计算某个值是否等于属性值的字符串比较。 对于多值属性,请参阅 ISIN 和 ISNOTIN。
LESSTHAN、LESSTHAN_OR_EQUAL 计算某个值是否小于属性值的字符串比较。
CONTAINS、NOTCONTAINS 计算是否可以在属性值中找到某个值的字符串比较。
STARTSWITH、NOTSTARTSWITH 计算某个值是否在属性值开头的字符串比较。
ENDSWITH、NOTENDSWITH 计算某个值是否在属性值末尾的字符串比较。
GREATERTHAN、GREATERTHAN_OR_EQUAL 计算某个值是否大于属性值的字符串比较。
ISNULL、ISNOTNULL 计算对象中是否不存在该属性。 如果该属性不存在,则为 null,那么规则在范围内。
ISIN、ISNOTIN 计算定义的属性中是否存在某个值。 此运算是 EQUAL 和 NOTEQUAL 的多值变化形式。 该属性应该是多值属性,且如果可以在任何属性值中找到该值,那么规则在范围内。
ISBITSET、ISNOTBITSET 计算是否已设置特定的位。 例如,可用于计算 userAccountControl 中的位,查看用户是处于启用状态还是禁用状态。
ISMEMBEROF、ISNOTMEMBEROF 值应该包含连接器空间中组的 DN。 如果对象是指定组的成员,则规则在范围内。

Join

同步管道中的联接模块负责查找源中的对象和目标中的对象之间的关系。 在入站规则中,此关系是指连接器空间中的对象找到与 metaverse 中对象的关系。
在 cs 和 mv 之间联接
目标在于查看 Metaverse 中是否已经有应该与之关联的对象(由另一个连接器创建)。 例如,在帐户-资源林中,帐户林中的用户应与资源林中的用户联接。

联接主用于入站规则,以将连接器空间对象与同一 metaverse 对象联接在一起。

联接定义为一个或多个组。 在组内,用户拥有子句。 逻辑 AND 用于组中的所有子句之间。 逻辑 OR 用于组之间。 组的处理顺序为从上到下。 一个组在目标中恰好找到一个对象匹配项时,不会计算任何其他联接规则。 如果找到零个或多个对象,则会继续处理下一组规则。 出于此原因,应首先创建最明确的规则,最后创建比较模糊的规则。
联接定义
此图中的联接会从上到下进行处理。 同步管道首先查看是否有 employeeID 的匹配项。 如果没有,第二个规则会查看是否可以使用帐户名来将对象联接在一起。 如果也不是匹配项,则第三个(最后一个)规则会使用用户名查找更模糊的匹配项。

如果对所有联接规则进行评测,但没有完全相符的匹配项,则会使用“说明”页上的“链接类型”。 如果此选项设置为“预配”,则会在目标中创建新对象。
屏幕截图,显示“链接类型”下拉菜单已打开。

一个对象应该只有一个同步规则具有在范围内的联接规则。 如果有多个同步规则定义了联接,那么会出错。 优先级不用于解决联接冲突。 对象必须具有在范围内的联接规则,属性才能以相同的入站/出站方向流动。 如果需要让属性以入站和出站方式流动到同一对象,则联接必须具有入站和出站同步规则。

出站联接尝试将对象预配到目标连接器空间时,会有特殊行为。 DN 属性用于先尝试使用反向联接。 如果目标连接器空间中已存在具有同一 DN 的对象,对象会联接起来。

新的同步规则进入范围时,只会计算联接模块一次。 如果对象联接起来,即使不再满足联接条件,也不会取消联接。 如果想要取消对象的联接,则联接对象的同步规则必须超出范围。

Metaverse 删除

只要有一个在范围内的同步规则,Metaverse 对象的“链接类型”就会维持设置为“预配”或“StickyJoin”。 不允许连接器将新对象预配到 Metaverse 时,将使用 StickyJoin。 但是,当它已加入时,必须在源中删除它,然后才能删除 Metaverse 对象。

删除 metaverse 对象后,所有与标记为“预配”的出站同步规则关联的对象都将标记为要删除。

转换

转换用于定义属性应该如何从源流动到目标。 流可以是以下流类型之一:直接、常数或表达式。 直接流会按原样流动属性值,而不进行其他转换。 常数值会设置指定的值。 表达式会使用声明性预配表达式语言来表达应该如何转换。 有关表达式语言的详细信息,请参阅了解声明性预配表达式语言一文。

预配或联接

“应用一次”复选框定义只应在最初创建对象时设置的属性。 例如,此配置可用于设置新用户对象的初始密码。

合并属性值

在属性流中,有一个设置可用于确定是否应从多个不同的连接器合并多值属性。 默认值为“Update” ,表示应采用具有最高优先级的同步规则。

此屏幕截图显示了“添加转换”部分,其中的“合并类型”下拉菜单已打开。

此外,还有“Merge” 和“MergeCaseInsensitive”。 这些选项让用户能够合并来自不同源的值。 例如,它可用于合并来自多个不同林的 proxyAddresses 属性。 使用此选项时,对象范围内的所有同步规则都必须使用相同的合并类型。 不能定义从一个连接器“Update”,从另一个连接器“Merge”。 如果尝试此操作,将收到错误。

“Merge”和“MergeCaseInsensitive”之间的差异在于处理重复属性值的方式。 同步引擎可确保不会将重复的值插入目标属性。 使用“MergeCaseInsensitive”可防止出现只有大小写差异的重复值。 例如,不应在目标属性中同时看到“SMTP:bob@contoso.com”和“smtp:bob@contoso.com”。 “Merge”只会查看仅可能存在大小写差异的确切值和多个值。

“Replace”选项与“Update”选项相同,但未使用该选项。

控制属性流动过程

多个入站同步规则配置为向同一 metaverse 属性提供值时,会使用优先级确定获得采用的规则。 具有最高优先级(最小数值)的同步规则会提供值。 出站规则的情况一样。 具有最高优先级的同步规则会获得采用,并向已连接的目录提供值。

在某些情况下,同步规则应确定其他规则的行为方式,而不是提供值。 在这种情况下会使用一些特殊文本。

对于入站同步规则,文本 NULL 可用于表示流没有要提供的值。 具有较低优先级的其他规则可以提供一个值。 如果没有规则提供值,则会删除 metaverse 属性。 对于出站规则,如果 NULL 是处理完所有同步规则后的最终值,则会在已连接的目录中删除该值。

文本 AuthoritativeNullNULL 类似,但差异在于具有较低优先级的规则不可以提供值。

属性流还可使用 IgnoreThisFlow。 就表示没有要提供的内容而言,它与 NULL 类似。 差异在于它不会删除目标中已经存在的值。 就像属性流从未出现一样。

下面是一个示例:

Out to AD - User Exchange hybrid 中可找到下列流:
IIF([cloudSOAExchMailbox] = True,[cloudMSExchSafeSendersHash],IgnoreThisFlow)
此表达式的意思是:如果用户邮箱位于 Microsoft Entra ID 中,则将特性从 Microsoft Entra ID 流动到 Active Directory。 如果并非如此,则不将任何内容流回 Active Directory。 在此情况下,会在 AD 中保留现有值。

ImportedValue

函数 ImportedValue 不同于其他所有函数,因为其属性名称必须放在引号内,而不是放在方括号中:

ImportedValue("proxyAddresses")

入站同步会假定尚未到达已连接目录的属性最终会在某个点到达该目录。 因此,通常,同步从相应的连接器空间中获取属性值。 即使尚未导出或在导出期间出现错误,也是如此。 但是,有必要仅同步从已连接的目录导入时导出并确认的值。 可在多个“In From AD/AAD”现成转换规则中找到此函数,其中仅当确认已成功导出值时,才应同步属性。

在现成同步规则“In from AD - User Common from Exchange”中可找到此函数的示例,它用于 Hybrid Exchange 的 ProxyAddresses 属性流。 例如,添加用户的 ProxyAddresses 时,ImportedValue 函数仅在从以下导入步骤确认后返回新值:

proxyAddresses<- RemoveDuplicates(Trim(ImportedValue("proxyAddresses")))

如果目标目录可能以无提示的方式更改或放弃导出的属性值,并且我们希望同步仅处理已确认的属性值,则需要使用此函数。

优先级

多个同步规则尝试向目标提供相同的属性值时,会使用优先级值来确定获得采用的规则。 具有最高优先级(最小数值)的规则会在冲突中提供属性。

合并类型

此排序可用于针对小部分对象定义更精确的属性流。 例如,现成规则可确保已启用帐户 (User AccountEnabled) 的属性优先于其他帐户的属性。

可定义连接器之间的优先级。 这样一来,具有更好的数据的连接器可以先提供值。

相同连接器空间中的多个对象

在联接到同一 Metaverse 对象的同一连接器空间中不可能有多个对象。 即使源中的属性具有相同的值,此配置仍会报告为不明确。

示意图显示了多个对象联接到同一 mv 对象,并带有一个透明的红色 X 覆盖层。

后续步骤

概述主题

参考主题