身分識別與存取管理

管理與 ILM 2007 的 Active Directory 使用者

John McGlinchey

 

一眼:

  • 了解 ILM 2007 中的項目
  • 提供與 deprovisioning
  • 建置規則副檔名為匯入及匯出
  • 若要實作變更使用執行的設定檔

內容

ILM 是什麼?
ILM 項目
提供與 Deprovisioning
匯入和匯出延伸
執行設定檔
[未來

Microsoft 識別生命週期管理員 (ILM) 2007年是一個機碼的工具,可讓企業系統管理員將使用者、 電腦和其他的目錄物件在不同的目錄和資料庫之間的同步處理。 使用者、 電腦、 群組及甚至 OU 結構的 Active Directory 可以整合 LDAP、 SQL Server,與其他資料庫。 屬性可來自不同來源、 合併到一個授權的身分,並提供回給所有的資料來源。 ILM,企業不需要設計的識別以單一授權為基礎但而可以整合不同資料來源的網狀結構一組自訂可以模仿處理程序的規則與該企業的程序。

某些最常見的 ILM 使用案例包括同步處理多個使用中的目錄,更新一個一般 Exchange 全域通訊清單 (GAL) 使用多個 Active Directory 網域或樹系,並同步處理之間或 LDAP] 與 [Active Directory LDAP 實作之間的帳戶。 我也使用 ILM 將從一或多個使用中的目錄遷移到新網域成為新樹系中以及作業系統和應用程式提供使用系統中心組態管理員] (SCCM)。

ILM 的方法與主要概念,可以是學習經驗有限的開發實用知識與基礎結構為導向的系統管理員的 uphill。 您也需要瞭解 Active Directory、 Exchange,LDAP,SQL Server,和等等連接的資料來源不只執行您需要知道的東西 ILM 和開發 ILM 擴充程式碼的相關。 這種複雜性需要切割成小型的、 可消耗的、 項目是什麼我會試著在這份文件中。

ILM 是什麼?

ILM 2007 結合了身分識別管理] 及 [憑證管理一起提供的識別和存取管理 (IDA) 模型的索引鍵項目。 以 MIIS (Microsoft 識別整合伺服器),以及之前的 MMS (Microsoft Meta-Directory 伺服器),先前已已知 ILM 身分識別管理部分。 (憑證管理部分管理憑證和智慧卡的週期所在不涵蓋此的文件中],但它可以識別管理與整合)。 身分識別管理可能有自己的一個識別危機時, 沒有管理您識別有問題。

一索引鍵的功能與 ILM IDA,就是其擴充性。 如果沒有一個簡單且可按式的方法來做某件事,您可以撰寫程式碼來擴充 ILM 的功能。 雖然一些簡單的 ILM 實作根本不需要任何程式碼,最需要某種佈建使用者帳戶或群組,因此您可能目的地撰寫一些程式碼。 請不要擔心,不過。 一旦您將關鍵概念下同時了解的 IDA 大圖片至何時及如何播放您的程式碼,是相當直接了當 ILM 佈建程式碼。

ILM 項目

如同任何複雜的任務,您需要之前中深入瞭解重要的概念。

