标识和访问管理

管理与 ILM 2007 的 Active Directory 用户

John McGlinchey

 

一眼:

  • 了解 ILM 2007 中的元素
  • 设置和撤消
  • 生成的导入和导出一个规则的扩展名
  • 若要实现更改使用运行配置文件

内容

什么是 ILM?
ILM 元素
设置和撤消
导入和导出扩展
运行配置文件
将来

Microsoft 身份生命周期管理器 (ILM) 2007年是一个键的工具,使企业管理员用户、 计算机,和其他目录对象,使其在不同的目录和数据库之间同步。 可以与 LDAP SQL Server,以及其他数据库集成用户、 计算机、 组,和甚至 Active Directory 的 OU 结构。 属性可以来自不同的源、 合并到一个权威性的标识和提供返回所有数据源。 ILM,企业需要不设计为标识单个权威基础但而可以一组针对可以模仿进程的规则和过程的企业的集成不同的数据源的网格。

最常见的 ILM 使用情况包括多个活动目录,更新一个公共 Exchange 全球通讯簿 (GAL) 使用多个 Active Directory 域或林,并同步帐户之间或 LDAP 和 Active Directory LDAP 实现之间的同步。 我也有使用 ILM 从一个或多个活动目录迁移到新的域在新目录林中和操作系统和应用程序设置使用系统中心配置管理器 (SCCM)。

