Azure AD ConnectからSourceAnchorを変更

皆さんこんにちは。国井です。
Azure AD Connectって、結構頻繁にアップデートを繰り返していて、
特に最近ではobjectGUID以外の属性をSourceAnchor(ソースアンカー)に設定できるようになっていることもあり、Azure AD Connect自体のアップグレードを行いたいというニーズも出てきているのではないかと思います。
そこで、今日はAzure AD Connectを実行し、ソースアンカーを変更する方法について見てみたいと思います。

【おさらい】SourceAnchorってなに?

Azure AD Connectでディレクトリ同期を行うと、Active Directory(オンプレミスAD)のユーザーとAzure Active Directory(Azure AD)のユーザーは同期されますよね。
同期されたユーザーは、オンプレミスADのAというユーザーと、Azure ADのAというユーザーが同じユーザーであるということを何かしらの形で情報として持っていなければなりません。そこで使われるのがSourceAnchorです。
SourceAnchorで指定された属性が同じであれば、同一ユーザーとみなします。
SourceAnchorという属性はディレクトリ同期時にAzure AD Connectの中に格納される属性の名前で、
オンプレミスADのobjectGUID属性 (厳密にいえば、objectGUID属性をBase64でエンコードした値) を同期したものをAzure AD Connect内でSourceAnchor属性として持ち、
SourceAnchor属性をAzure ADに同期するとImmutableID属性として持ちます。
以上のことから、オンプレミスADのobjectGUID属性とAzure ADのImmutableID属性が同じであれば、同一ユーザーとみなすということになります。
(何度も言いますが、厳密はobjectGUID属性をエンコードした値がSourceAnchorですが、ここでは話を分かりやすくするために、objectGUIDの値そのものを使って説明しています)

image

objectGUIDじゃダメですか?

SourceAnchorに使われるobjectGUID属性は他のユーザーとは異なる一意な属性であり、オブジェクト作成時に生成されたら、永続的に保持されるため、オンプレミスADとAzure ADの間でオブジェクトマッピングをしやすいという理由からSourceAnchorとして採用されていました。
しかし、ADMTなどのツールでユーザーを別フォレストに移行すると、移行先でobjectGUIDは新しい値が設定されてしまうという問題が起きます。

このような問題を解決するために、Azure AD Connectでは新しくms-DS-ConsistencyGuid属性をSourceAnchorとして採用するようになりました。ms-DS-ConsistencyGuid属性はユーザー作成時のobjectGUID属性を格納する属性で、フォレスト間でのユーザー移動があってもobjectGUID属性とは異なり、ms-DS-ConsistencyGuid属性が変更されることはありません。そのため、最近のAzure AD ConnectでもobjectGUID属性からms-DS-ConsistencyGuid属性にSourceAnchorを変更する設定が用意されています。

Azure AD Connectを使ってSourceAnchorを変更する

既にAzure AD Connectを使っている会社でSourceAnchorを変更する場合は、Azure AD Connect自体をアップグレードしてから、SourceAnchorを変更します。
Azure AD Connectのアップグレードと言っても、アップグレード自体は特別な操作など必要なく、前のバージョンのAzure AD Connectがインストールされているサーバーに新しいバージョンのAzure AD Connectをインストールするだけ。

image

ウィザード自体もAzure AD管理者の資格情報を入力さえすれば完了。

image

だけど、アップグレード完了時点では、sourceAnchorはobjectGUIDのままなので、デスクトップ画面においてあるAzure AD Connectのショートカットを実行して、再度ウィザードを実行します。
ウィザード画面から[ソースアンカーの構成]を選択して、

image

ウィザードをただ単純に進めるだけで、ソースアンカー属性がobjectGUIDからms-DS-ConsistencyGuidに変更されます。

image

image

以上の操作により、ソースアンカー属性にms-DS-ConsistencyGuidが使われるようになります。
なお、ADFSを使っている場合、発行変換規則が作り替えられます。
というか、デバイス登録用にカスタムで作った変換規則が消されてる!
(アップグレード前はバックアップ必須ですね)

image

ちなみに作られた規則は以下のとおりです。
こちらが最初の規則

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/claims/UPN", "http://schemas.microsoft.com/LiveID/Federation/2008/05/ImmutableID"), query = "samAccountName={0};userPrincipalName,objectGUID;{1}", param = regexreplace(c.Value, "(?<domain>[^\\]+)\\(?<user>.+)", "${user}"), param = c.Value);

こちらが2番目の規則

c:[Type == "http://schemas.microsoft.com/LiveID/Federation/2008/05/ImmutableID"]
=> issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Value = c.Value, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified");

皆さまにとって、この操作を行う機会が出てくるか、わかりませんが、お役に立てれば幸いです。

【参考】
Azure AD Connect: 設計概念
https://docs.microsoft.com/ja-jp/azure/active-directory/connect/active-directory-aadconnect-design-concepts#using-msds-consistencyguid-as-sourceanchor

Azure AD (Office 365) 上のユーザーをオンプレミス Active Directory ユーザーと紐付ける方法について
https://blogs.technet.microsoft.com/jpntsblog/2017/03/22/azure-ad-hardmatch/