本文介绍 Microsoft Entra Connect 中的配置模型。 该模型称为声明性预配,让用户能够轻松地更改配置。 本文中介绍的许多内容都是高级内容,在大部分客户应用场景中并非必要。
概述
声明式预配正在处理来自源连接目录的对象。 它确定应如何将对象和属性从源转换到目标中。 对象在同步管道中进行处理,入站和出站规则的管道相同。 入站规则是从连接器空间到 metaverse,而出站规则是从 metaverse 到连接器空间。
管道有多个不同的模块。 每个模块负责对象同步中的一个概念。
Scope
范围模块对对象进行评估,并确定在范围内且应纳入处理的规则。 根据对象的属性值,不同的同步规则会被评估为在作用范围内。 例如,没有 Exchange 邮箱的已禁用用户拥有与具有邮箱的已启用用户不同的规则。
范围被定义为组和子句。 子句位于组内。 逻辑 AND 用于组中所有子句之间。 例如,(部门 =IT AND 国家 = Denmark)。 在组之间使用逻辑 OR。
此图中的范围条件应理解为 (department = IT AND country = Denmark) OR (country=Sweden)。 如果组 1 或组 2 的求值结果为 true,则该规则在范围内。
范围模块支持以下操作。
| 操作 | 说明 |
|---|---|
| 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。 如果对象是指定组的成员,则规则在范围内。 |
加入
同步管道中的联接模块负责查找源中的对象和目标中的对象之间的关系。 在入站规则中,此关系将是指连接器空间中的对象与 metaverse 中的对象建立关系。
目标在于查看 Metaverse 中是否已经存在由另一个连接器创建、可与其关联的对象。 例如,在帐户-资源林中,帐户林中的用户应与资源林中的用户联接。
联接主用于入站规则,以将连接器空间对象与同一元宇宙对象联接在一起。
联接定义为一个或多个组。 在组内,有子句。 逻辑 AND 在一个组中的所有子句之间使用。 在各组之间使用逻辑 OR。 组的处理顺序为从上到下。 一个组在目标中恰好找到一个对象匹配项时,不会评估任何其他联接规则。 如果找到零个或多于一个对象,则会继续处理下一组规则。 出于此原因,应首先创建最明确的规则,最后创建比较模糊的规则。
此图中的联接会从上到下进行处理。 同步管道首先查看是否有 employeeID 的匹配项。 如果没有,第二个规则会查看是否可以使用帐户名来将对象联接在一起。 如果也不是匹配项,则第三个(最后一个)规则会使用用户名查找更模糊的匹配项。
如果对所有联接规则进行评估,并且匹配项不恰好为一个,则会使用说明页上的链接类型。 如果此选项设置为 预配,则会在目标中创建新对象。
一个对象应该只有一个其作用域内包含联接规则的同步规则。 如果有多个同步规则定义了联接,那么会出错。 优先级不用于解决联接冲突。 对象必须有一个处于作用域内的联接规则,属性才能以相同的入站/出站方向流动。 如果需要让属性以入站和出站方式流动到同一对象,则必须具有带联接的入站和出站同步规则。
出站联接尝试将对象预配到目标连接器空间时,会有特殊行为。 DN 属性用于先尝试使用反向联接。 如果目标连接器空间中已存在具有同一 DN 的对象,对象会联接起来。
新的同步规则生效时,只会计算联接模块一次。 如果对象联接起来,即使不再满足联接条件,也不会取消联接。 如果想要取消对象的联接,则将这些对象联接在一起的同步规则必须超出其作用域。
Metaverse 删除
只要有一个在范围内的同步规则将 链接类型 设为 预配 或 StickyJoin,Metaverse 对象就会保留。 当不允许 Connector 将新对象预配到 metaverse 时,将使用 StickyJoin。 但是,当它已加入时,必须在源中删除它,然后才能删除 Metaverse 对象。
删除 metaverse 对象后,所有与标记为“预配”的出站同步规则关联的对象都将标记为要删除。
变换
转换用于定义属性应该如何从源传递到目标。 流可以是以下流类型之一:直接、常数或表达式。 直接流会原样传递属性值,不进行额外转换。 常量值会设置指定的值。 表达式会使用声明性预配表达式语言来表达应该如何转换。 有关表达式语言的详细信息,请参阅了解声明性预配表达式语言一文。
“应用一次”复选框指定仅在对象最初创建时设置该属性。 例如,此配置可用于设置新用户对象的初始密码。
合并属性值
在属性流中,有一个设置可用于确定是否应从多个不同的连接器合并多值属性。 默认值为 Update,表示应采用具有最高优先级的同步规则。
此外,还有Merge和MergeCaseInsensitive。 这些选项让用户能够合并来自不同源的值。 例如,它可用于合并来自多个不同林系的 proxyAddresses 属性。 使用此选项时,对象范围内的所有同步规则都必须使用相同的合并类型。 不能从一个连接器定义Update,并从另一个连接器定义Merge。 如果尝试此操作,会报错。
“Merge”和“MergeCaseInsensitive”之间的差异在于处理重复属性值的方式。 同步引擎可确保不会将重复的值插入目标属性。 使用 MergeCaseInsensitive 可防止出现只有大小写差异的重复值。 例如,不应在目标属性中同时看到“SMTP:bob@contoso.com”和“smtp:bob@contoso.com”。 “Merge”只会查看确切值,因此仅有大小写差异的值可能会作为多个值出现。
“Replace”选项与“Update”选项相同,但不使用“Replace”。
控制属性流动过程
当多个入站同步规则被配置为向同一 metaverse 属性提供值时,将使用优先级来确定最终采用哪条规则。 具有最高优先级(最小数值)的同步规则会提供值。 出站规则的情况一样。 具有最高优先级的同步规则会生效,并向已连接的目录提供值。
在某些情况下,同步规则应确定其他规则的行为方式,而不是提供值。 在这种情况下会使用一些特殊字面量。
对于入站同步规则,字面量 NULL 可用于指示该流没有可提供的值。 具有较低优先级的其他规则可以提供一个值。 如果没有规则提供值,则会删除 metaverse 属性。 对于出站规则,如果 NULL 是处理完所有同步规则后的最终值,则会在已连接的目录中删除该值。
字面量 AuthoritativeNull 与 NULL 类似,但不同之处在于较低优先级的规则无法提供值。
属性流还可使用 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”现成转换规则中找到此函数,其中仅当确认已成功导出值时,才应同步属性。
对于具有混合 Exchange 的 ProxyAddresses 属性流,可以在现成同步规则 In from AD – User Common from Exchange 中找到此函数的示例。 例如,添加用户的 ProxyAddresses 时,ImportedValue 函数仅在后续导入步骤中确认后返回新值:
proxyAddresses
<- RemoveDuplicates(Trim(ImportedValue("proxyAddresses")))
如果目标目录可能以无提示的方式更改或放弃导出的属性值,并且我们希望同步仅处理已确认的属性值,则需要使用此函数。
优先级
多个同步规则尝试向目标提供相同的属性值时,会使用优先级值来确定胜出的规则。 具有最高优先级(最小数值)的规则会在冲突中提供属性。
此排序可用于针对小部分对象定义更精确的属性流。 例如,现成规则可确保已启用帐户 (User AccountEnabled) 的属性优先于其他帐户的属性。
可定义连接器之间的优先级。 这样一来,具有更好的数据的连接器可以先提供值。
相同连接器空间中的多个对象
在联接到同一 Metaverse 对象的同一连接器空间中不可能有多个对象。 即使源中的属性具有相同的值,此配置仍会报告为不明确。
后续步骤
- 在 Understanding Declarative Provisioning Expressions(了解声明性预配表达式)中了解有关表达式语言的详细信息。
- 在 Understanding the default configuration(了解默认配置)中了解如何开箱即用地使用声明式预配。
- 在 How to make a change to the default configuration(如何对默认配置进行更改)中了解如何使用声明性预配进行实际更改。
- 如需了解用户和联系人如何协同工作,请继续阅读了解用户和联系人。
主题概述
参考主题