0%

删除AD用户重建后AAD Connect同步错误

问题背景

我们订阅了Micorsoft 365,并通过Azure AD Connect将本地的AD的用户同步到Azure AD中。一次误操作将一个用户从AD删除,在同步为执行前,立刻重新创建了正用户。导致该用户无法同步了。

问题原因分析

Azure AD中的用户通过Azure AD Connect同步后,会将AD中用户的属性sourceAnchor标记到Azure AD Connect的属性immutableId,用来标识两方的用户。

sourceAnchor有很多中选择,可以参考: Azure AD Connect:设计概念

在目前的版本中,系统将ConsistencyGuid作为sourceAnchor属性,老版本默认使用ObjectGuid

ConsistencyGuid一般是和ObjectGuid相同,当重新创建一个用户时,ObjectGuid就会发生改变,最终导致在同步时,AD中的ConsistencyGuidAzure ADimmutableId不同,但用户有相同的UPNuserPrincipalName),导致同步冲突。

如果删除Azure AD的中用户,当然可以简单解决,但也会导致该用户的邮件等全部丢失。

解决方法

了解了问题的原因,我们就容易解决。思路是将AD中的ConsistencyGuidAzure ADimmutableId进行统一。

  1. 查询Azure ADimmutableId

    1
    2
    3
    4
    5
    PS C:\>  Get-MsolUser -UserPrincipalName user1@abc.com | Select-Object UserprincipalName,ImmutableID

    UserPrincipalName ImmutableId
    ----------------- -----------
    user1@abc.com K0fuEdJZe0ulRQq3+WlZTA==

    可以看到该用户的immutableId值为K0fuEdJZe0ulRQq3+WlZTA==

  2. 转换immutableId的值
    immutableId的值为Base64编码的十六进制,需要进行转换,可以用 在线工具 进行处理,输出结果需要选择十六进制。

    通过转换我们得到的值类似: 2B 47 EE 11 D2 59 7B 4B A5 45 0A B7 F9 69 59 4C

  3. 修改AD中的ConsistencyGuid
    登录AD服务器,打开ADSI编辑器,找到该用户,点开属性,找到属性ms-DS-ConsistencyGuid修改值为上步转换的值。

  4. 同步
    可以等待同步,也可以手工同步。同步后确定结果是否正确。

后续补充

在本次问题解决中,也尝试过,去修改Azure ADimmutableId,感觉这个更合理一些。但在修改过程中遇到2个问题:

  1. 如果Azure AD中用户的状态是同步状态,这个值是无法修改的,必须等这个用户变成非同步用户或者关闭同步
  2. 我从测试中修改过Azure ADimmutableId,然后通过手工同步发现依旧有错,后续没有再测试。理论上这个方法应该可以

记录一下两个命令:

  • 修改Azure ADimmutableId

    1
    Get-MsolUser -UserPrincipalName user1@abc.com | Set-MsolUser -ImmutableId L0b1Dn3oIkGiFLPW9fhY+Q==
  • 关闭同步

    1
    Set-MsolDirSyncEnabled -EnableDirSync $false

    注意: 官方文档说明修改后如果要重新打开需要等待72小时。

另外,网上找到有人说可以将Azure AD Connect卸载后,重新安装来解决,其思路也是通过重新对应ADAzure AD的用户,但这个方法我试过,问题没有解决。

最后,本次误操作的最好解决办法是,打开AD的回收站功能,具体在AD的管理中心进行修改,这样就可以完全避免这种问题了。

坚持原创技术分享,您的支持将鼓励我继续创作!