Microsoft Entra Connect 同步處理:了解架構
本主題涵蓋 Microsoft Entra Connect 同步處理的基本架構。如果您很熟悉較早期的身分識別同步處理技術,也會對本主題的內容感到熟悉。 如果您是同步處理的新手,這個主題很適合您。 但是,不一定需要了解本主題的詳細資料,才能成功地自訂 Microsoft Entra Connect 同步處理 (在本主題中稱為「同步處理引擎」)。
架構
同步處理引擎會為多個已連接的資料來源中儲存的物件建立整合式檢視,並管理這些資料來源中的身分識別資訊。 此整合式檢視取決於從連接的資料來源擷取的身分識別資訊,以及一組用來決定如何處理此資訊的規則。
連接的資料來源和連接器
同步處理引擎會處理來自不同資料儲存機制 (例如 Active Directory 或 SQL Server 資料庫) 的身分識別資訊。 每個會將其資料組織成類似資料庫格式並提供標準資料存取方法的資料儲存機制,都是同步處理引擎的潛在資料來源候選項目。 由同步處理引擎進行同步處理的資料儲存機制稱為連接的資料來源或連接的目錄 (CD)。
同步處理引擎會在稱為 連接器的模組中,對與連接之資料來源的互動進行封裝。 每種類型的連接資料來源都有特定的連接器。 連接器會將必要的作業轉譯成連接的資料來源所認識的格式。
連接器會進行 API 呼叫,以便與連接的資料來源交換身分識別資訊 (讀取和寫入)。 此外,也可以使用可延伸的連線架構來新增自訂連接器。 下圖顯示連接器如何將連接的資料來源連接至同步處理引擎。
資料可以任一方向流動,但無法同時以兩個方向流動。 換句話說,連接器可以設定成允許資料從連接的資料來源流動至同步處理引擎,或從同步處理引擎流動至連接的資料來源,但是一個物件和屬性一次只能進行其中一項作業。 不同物件和不同屬性的方向可以不同。
若要設定連接器,您可以指定要同步處理的物件類型。 指定物件類型,以定義同步處理程序中內含物件的範圍。 下一個步驟是選取要同步處理的屬性,這就是所謂的屬性包含清單。 您可以隨時變更這些設定,以回應您的商務規則變更。 當您使用 Microsoft Entra Connect 安裝精靈時,它會為您進行這些設定。
若要將物件匯出到連接的資料來源,屬性包含清單必須至少包含在連接的資料來源中建立特定物件類型所需的最少屬性。 例如,sAMAccountName 屬性必須包含在屬性包含清單中,才能將使用者物件匯出到 Active Directory,因為 Active Directory 中的所有使用者物件都必須定義 sAMAccountName 屬性。 同樣地,安裝精靈會為您進行此設定。
如果連接的資料來源使用結構化元件 (例如資料分割或容器) 來組織物件,您可以限制連接的資料來源中用於特定解決方案的區域。
同步處理引擎命名空間的內部結構
整個同步處理引擎命名空間是由用來儲存身分識別資訊的兩個命名空間所組成。 這兩個命名空間為:
- 連接器空間 (CS)
- Metaverse (MV)
連接器空間 是一個預備區域,其中包含連接的資料來源中指定物件的代表項目,以及在屬性包含清單中指定的屬性。 同步處理引擎會使用連接器空間來判斷連接的資料來源有何變更,以及預備連入的變更。 同步處理引擎也會使用連接器空間來預備連出的變更,以便匯出到連接的資料來源。 同步處理引擎會維護個別的連接器空間,做為每個連接器的預備區域。
使用預備區域,同步處理引擎會與連接的資料來源保持獨立,而不受其可用性和存取能力影響。 因此,您可以使用預備區域中的資料,隨時處理身分識別資訊。 同步處理引擎只能要求最後一個通訊工作階段終止後在連接的資料來源內所做的變更,或只推送連接的資料來源尚未收到的身分識別資訊變更,以減少同步處理引擎與連接的資料來源之間的網路流量。
此外,同步處理引擎會儲存它在連接器空間中預備的所有物件的相關狀態資訊。 同步處理引擎收到新的資料時,一律會評估此資料是否已同步處理。
Metaverse 是一個儲存區域,其中包含來自多個連接的資料來源的彙總身分識別資訊,並提供所有組合物件的單一全域、整合式檢視。 根據從連接的資料來源擷取的身分識別資訊以及一組可讓您自訂同步處理程序的規則,建立 Metaverse 物件。
下圖顯示同步處理引擎內的連接器空間命名空間和 Metaverse 命名空間。
同步處理引擎身分識別物件
同步處理引擎中的物件是連接的資料來源中任一個物件的代表項目,或同步處理引擎對於這些物件的整合式檢視。 每一個同步處理引擎物件都必須有全域唯一識別碼 (GUID)。 Guid 可提供資料完整性以及物件之間的快速關聯性。
連接器空間物件
當同步處理引擎與連接的資料來源通訊時,它會讀取連接的資料來源中的身分識別資訊,並使用該資訊在連接器空間中建立身分識別物件的代表項目。 您無法個別建立或刪除這些物件。 不過,您可以手動刪除連接器空間中的所有物件。
連接器空間中的所有物件都具有兩個屬性:
- 全域唯一識別碼 (GUID)
- 辨別名稱 (也稱為 DN)
如果連接的資料來源將唯一屬性指派給物件,則連接器空間中的物件也可以有錨點屬性。 錨點屬性可唯一識別連接的資料來源中的物件。 同步處理引擎會使用錨點,在連接的資料來源中尋找此物件的對應代表項目。 同步處理引擎假設物件的錨點永遠不會在物件的存留期間內變更。
許多連接器會在匯入每個物件時,使用已知的唯一識別碼自動為其產生錨點。 例如,Active Directory 連接器會使用錨點的 objectGUID 屬性。 如果連接的資料來源未提供清楚定義的唯一識別碼,您可以指定在連接器設定期間產生錨點。
在該情況下,會從物件類型的一或多個唯一屬性 (均未變更) 建置錨點,而該錨點可唯一識別連接器空間中的物件 (例如,員工編號或使用者識別碼)。
連接器空間物件可以是下列其中一項:
- 預備物件
- 預留位置
預備物件
預備物件表示連接的資料來源中指定的物件類型執行個體。 除了 GUID 和辨別名稱以外,預備物件一律有可指出物件類型的值。
已匯入的預備物件一律有錨點屬性的值。 同步處理引擎最近佈建且正在連接的資料來源中進行建立的預備物件,沒有錨點屬性的值。
預備物件也帶有商務屬性的目前值,以及同步處理引擎執行同步處理程序所需的作業資訊。 作業資訊包括旗標,可指出在預備物件上預備的更新類型。 如果預備物件從連接的資料來源收到尚未處理的新身分識別資訊,則物件會標示為 [擱置匯入] 。 如果預備物件有新的身分識別資訊尚未匯出至連接的資料來源,則物件會標示為 [擱置匯出] 。
預備物件可以是匯入物件或匯出物件。 同步處理引擎會使用從連接的資料來源接收的物件資訊建立匯入物件。 當同步處理引擎收到的新物件存在相關資訊,符合在連接器中選取的其中一個物件類型時,它會在連接器空間中建立匯入物件,做為連接的資料來源中物件的代表項目。
下圖顯示的匯入物件表示連接的資料來源中的物件。
同步處理引擎會使用 Metaverse 中的物件資訊建立匯出物件。 在下一個通訊工作階段期間,匯出物件會匯出至連接的資料來源。 從同步處理引擎的觀點來看,匯出物件尚未存在於連接的資料來源中。 因此,無法使用匯出物件的錨點屬性。 從同步處理引擎接收物件之後,連接的資料來源會為物件的錨點屬性建立唯一值。
下圖顯示如何匯出使用 Metaverse 中的身分識別資訊所建立的物件。
同步處理引擎會從連接的資料來源重新匯入物件,以確認匯出物件。 當同步處理引擎在下一次從該連接的資料來源匯入期間收到物件時,匯出物件就會變成匯入物件。
預留位置
同步處理引擎會使用一般命名空間來儲存物件。 不過,有些連接的資料來源 (例如 Active Directory) 會使用階層式命名空間。 若要將階層式命名空間中的資訊轉換成一般命名空間,同步處理引擎會使用預留位置來保留階層。
每個預留位置均代表物件的階層名稱元件 (例如,組織單位),而且該物件尚未匯入同步處理引擎,但需要建構階層式名稱。 預留位置會填補在連接的資料來源中參考不是連接器空間中預備物件的物件所產生的間距。
同步處理引擎也會使用預留位置來儲存尚未匯入的參考物件。 例如,如果已設定同步處理要包含 Abbie Spencer 物件的管理員屬性,而且接收的值是尚未匯入的物件 (例如 CN=Lee Sperry,CN=Users,DC=fabrikam,DC=com),則管理員資訊會儲存為連接器空間中的預留位置。 如果稍後匯入管理員物件,則代表此管理員的預備物件會覆寫預留位置物件。
Metaverse 物件
Metaverse 物件包含同步處理引擎具有的連接器空間中預備物件的彙總檢視。 同步處理引擎會使用匯入物件中的資訊建立 Metaverse 物件。 數個連接器空間物件可以連結至單一 Metaverse 物件,但連接器空間物件無法連結到一個以上的 Metaverse 物件。
無法以手動方式建立或刪除 Metaverse 物件。 同步處理引擎會自動刪除沒有連接器空間中任何連接器空間物件之連結的 Metaverse 物件。
若要將連接的資料來源中的物件對應至 Metaverse 中對應的物件類型,同步處理引擎會提供可延伸的結構描述,其中包含一組預先定義的物件類型和相關聯的屬性。 您可以為 metaverse 物件建立新的物件類型和屬性。 屬性可以有單一值或多個值,而屬性類型可以是字串、參考、數字和布林值。
預備物件和 Metaverse 物件之間的關聯性
在同步處理引擎命名空間內,預備物件和 Metaverse 物件之間的連結關聯性會啟用資料流。 連結至 Metaverse 物件的預備物件稱為聯結的物件 (或連接器物件)。 未連結至 Metaverse 物件的預備物件稱為分離的物件 (或中斷器物件)。 偏好使用聯結和分離詞彙,才不會與負責從連接的目錄匯入和匯出資料的連接器混淆。
預留位置永遠不會連結至 Metaverse 物件
聯結的物件是由預備物件及其對單一 Metaverse 物件的連結關聯性所組成。 聯結的物件用來同步處理連接器空間物件與 Metaverse 物件之間的屬性值。
當預備物件在同步處理期間變成聯結的物件時,屬性可以在預備物件與 Metaverse 物件之間流動。 屬性流程是雙向的,並可使用匯入屬性規則和匯出屬性規則加以設定。
單一連接器空間物件只可以連結至一個 Metaverse 物件。 不過,每個 Metaverse 物件可以連結至相同或不同連接器空間中的多個連接器空間物件,如下圖所示。
預備物件與 Metaverse 物件之間的連結關聯性持續存在,只能依據您指定的規則加以移除。
分離的物件式未連結至任何 Metaverse 物件的預備物件。 在 Metaverse 中,分離物件的屬性值不會再做進一步的處理。 同步處理引擎不會更新連接的資料來源中對應物件的屬性值。
使用分離的物件,可以將身分識別資訊儲存在同步處理引擎,稍後進行處理。 將預備物件保持為連接器空間中的分離物件有許多好處。 因為系統已預備此物件的必要資訊,所以不需要在下一次從連接的資料來源匯入期間建立此物件的代表項目。 如此一來,同步處理引擎一律有連接的資料來源完整快照,即使目前沒有連接的資料來源連線亦然。 根據您指定的規則而定,分離物件可以轉換為聯結物件,反之亦然。
匯入物件會建立為分離物件。 匯出物件必須是聯結物件。 系統邏輯會強制執行這項規則,並刪除每一個不是聯結物件的匯出物件。
同步處理引擎身分識別管理程序
身分識別管理程序可控制在不同的連接資料來源之間更新身分識別資訊的方式。 身分識別管理可分為三個程序:
- Import
- 同步處理
- Export
在匯入過程中,同步處理引擎會評估從連接的資料來源傳入的身分識別資訊。 偵測到變更時,它會在連接器空間中建立新的預備物件或更新現有預備物件以便進行同步處理。
在同步處理過程中,同步處理引擎會更新 Metaverse 以反映連接器空間中所發生的變更,並更新連接器空間以反映 Metaverse 中所發生的變更。
在匯出過程中,同步處理引擎會推送預備物件上預備的變更以及標示為「擱置匯出」的變更。
下圖顯示當身分識別資訊在兩個連接的資料來源之間流動時,發生每個程序的位置。
匯入程序
在匯入過程中,同步處理引擎會評估身分識別資訊的更新。 同步處理引擎會比較從連接的資料來源收到的身分識別資訊與預備物件的身分識別資訊,以判斷預備物件是否需要更新。 如果必須使用新資料更新預備物件,則預備物件會標示為「擱置匯入」。
在同步處理之前預備連接器空間中的物件,同步處理引擎即可只處理已變更的身分識別資訊。 此處理可提供下列優點:
- 有效率的同步處理。 在同步處理期間處理的資料量降到最低。
- 有效率的重新同步處理。 您可以變更同步處理引擎處理身分識別資訊的方式,而不需要將同步處理引擎重新連接到資料來源。
- 有機會預覽同步處理。 您可以預覽同步處理,以驗證您對於身分識別管理程序的相關假設是否正確。
對於連接器中指定的每個物件,同步處理引擎會先試著在連接器的連接器空間中尋找該物件的代表項目。 同步處理引擎會檢查連接器空間中所有的預備物件,並嘗試尋找具有相符錨點屬性的對應預備物件。 如果現有預備物件都沒有相符的錨點屬性,則同步處理引擎會嘗試尋找具有相同辨別名稱的對應預備物件。
當同步處理引擎找到辨別名稱相符,但錨點不符的預備物件時,就會發生下列特殊行為:
- 如果連接器空間中找到的物件沒有錨點,則同步處理引擎會從連接器空間中移除此物件,並將其連結至的 Metaverse 物件標記為 [在下一次執行同步處理時重試佈建] 。 它會接著建立新的匯入物件。
- 如果連接器空間中找到的物件具有錨點,則同步處理引擎會假設此物件已在連接的目錄中重新命名或遭到刪除。 它會為連接器空間物件指派新的暫時辨別名稱,以便預備連入的物件。 舊物件就會變成 暫時性,等待連接器匯入重新命名或刪除內容,以解決這種狀況。
暫時性物件不一定是問題,您甚至可能會在狀況良好的環境中看到這些物件。 使用 Microsoft Entra Connect 同步處理 V2 端點 API 時,暫時性物件會在後續差異同步處理週期中自動解決。 常見範例是當系統管理員使用 PowerShell 直接在 Microsoft Entra ID 中永久刪除物件並且稍後再次同步處理時,您可能會在以暫存模式安裝的 Microsoft Entra Connect 伺服器上發現產生了暫時性物件。
如果同步處理引擎找到的預備物件對應至連接器中指定的物件,它會判斷要套用哪一種變更。 例如,同步處理引擎可能會在連接的資料來源中重新命名或刪除此物件,或者可能只更新此物件的屬性值。
具有更新後資料的預備物件會標示為「擱置匯入」。 有不同的暫止匯入類型可以使用。 視匯入程序的結果而定,連接器空間中的預備物件具有下列其中一種擱置匯入類型:
- None: 預備物件的任何屬性均沒有可用的變更。 同步處理引擎不會將此類型標示為「擱置匯入」。
- [新增]。 預備物件是連接器空間中新的匯入物件。 同步處理引擎會將此類型標示為「擱置匯入」,以便在 Metaverse 中進行其他處理。
- 更新。 同步處理引擎會在連接器空間中尋找對應的預備物件並此類型標示為「擱置匯入」,以便在 Metaverse 中處理屬性更新。 更新包含物件重新命名。
- 刪除。 同步處理引擎會在連接器空間中尋找對應的預備物件並將此類型標示為「擱置匯入」,以便刪除聯結的物件。
- 刪除/新增。 同步處理引擎會在連接器空間中尋找對應的預備物件,但物件類型不相符。 在此情況下,會預備刪除-新增的修改。 刪除-新增的修改會向同步處理引擎表示必須進行此物件的完整重新同步處理,因為物件類型變更時此物件會套用不同的規則組合。
設定預備物件的擱置匯入狀態,就可以大幅減少在同步處理期間處理的資料量,因為這麼做可讓系統只處理已更新資料的物件。
同步處理程序
同步處理是由兩個相關的程序所組成:
- 輸入同步處理:適用於使用連接器空間中的資料更新 Metaverse 的內容時。
- 輸出同步處理:適用於使用 Metaverse 中的資料更新連接器空間的內容時。
內送同步處理程序可使用暫存於連接器空間內的資訊,為儲存於連接資料來源中的 Metaverse 資料,建立整合式檢視。 根據規則的設定方式而定,彙總所有的預備物件或僅限具有擱置匯入資訊的物件。
輸出同步處理程序會在 Metaverse 物件變更時更新匯出物件。
輸入同步處理會在 Metaverse 中為從連接的資料來源接收的身分識別資訊建立整合式檢視。 同步處理引擎可以使用連接的資料來源中最新的身分識別資訊,隨時處理身分識別資訊。
輸入同步處理
輸入同步處理包含下列程序:
- 佈建 (也稱為投射,如果一定要區分此程序與輸出同步處理佈建)。 同步處理引擎會根據預備物件建立新的 Metaverse 物件並連結它們。 佈建是物件層級作業。
- Join: 同步處理引擎會將預備物件連結至現有的 Metaverse 物件。 聯結是物件層級作業。
- 匯入屬性流程。 同步處理引擎會更新 Metaverse 中物件的屬性值 (稱為屬性流程)。 匯入屬性流程是屬性層級作業,其需要預備物件與 Metaverse 物件之間的連結。
佈建是唯一可在 Metaverse 中建立物件的程序。 佈建只會影響屬於分離物件的匯入物件。 在佈建期間,同步處理引擎會建立 Metaverse 物件 (其對應至匯入物件的物件類型),並且建立這兩個物件間的連結,進而建立聯結的物件。
聯結程序還會建立匯入物件與 Metaverse 物件之間的連結。 聯結與佈建的差異在於聯結程序要求匯入物件連結至現有的 Metaverse 物件,而佈建程序會建立新的 Metaverse 物件。
同步處理引擎會使用在同步處理規則組態中指定的準則,嘗試將匯入物件聯結至 Metaverse 物件。
在佈建或聯結過程中,同步處理引擎會將分離物件連結到 Metaverse 物件,使它們聯結在一起。 在完成這些物件層級的作業之後,同步處理引擎可以更新相關聯 Metaverse 物件的屬性值。 此程序稱為匯入屬性流程。
匯入屬性流程發生於帶有新資料並連結至 Metaverse 物件的所有匯入物件上。
輸出同步處理
輸出同步處理會在 Metaverse 物件變更但未刪除時更新匯出物件。 輸出同步處理的目標是要評估變更 Metaverse 物件是否需要更新連接器空間中的預備物件。 在某些情況下,變更可以要求更新所有連接器空間中的預備物件。 變更的預備物件會標示為「擱置匯出」,並使其成為匯出物件。 這些匯出物件稍後會在匯出過程中推送到連接的資料來源。
輸出同步處理有三個程序:
- 佈建
- 解除佈建
- 匯出屬性流程
佈建和解除佈建都是物件層級的作業。 解除佈建相依於佈建,因為只有佈建可以啟始它。 當佈建移除 Metaverse 物件與匯出物件之間的連結時,就會觸發解除佈建。
將變更套用至 Metaverse 中的物件時,一律會觸發佈建。 對 Metaverse 物件進行變更時,同步處理引擎可以在佈建過程中執行下列任何一項工作:
- 建立聯結的物件,其中 Metaverse 物件會連結至新建立的匯出物件。
- 重新命名聯結的物件。
- 斷開 Metaverse 物件與預備物件之間的連結,進而建立分離的物件。
如果佈建要求同步處理引擎建立新的連接器物件,則 Metaverse 物件連結至的預備物件一律為匯出物件,因為該物件會尚未存在於連接的資料來源中。
如果佈建要求同步處理引擎分開聯結的物件,進而分離的物件,則會觸發解除佈建。 解除佈建程序會刪除此物件。
在解除佈建期間,刪除匯出物件並不會實際刪除此物件。 此物件會標示為 [已刪除] ,這表示物件上已預備刪除作業。
匯出屬性流程也會發生在輸出同步處理過程中,就類似於匯入屬性流程發生於輸入同步處理期間。 匯出屬性流程只會發生於聯結的 Metaverse 與匯出物件之間。
匯出程序
在匯出過程中,同步處理引擎會檢查連接器空間中所有標示為「擱置匯出」的匯出物件,然後將更新傳送到連接的資料來源。
同步處理引擎可以判斷匯出是否成功,但無法充分判斷身分識別管理程序是否完成。 其他程序永遠可以變更連接的資料來源中的物件。 因為同步處理引擎對於連接的資料來源沒有持續連線,所以無法只根據成功匯出通知,對連接的資料來源中的物件屬性進行假設。
例如,連接的資料來源中的程序可以將物件的屬性變回其原始值 (也就是說,連接的資料來源可以在同步處理引擎推送資料並成功套用於連接的資料來源之後,立即覆寫這些值)。
同步處理引擎會儲存有關每個預備物件的匯出和匯入狀態資訊。 自從上次匯出以後,如果在屬性包含清單中指定的屬性值已變更,則儲存匯入和匯出狀態可讓同步處理引擎做出適當的回應。 同步處理引擎會使用匯入程序來確認已匯出到連接的資料來源的屬性值。 如下圖所示,比較匯入和匯出的資訊,可讓同步處理引擎判斷匯出是否成功或是否需要重複執行。
例如,如果同步處理引擎將值為 5 的屬性 C 匯出至連接的資料來源,它會在匯出狀態記憶體中儲存 C=5。 此物件的每次額外匯出都會導致嘗試再度將 C=5 匯出到連接的資料來源,因為同步處理引擎假設此值尚未持續地套用至物件 (也就是說,除非最近從連接的資料來源匯入了不同的值)。 在物件匯入作業期間收到 C=5 時,就會清除匯出記憶體。
下一步
深入了解 Microsoft Entra Connect 同步處理設定。