連線的目錄與 Metaverse metaverse (MV) 是只要資料庫。 它是一個相當複雜的資料庫但仍然只是一個資料庫。 ILM 會使用 [MV,來儲存所有連線目錄 (CD),匯入資料,或從 [MV 匯出資料時的設定。 警告 — 並不會深入 MV 資料庫。 並不會與它的狀況。 請勿嘗試直接從 MV 資料庫執行報告,或變更的任何項目。 您只是最後會損毀它。 (我說這裡從經驗)。

管理代理程式 管理代理程式 (MAs) 是在您用來定義 CD 的工具。 您可以建立匯入的規則,然後匯出成從 CD,使用 [麻州將 MV 的資料匯入和匯出規則。 此規則也會定義的麻州提供的屬性和如何資料從清除 [MV 一次它從所有的 CD 中消失。 TechNet 有可下載的案例文件,而且規則集您可以使用一旦您了解它所有的運作方式快速入門]。 一旦你已經精通 「 簡單案例,然後更複雜的解決方案涉及許多的資料來源、 複雜的資料操作和詳細的規則可以使用 ILM 來實作。

mAs 可以篩選出從光碟片不需要為了要讓連線更有效率的資料。 就例如您可能不必掃描的 Active Directory 中的每個 OU。 選取所需的 OU,可以讓掃描變更或新增物件快得多。 在連線的 SQL Server 資料庫中篩選出不必要的資料可以節省很多時處理規則匯入 (雖然的更有效率的方法是使用 SQL Server 檢視的 [麻州提供必要的資料) 的時間。

連接器空間匯入],和匯出 每個麻州連接 [MV 透過鏡射 CD 中的資料元素是唯一的連接器空間 (CS)。 資料是然後移至或來自 [CS,以根據匯入及匯出規則,將 MV。 在連線目錄中建立新物件是簡單成該光碟中 [CS 中建立連接器的再匯出到 CD 的該物件。

圖 1 顯示為 MA 範例連線到的 Active Directory。 這是您可以設定最簡單且最常見麻州。 圖 2 ] 顯示進出,MV 會傳送的屬性。 箭號,定義資料流程的方向。 請注意已選取不是所有屬性,只是被視為實作資料所需的流程模型。 資料為佈滿-不與任何變更,除非有副檔名為匯入或匯出的檔案。

fig01.gif

[圖 1 的管理代理程式連線 ILM 到連線目錄,在這種情況下的使用中的目錄,能夠選取 特定組織單位。

fig02.gif

[圖 2] 的屬性流程定義如何每個屬性將會匯入和匯出超出 ILM。

在屬性的流程期間可能會有的屬性,從多個 CD 匯入。 如果屬性發生在多個一個 CD,您可能需要決定哪些 CD 會提供屬性。 這就稱為屬性優先順序。

加入並將往回投影 加入連接在連接器空間中的項目至現有的 MV 物件的方法。 加入規則的準則是完全向上您。 如果您加入到 [MV 從資料庫的使用者,您可能會使用員工編號] 或 [名稱] 和 [數字的某些組合。 您要使用項目,讓 CD 與 [CS] 內 [MV 之間唯一的連接。 請記住聯結條件必須是唯一的或聯結] 規則會造成錯誤。 話雖如此,ILM 是完全可擴充,而如果您要您可以編寫程式碼來決定哪一個非唯一的項目加入。

將往回投影方式將資料到 [MV 推從連線目錄的連線的空間。 若要執行此動作您需要建立投射規則 (見 [ 圖 3 ]),這牽涉到只要按幾下滑鼠。 佈建,我們將會在一分鐘的時間表示從 MV,發送至 CD 的 [CS 的資料,這絕對牽涉到多個按一下滑鼠。 想像這種方式: 您 「 專案到 「 您 」 提供出"[MV 與 MV。 您可以在無須撰寫程式碼,但提供專案,您必須撰寫一些程式碼。 不說您不能實作並不會執行任何提供資料流。 如果您的物件的所有已存在,且您只想確定屬性保持同步,您可能不需要任何程式碼。 只設定所有匯入及匯出資料流,並聯結規則和您在幾乎 OK。

fig03.gif

[圖 3 聯結和投影的規則用來定義如何物件相關聯,或在 ILM。

一個麻州可以有多個聯結規則,每個都有多個的聯結準則,但是只能有一個投影規則。

提供與 Deprovisioning

[圖 4 ] 中的程式碼會顯示您需要提供新的使用者在 Active Directory 中的範例。 我們如何做知道我們需要建立新的使用者? 在這特定種情況下我們從一個 H/R 的系統中取得資訊,但它可能只也有來自一樣簡單,為新使用者的資訊與設定這些使用者匯入 [MV 的麻州試算表或文字檔案]。 ILM 非常具有彈性,可以從各種來源匯入資料。 現在,我們停 Active Directory。 在這裡使用範例程式碼被衍生自 MIIS 2003 案例可以從下載" Microsoft ® 識別整合 Server 2003 案例."

[圖 4 佈建連線目錄中的新物件

''   Copyright (c) Microsoft Corporation.  All rights reserved.

Imports Microsoft.MetadirectoryServices
Imports System.Xml

Public Class MVProvision
    Implements IMVSynchronization

    '
    ' These two variables are initialized based on a xml configuration file
    ' The values are read during the Initialize() method of the Rules Extension
    '
    Dim fabrikamUsersContainer As String
    Dim fabrikamDisabledUsersContainer As String

    '
    ' Number of retries on name conflict
    '
    Private Const RETRY_NUM_LIMIT = 1000

    Public Sub Provision( _
        ByVal mventry As MVEntry) _
        Implements IMVSynchronization.Provision

        Dim employeeStatus As String
        Dim ADMA As ConnectedMA
        Dim dn As ReferenceValue
        Dim container As String
        Dim rdn As String
        Dim myConnector As CSEntry
        Dim csentry As CSEntry
        Dim numADConnectors As Integer
        Dim successful As Boolean = False
        Dim cnForObject As String
        Dim numberToAppend As Integer = 1

        If Not mventry.ObjectType.Equals("person") Then
            Exit Sub
        End If

        If Not mventry("cn").IsPresent Then
            Throw New UnexpectedDataException("cn does not exist on MV bject")
        End If

        ADMA = mventry.ConnectedMAs("ADMA")
        '
        ' Get the cn attribute from MV which will be used to configure CS dn
        '
        cnForObject = mventry("cn").Value.ToString()

        '
        ' Based on the value of "employeeStatus" determine the container in AD
        '
        employeeStatus = mventry("employeeStatus").Value.ToLower
        Select Case employeeStatus
            Case "active"
                container = UsersContainer
            Case "inactive"
                container = DisabledUsersContainer
            Case Else
                '
                ' employeeStatus must be active or inactive to be valid
                ' any other case is an error condition for this object. 
                ' Throw an exception to abort this object's synchronization. 
                '
                Throw New UnexpectedDataException("employeeStatus=" + employeeStatus.ToString)
        End Select

        Do
            Try

                ' Based on the value of "cn" determine the RDN in AD
                rdn = "CN=" & cnForObject

                ' Now construct the DN based on RDN and Container
                dn = ADMA.EscapeDNComponent(rdn).Concat(container)

                '
                ' If there is no connector present, add a new AD connector
                ' and call a subroutine to set the initial values on the CS Object
                '
                numADConnectors = ADMA.Connectors.Count
                If 0 = numADConnectors Then

                    csentry = ADMA.Connectors.StartNewConnector("user")
                    csentry.DN = dn
                    SetInitialValues(csentry, mventry)
                    csentry.CommitNewConnector()
                ElseIf 1 = numADConnectors Then
                    '
                    ' check if the connector has a different DN and rename if necessary
                    ' First get the connector
                    '
                    myConnector = ADMA.Connectors.ByIndex(0)

                    '
                    ' MMS will rename/move if different, if not nothing will happen
                    '
                    myConnector.DN = dn
                Else
                    Throw New UnexpectedDataException("multiple AD connectors:" + 
                      numADConnectors.ToString)
                End If

                successful = True

            Catch ex As ObjectAlreadyExistsException

                '
                ' There is a duplicate object in the target AD, 
                ' change the cn accordingly to avoid conflict
                '
                cnForObject = mventry("cn").Value & " (" _
                                & numberToAppend.ToString & ")"
                numberToAppend = numberToAppend + 1

                If numberToAppend > RETRY_NUM_LIMIT Then
                    Throw New UnexpectedDataException( _
                        "Retry for " & mventry("cn").Value _
                        & " exceeds limit " & numberToAppend.ToString)
                End If

            Finally ' Add cleanup code in the Finally section

            End Try

        Loop While Not successful

    End Sub
    ' Set Values on a NEW provisioned CS Entry
    Private Sub SetInitialValues( _
    ByRef csentry As CSEntry, _
    ByVal mventry As MVEntry)

        csentry("unicodepwd").Values.Add(mventry("employeeID").Value)

    End Sub

    Public Function ShouldDeleteFromMV( _
        ByVal csentry As CSEntry, _
        ByVal mventry As MVEntry) _
        As Boolean Implements IMVSynchronization.ShouldDeleteFromMV

        Throw New EntryPointNotImplementedException
    End Function

    Public Sub Initialize() Implements IMVSynchronization.Initialize

        Const SCENARIO_XML_CONFIG = "\simpleprov.xml"

        Dim config As XmlDocument = New XmlDocument
        Dim dir As String = Utils.ExtensionsDirectory()
        config.Load(dir + SCENARIO_XML_CONFIG)

        Dim rnode As XmlNode = config.SelectSingleNode(
           "rules-extension-properties/account-provisioning/container")
        Dim node As XmlNode = rnode.SelectSingleNode("root")
        Dim rootContainer As String = node.InnerText

        node = rnode.SelectSingleNode("enabled-users")
        UsersContainer = node.InnerText + "," + rootContainer

        node = rnode.SelectSingleNode("disabled-users")
        DisabledUsersContainer = node.InnerText + "," + rootContainer

    End Sub

    Public Sub Terminate() Implements IMVSynchronization.Terminate
    End Sub
End Class

在本質上程式碼會檢查使用者是否已經存在。 如果使用者不存在,新的連接器是為使用者,建立,如 [圖 5 ] 所示。 如果使用者不存在,就已經有從 CS,表示 ILM 不需要查詢本身只是連線到 Active Directory,麻州的 CS Active Directory 中的 Active Directory 連接器。 匯出規則會定義要傳送到 Active Directory,因此提供的程式碼需要只建立連接器,並讓執行其餘的流程規則的資料。 要記住,如果您執行推入資料中提供程式碼,只連接器建立時,不是在每個的同步處理循環與設定使用流程規則的資料流推入資料的一回事。

圖 5] 建立新的連接器

'
                ' If there is no connector present, add a new AD connector
                ' and call a subroutine to set the initial values on the CS Object
                '
                numADConnectors = ADMA.Connectors.Count
                If 0 = numADConnectors Then

                    csentry = ADMA.Connectors.StartNewConnector("user")
                    csentry.DN = dn
                    SetInitialValues(csentry, mventry)
                    csentry.CommitNewConnector()

                ElseIf 1 = numADConnectors Then
                    '
                    ' check if the connector has a different DN and rename if necesarry
                    ' First get the connector
                    '
                    myConnector = ADMA.Connectors.ByIndex(0)

                    '
                    ' MMS will rename/move if different, if not nothing will happen
                    '
                    myConnector.DN = dn
                Else
                    Throw New UnexpectedDataException("multiple AD connectors:" + 
                      numADConnectors.ToString)
                End If

                successful = True

若要設定佈建,您必須採取您提供的程式碼,並使用 Visual Studio 建置成 DLL。 您提供給該 DLL 的名稱並不會多的事,但您需要將 DLL 放入 ILM 的安裝位置的 [延伸] 資料夾,然後使用它的名稱設定佈建。 要記住是該佈建上將 MV,不是在個別的 MAs 上發生。 程式碼執行時的麻州往返透過需要能提供的項目而佈建不會麻州設定的一部份 ; 如 [圖 6 ] 所示,它會是 [整體 ILM 身份管理員] 設定中的一部份。 一個好的疑難排解步驟時麻州執行期間發生錯誤要暫時停用 [佈建藉此區隔測試只匯入和匯出規則] 和 [不您提供的程式碼。 一旦您確認匯入正在匯出規則,然後您可以開始疑難排解您佈建的程式碼,找出問題。

fig06.gif

[圖 6 使用來定義指定一個自訂規則副檔名

deprovisioning 是從 [MV 中斷連線的物件的程序。 有三個選項來指定物件的狀態:

  1. 讓物件"斷路器 」 表示物件已不再加入,但則不會移除從光碟片。 如果它不會被篩選出來,可能也會馬上回來 [CS] 中,在下一個匯入設定的結束。
  2. 同樣地使一個物件的 「 明確斷路器 」 表示物件已不再加入和不會從 CD,移除,但在這種情況下它時也標示不 reimported。
  3. 從光碟中刪除物件表示完全。 物件會在下一個匯出執行刪除從 [CS] 和 [CD。

要非常小心為您 deprovisioning 的選擇,這可能是主要的麻煩,如果沒有正確地完成和,更糟,您可能摧毀資料選取 [錯誤] 選項。 永遠執行您的測試在實驗室環境具有良好的備份中。

匯入和匯出延伸

有些時候您可能會發現需要執行一些 CD 資料匯入或匯出像合併多個屬性在一起以形成完整的名稱,或以電子郵件地址的網域名稱與連接的使用者名稱時。 在這種情況的時候開始建立一個規則] 副檔名即基本上可讓複雜的變更的程式碼。 在匯入時,副檔名為規則表示您可以採用多個 CD 屬性做為單一的 MV 屬性的輸入。 在匯出,這表示您可以將多個 MV 屬性帶到單一的 CD 屬性。 請注意在一般的項目在資料流的來源可以使用多個屬性,但資料流程的目標必須是單一屬性。 同樣地,這是很簡單就進入程式碼,產生 DLL 必須放置在 [副檔名] 資料夾。 接著使用該名稱定義您的規則擴充功能,麻州組態內 (請參閱 [ 圖 7 ]) 以及在程式碼以定義取得實作的規則。

fig07.gif

[圖 7 可以自訂屬性流程規則延伸 writtenfor 複雜屬性 fl ows。

執行設定檔

一旦您有 MAs 設為匯入和匯出資料時,您必須告訴 ILM 執行匯入、 匯出或同步處理。 要執行這項操作,您設定 [麻州組態內這些作業的每個中的 [執行的設定檔,然後在取得從 CV MV 到 CD,然後從 MV 到 CD 的履歷表,適當的步驟之間移動資料的時間執行其中 (請參閱 [ 圖 8 ])。

fig09.gif

圖 8 metaversethrough 連接器連線目錄從資料流量空間並再回來

作業可以是完整的檢查所有項目,或是差異的檢查已變更的物件。 因此完整的匯入,ILM 會檢查連線目錄中的每個物件並匯入所有項目到連接器空間。 完整匯出並反向,從 CS 到 CD。 差異同步同步資料變更的物件時,完整的同步處理會同步 [MV,每個連線的物件中每個物件。 當啟用,佈建取得觸發同步期間,並決定新的連接器是否所需連接的目錄中的檢查 [CS 成該光碟。

若要執行設定檔,您在上一個麻州按一下滑鼠右鍵,選取 [執行],然後選擇設定檔。 多個步驟可以合併成單一設定檔。 就例如我通常設定完整匯入 & 完全同步] 設定檔,每個麻州以及差異匯入 & 差異同步] 和 [匯出] 的設定檔。 設定檔也可以是從執行使用免費稱為 runMA.vbs 可用工具的命令檔下載先前所述案例中。

ILM 麻州設定檔通常是從批次指令碼,Windows 排程器服務中依序執行。 是,它看起來像是一個的 throwback,但還是可能在未來變更項目,現在您應該只建置簡單指令碼以執行使用 runMA 您 MAs。 大部分的目錄資料不會變更即時還是。 使用工作排程器 ILM 伺服器上視需要讓事情保持在最新狀態,通常執行此指令碼。 請記住 MAs 可能必須要以特定順序,根據您的資料同步處理模型執行可以對網路使用度有重大的影響,因此之間取得平衡的一個最小的影響,在網路上可能的衝突需求的資料同步處理需求。

[未來

ILM 將會收到升級在不久的將來,將一個新的 Web 介面,而工作流程的整合提供使用 Web 為基礎的 UI,和另一個名稱變更。 ILM 會被採用成 Forefront 家族的安全性和存取管理產品,並將很快為已知為 Forefront 識別管理員 (FIM) 2010年。 它會取得接近釋放,查看如何套用在下一個層級的識別與存取管理此文件中所學課程時尋找文件這裡 FIM 2010。

John McGlinchey ,MCP,MCSA,MCSE 是 Microsoft 顧問服務的基礎 Philadelphia,PA 區內專注於識別與存取管理為資深的顧問。 John 領域電腦業界包括超過 20 年的諮詢經驗中有多個 30 年的經驗。 在他部落格 blogs.technet.com/johnmcg/他是在 [IDAGUYS 的其中一個 blogs.technet.com/idaguys/誰定期 IDA 主題的部落格。 請圖。