将关键概念和 ILM 的方法可以学习面向基础结构的有限的开发方法管理员体验的 uphill。 不只您必须知道一些有关 ILM 和开发 ILM 的扩展代码,还需要了解连接的数据源 (如 Active Directory、 Exchange,LDAP、 SQL Server 和等等。 这种复杂性需要分割成小的、 消耗各个部分是什么将尝试在本文中。

什么是 ILM?

ILM 2007 将标识管理和证书管理一起提供的标识和访问管理 (IDA) 模型的关键元素组合在一起。 标识管理的一部分 ILM,以前是已知的 MIIS (Microsoft 身份集成服务器) 以及之前的 MMS (Microsoft Meta-Directory 服务器),。 (证书管理部分的证书和智能卡的生命周期管理,不本文,但它可以标识管理的集成)。 标识管理可能有自己的一个标识危机时, 它不会有问题管理您的标识。

一个密钥的功能,IDA 与 ILM 的是其扩展性。 如果没有一种简单、 可单击的方法执行某些操作,您可以编写代码以扩展 ILM 的功能。 尽管某些简单的 ILM 实现根本不需要任何代码,大多数需要执行某种类型的设置用户帐户或组,这样您就可能发往编写一些代码。 不要担心,但。 向下的关键概念,并了解何时以及如何将您的代码播放 IDA 的大图片中后,ILM 置备代码是相当简单。

ILM 元素

与任何复杂的任务需要之前的深入了解重要概念。

元节和连接的目录 元节 (MV) 是只是一个数据库。 它是一个非常复杂的数据库,但仍只是一个数据库。 ILM 使用将 MV 存储的所有连接目录 (CD) 导入到的数据或从该 MV 导出传出的数据的配置。 警告 — — 不执行深入 MV 数据库。 并使用它永远不会影响。 不要尝试直接从 MV 数据库中运行报表或更改在它的任何内容。 您只是最终会破坏它。 (我说话此处的经验)。

管理代理 管理代理 (MA) 是用来定义 CD 该工具。 创建用于导入规则,并将数据导出到使用 MA CD 中将 MV 导入和导出规则。 此规则还定义了 MA 分配的属性和如何数据从中清除该 MV 一次它将从所有 CD 消失的。 TechNet 可下载的方案文档,可用于快速入门一旦您了解它的工作方式的规则集。 一旦您掌握了简单的情况下,然后可以使用 ILM 实现更复杂的解决方案涉及多个数据源、 复杂的数据操作和详细的规则。

MA 可以筛选出不需要进行更有效的连接的光盘中的数据。 渚嬪的方式  您不需要扫描的 Active Directory 中的每个 OU。 选择所需的 OU,可以进行扫描的已更改或新的对象快得多。 在连接 SQL Server 数据库,筛选出不必要的数据可以保存大量的时间时处理规则导入 (尽管了更有效的方法是使用 SQL Server 视图 MA 在第一个位置提供必要的数据)。

连接器空间导入,和导出 每个 MA 连接将 MV 通过镜像 CD 中的数据元素的一个唯一的连接器空间 (CS)。 数据然后移到或从该 CS 到将 MV 根据导入和导出规则。 在连接目录中创建新的对象是简单,CS 中创建连接器,该 CD,然后将该对象导出到 CD 上。

本示例在 图 1 所示的 MA 中连接到的 Active Directory 中。 这是可配置的最简便和最常用 MA。 图 2 显示了属性的和将 MV 超出的流动。 箭头定义数据流的方向。 请注意选中了不是所有属性,只被认为是实现数据所必需的流模型。 数据作为流向-除非导入或导出扩展与未更改。

fig01.gif

图 1 的管理代理连接 ILM 到连接目录,在这种情况下的 Active Directory,能够选择 特定组织单位。

fig02.gif

图 2 的属性流定义每个属性将在如何导入和导出的 ILM。

属性流,期间中,您可能会遇到正在导入多个 CD 中的属性。 如果该属性出现在多个一张光盘中,您可能需要决定哪些 CD 将影响该属性。 这称为属性优先。

加入并预测 加入到现有 MV 对象连接一个连接器空间中的项的方法。 连接规则的条件是完全了您。 如果您加入到该 MV 从数据库中的用户,可以使用员工编号或名称和数字的组合。 您需要使用的 CD,CS 中的将 MV 之间唯一的连接。 请记住必须是唯一的联接条件或联接规则将导致出错。 也就是说,ILM 是完全可扩展,并如果想要您可以编写代码以确定哪种联接将非唯一条目。

投影到将 MV 推送数据,从连接目录的连接的空间的方法。 涓烘  您需要创建一个投影规则的涉及单击几下鼠标 (参见 图 3 )。 设置,我们将得到每分钟,这意味着将从该 MV,将数据推送到该 CD 的 CS 并明确,这涉及多个几次鼠标单击。 这样的: 在"项目到"MV 您"提供出"将 MV。 您可以项目而无需编写代码,但提供,您必须将编写一些代码。 这并不说您不能实现不执行任何提供一个数据流。 如果所有对象已经存在,并且只是希望确保属性保持同步,您可能不需要任何代码。 只需配置所有导入和导出数据流程,并联接规则并转几乎很好。

fig03.gif

图 3 联接和投影规则用于定义对象如何与关联或创建 ILM。

一个 MA 可以有多个都有多个的联接条件联接规则,但只能有一个投影规则。

设置和撤消

图 4 中的,代码需要提供新的用户在 Active Directory 中的范例。 我们如何做算出我们需要创建一个新的用户? 在此特定情况下我们中的 R H / 系统中获得信息但它可能也只是有来自新用户的信息和设置为这些用户导入将 MV 的 MA 具有电子表格或文本的文件一样简单内容。 ILM 非常灵活,可以从各种来源导入数据。 现在,我们坚持到 Active Directory。 此处使用的代码示例取自 MIIS 2003 方案可以从下载" Microsoft ® 身份集成服务器 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 中所示为用户中, 创建一个新的连接器。 如果用户不存在,已将 Active Directory,这意味着 ILM 不必查询本身只是连接到活动目录,MA 的 CS Active Directory 的在 CS 中从一个连接器。 导出规则定义为流到 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,不能在单个的 MA。 代码运行时的 MA 行程上提供了需要的内容但设置不是 MA 配置的一部分 ; 它总体 ILM 标识管理器配置的一部分如 图 6 所示。 当 MA 运行期间遇到错误暂时禁用从而隔离该测试,以只导入设置和导出规则和不提供代码,一个很好的故障排除步骤。 一旦您确认您导入正在导出规则,然后您可以开始设置代码,以查找问题的疑难解答。

fig06.gif

图 6 使用定义提供一个自定义规则扩展

撤消是断开该 MV 对象的过程。 有三个选项用于指定对象的状态:

  1. 使对象的"断电器"表示该对象不再联接,但它将不从光盘中删除。 如果它不筛选出,也可能马上回来,CS 中下一次导入设置的结束。
  2. 使对象的"显式断电器"同样意味着对象不再联接和不会从光盘,移除,但在这种情况下它还标记为不被 reimported。
  3. 从光盘中删除对象意味着完全。 导出运行,该对象将被删除从 CS 和 CD。

小心非常 deprovisioning 选项时,这可能是一个主要头疼如果没有正确完成并,甚至更糟糕,您可能会破坏数据,通过选择错误选项。 始终执行您的测试在实验室环境具有很好的备份中。

导入和导出扩展

某些时候,您可能会发现需要做 CD 的数据导入或将导出 (如合并在一起以形成一个完整的名称的多个属性或连接到窗体的电子邮件地址的域名用户名时。 发生这种情况时就可以开始构建一个规则为扩展是实质上是复杂的更改的代码。 导入,扩展名为规则意味着您可以采取多个 CD 属性作为单个 MV 属性的输入。 在导出,这意味着可以多个 MV 属性导入单个 CD 属性。 请注意该公共元素的源的数据流可以使用多个属性,但数据流的目标必须是单个属性。 再次,这是相当简单据代码放在生成 DLL 需要被放入扩展文件夹。 然后,使用该名称在定义规则扩展 MA 配置中的 (见 图 7 ) 以及为内部代码以定义获取实现的规则。

fig07.gif

图 7,则 可以自定义属性流规则扩展 writtenfor 复杂属性 fl ows。

运行配置文件

后 MA 设置为导入和导出数据必须告诉 ILM 导入、 导出,或同步运行。 您可以涓烘  MA 配置中的这些操作的每个设置运行的配置文件,然后将其中的一个运行一次获取从 CV MV 到 CD,然后从 MV 到 CD 的 CV 为适当的步骤中移动数据 (请参见 图 8 )。

fig09.gif

图 8 数据流向来自连接目录在 metaversethrough 连接器空间并再次从

该操作可以是完全,检查所有内容,或检查仅那些已更改的对象的增量。 这样一个完整导入 ILM 将检查在连接目录中的每个对象,并导入所有内容到连接器空间。 一个完整的导出会反转,从 CS 到 CD。 增量同步同步已更改的对象时,完全同步将同步到每个已连接的对象将 MV 中每个对象。 启用,设置在同步过程中获取触发,并决定通过检查该 CS 该 CD 的连接目录中是否需要新的连接器。

若要进行一个配置文件您的 MA 右键单击,选择运行,然后选择一个配置文件。 多个步骤可以合并到一个配置文件中。 渚嬪的方式  我通常设置每个 MA,以及"增量导入和增量同步"上一个"完全导入和完全同步"的配置文件和"导出"配置文件。 配置文件也可以运行命令文件使用一个免费称为 runMA.vbs 可用的工具,从下载在前面提到的方案中。

从批处理脚本内 Windows 计划程序服务,ILM MA 配置文件是通常按顺序运行。 是,它看上去像一个 throwback,但内容可能在将来更改,但现在您应该只是构建一个运行使用 runMA 您 MA 的简单脚本。 大多数的目录数据并不更改实时仍。 根据要使内容保持最新运行此脚本使用 ILM 服务器上的任务计划程序。 请记住 MA 可能需要在特定的顺序根据您的数据同步模型中运行并可以对网络使用率有重大影响,因此平衡需要数据同步的冲突可能需要在网络上对最小的影响。

将来

ILM 将会获得在不久的将来的升级版本将一个新的、 基于 Web 的界面,工作流的集成提供使用基于 Web 的用户界面) 和另一个名称更改。 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 主题有关的日志。 转到图中。