Gerenciamento de identidades e acesso

Gerenciando usuários do Active Directory com o ILM 2007

John McGlinchey

 

Em uma visão geral:

  • Noções básicas sobre os elementos do ILM 2007
  • Provisionamento e desprovisionamento automático
  • Criação de uma extensão de regras para importação e exportação
  • Usar perfis de execução para implementar alterações

Conteúdo

O que É ILM?
Elementos do ILM
Provisionamento e Deprovisioning (desprovisionamento)
Importação e exportação extensões
Executar perfis
O futuro

Gerenciador de ciclo de vida da identidade (ILM) 2007 é uma ferramenta chave que permite que administradores de empresa para manter os usuários, computadores e outros objetos de diretório em sincronia entre diversos diretórios e bancos de dados. Os usuários, computadores, grupos e até mesmo a estrutura OU do Active Directory podem ser integrados com o LDAP, SQL Server e outros bancos de dados. Atributos podem ser extraídos fontes diferentes, mesclados em uma identidade autoritativa e fornecidos novamente para todas as fontes de dados. Com o ILM, uma empresa não precisa criar uma base com autoridade única para identidade mas em vez disso pode integrar uma malha de fontes de dados diferentes com um conjunto personalizado de regras que pode imitar os processos e procedimentos de que empresa.

Alguns dos cenários de uso mais comuns do ILM incluem sincronizando vários diretórios Active, atualizando um comuns Exchange GAL lista de endereços global () usando várias florestas ou domínios do Active Directory e sincronizar contas entre implementações LDAP ou entre LDAP e o Active Directory. Também usei ILM para migrar de um ou mais diretórios Active para um novo domínio em uma nova floresta e para sistema operacional e configuração de aplicativo usando o SCCM (System Center Configuration Manager).

Os principais conceitos e métodos do ILM podem ser um uphill aprendizado experiência para os administradores orientado a infra-estrutura com experiência de desenvolvimento limitado. Não somente você precise saber algo sobre ILM e desenvolvimento ILM extensão de código, você também precisará compreender as fontes de dados conectado como o Active Directory, Exchange, LDAP, SQL Server e assim por diante. Esse tipo de complexidade precisa ser dividido em partes pequenas, consumíveis, que é o que eu irá tentar fazer neste artigo.

O que É ILM?

ILM 2007 combina gerenciamento de identidades e gerenciamento de certificados que juntos oferecem os principais elementos do modelo de identidade e gerenciamento de acesso (IDA). A parte de gerenciamento de identidade do ILM era conhecida anteriormente como o MIIS (Microsoft Identity Integration Server) e, antes disso, o MMS (Microsoft Meta-Directory Server). (A parte de gerenciamento de certificado, onde o ciclo de vida de certificados e cartões inteligentes são gerenciadas, não ser abordada neste artigo, mas pode ser integrado com o gerenciamento de identidade). Enquanto o gerenciamento de identidades pode tiveram uma crise de identidade de si próprio, não é necessário um problema de gerenciamento de suas identidades.

Um recurso chave do IDA com ILM é sua extensibilidade. Se não houver uma maneira simples, clicável de fazer algo, você pode escrever código para estender a funcionalidade do ILM. Embora algumas implementações ILM simples não precisa qualquer código todo, mais precisam fazer algum tipo de provisionamento de contas de usuário ou grupos, portanto, você provavelmente está destinado a escrever alguns códigos. Não se preocupe, embora. ILM provisionamento código é muito simples depois dos principais conceitos para baixo e compreender quando e como seu código é executado em uma visão geral dos IDA.

Elementos do ILM

Como com qualquer tarefa complexa, você precisará compreender os conceitos importantes antes de mergulhar.

o metaverso e diretórios conectados O metaverse (MV) é simplesmente um banco de dados. É um banco de dados muito complexo, mas ainda apenas um banco de dados. ILM usa a MV para armazenar a configuração de todos os conectados diretórios (CDs) que importar dados ou exportar dados fora da MV. Ser avisado — não aprofundar no banco de dados MV. E nunca confusão com ele. Não tente executar relatórios diretamente do banco de dados MV ou alterar nada nela. Apenas você acabará corrompendo-lo. (Eu falo aqui com a experiência.)

agentes de gerenciamento Agentes de gerenciamento (MAs) são as ferramentas usadas para definir CDs. Você pode criar uma regra para importar e exportar dados para a MV de um CD usando a MA importar e exportar regras. Essa regra também define qual MA contribui que atributo e como dados são impedidos da MV uma vez ela desaparece de todos os CDs. TechNet tem documentos de cenário para download e conjuntos de regras que você pode usar para começar rapidamente uma vez que você entender como tudo funciona. Depois que você dominou cenários simples, em seguida, soluções mais complexas que envolvem várias fontes de dados, manipulações de dados complexos e regras detalhadas podem ser implementadas usando o ILM.

MAs pode filtrar dados a partir do CD que não é necessário para fazer a conexão mais eficiente. Por exemplo, talvez você não precise examinar cada OU em um Active Directory. Selecionar somente as OUs necessárias pode tornar procurando alterados ou novos objetos muito mais rápidos. Em um banco de dados conectado do SQL Server, a filtragem de dados desnecessários pode economizar tempo quando o processamento importar regras (embora seja um método ainda mais eficiente usar um modo de exibição SQL Server para fornecer somente os dados necessários para a MA em primeiro lugar).

espaço do conector, importar e exportando Cada MA conecta o MV através de um espaço de conector exclusivo (CS) que espelha os elementos de dados do CD. Dados, em seguida, são movidos para ou de CS para MV baseado nas regras de importação e exportação. Criando um novo objeto em um diretório conectado é uma simples questão de criar um conector em CS para esse CD e exportar esse objeto para o CD.

O exemplo na Figura 1 mostra um MA conectado a um Active Directory. Este é a MA mais fácil e mais comuns que pode ser configurada. a Figura 2 mostra os atributos que estão fluindo de e para a MV. As setas de definem a direção do fluxo de dados. Observe que nem todos os atributos são selecionados, modelo de fluxo apenas aquelas que são consideradas necessárias para implementar os dados. Os dados de fluxo como - é sem alterações, a menos que haja uma extensão de importação ou exportação.

fig01.gif

Figura 1 que um agente de gerenciamento conecta ILM em um diretório conectado, nesse caso, um Active Directory, a capacidade de selecionar específico em organizacional unidades.

fig02.gif

Figura 2 fluxo do atributo define como cada atributo irá importar e exportar do ILM.

Durante a fluxos de atributo, você pode se deparar com um atributo que está sendo importado de vários CDs. Se o atributo ocorre em mais de um CD, talvez você precise decidir qual CD contribuirá o atributo. Isso é chamado precedência de atributo.

ingressando e Projetando Ingressando significa conectando-se uma entrada em um espaço de conector a um objeto de MV existente. Os critérios para a regra de associação são totalmente para você. Se você está ingressando usuários de um banco de dados para a MV, você poderá usar os números de funcionários ou alguma combinação de nomes e números. Você precisará usar algo que faz uma conexão exclusiva entre o CD e MV dentro CS. Lembre-se que os critérios de união devem ser exclusivos ou a regra de associação causará um erro. Dito isso, ILM é totalmente extensível e se você quiser, você poderia escrever código para decidir quais as entradas não-exclusivos para ingressar.

Projetando significa enviando dados para a MV de espaço de conexão do Directory um conectado. Para fazer isso, você precisará criar uma projeção regra (veja a Figura 3 ), que envolve apenas alguns cliques do mouse. Provisionamento, que teremos a em um minuto, significa que para envio de dados em CS de um CD da MV e isso definitivamente envolve mais de alguns cliques do mouse. Pense desta maneira: você "projeto em provisão"A MV e você"saída", da MV. Você pode projeto sem escrever código, mas ao provisionar, você precisará escrever algum código. É por isso não quer para dizer que não é possível implementar um fluxo de dados que não faz qualquer configuração. Se todos os objetos já existem e você desejar apenas verifique se que os atributos permanecem em sincronia, qualquer código não pode ser necessário. Basta configurar todos os as importação e exportação fluxos de dados e regras de associação e você está quase boa ir.

fig03.gif

Figura 3 as regras de associação e projeção são usadas para definir como objetos associados ou criado no ILM.

Uma MA pode ter várias regras de associação, cada um com vários critérios de associação, mas só pode haver uma regra de projeção.

Provisionamento e Deprovisioning (desprovisionamento)

O código na Figura 4 mostra um exemplo de que precisa para configurar um novo usuário no Active Directory. Como podemos descobrir que precisávamos criar um novo usuário? Nesse caso específico, obtivemos as informações de um sistema H/R, mas ele pode muito bem provenientes de algo simples, como um arquivo de texto ou planilha com informações de novos usuários e uma MA configurado para importar esses usuários a MV. ILM é muito flexível e pode importar dados de uma variedade de fontes. Por enquanto, vamos usar para o Active Directory. O código de exemplo usado aqui é derivado do MIIS 2003 cenários disponíveis para download no" Cenários do Microsoft ® Identity Integration Server 2003."

Figura 4 configuração novos objetos em diretórios conectados

''   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

Em essência, o código verifica para ver se um usuário já existe. Se o usuário não existir, um novo conector será criado para o usuário, como mostrado na Figura 5 . Se o usuário existir, já deve haver um conector do Active Directory em CS, que significa que o ILM não precisa consultar o Active Directory propriamente dito, apenas o CS de MA que se conecta ao Active Directory. A regra de exportação define os dados que é fluxo para o Active Directory, para que o código de provisionamento somente precisa criar o conector e permitir que as regras de fluxo de fazer o restante. Uma coisa a se lembrar, se você for enviar dados dentro de código, o provisionamento que dados são enviados somente quando o conector é criado, não em cada ciclo de sincronização como com fluxo de dados configurado com as regras de fluxo.

Figura 5 Criando um novo conector

'
                ' 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

Para configurar a configuração, você precisará levar seu código de provisionamento e usar o Visual Studio para criá-la em uma DLL. O nome que você atribui a DLL não muito questão, mas você precisa colocar a DLL na pasta extensões em que o ILM está instalado e em seguida, use seu nome para configurar o provisionamento. Uma coisa a se lembrar é que provisionamento acontece no MV, não em MAs individuais. O código executa sempre que um viagens MA sobre algo que precisa ser configurado, mas não é parte da configuração do MA provisionamento; é parte da configuração geral do ILM Identity Manager, conforme mostrado na Figura 6 . Uma boa solução etapa ao tendo erros durante a execução MA é desativar a configuração, assim, isolar o teste para a importação de apenas temporariamente e exportar regras e não o código de provisionamento. Depois de confirmar que a importação e exportação regras estão funcionando, você pode iniciar Solucionando problemas de seu código de provisionamento para localizar o problema.

fig06.gif

Figura 6 usando uma extensão de regras personalizadas para definir a configuração

Desprovisionamento é o processo de desconexão de um objeto da MV. Há três opções para especificar o status de um objeto:

  1. Tornar um objeto "separadora" significa que o objeto não está associado, mas ele não é removido do CD do. Se ele não é filtrado, pode ser bem end backup back direita em CS durante a importação próxima.
  2. Da mesma forma tornar um objeto "explícita separadora" significa o objeto não está associado e não é removido do CD, mas nesse caso ele também está marcado para não ser reimportadas.
  3. Excluir o objeto do CD significa exatamente isso. O objeto será excluído do CS e CD na próxima execução exportação.

Tenha muito cuidado com suas escolhas deprovisioning como isso pode ser uma dor de cabeça principal se não for feito corretamente e, ainda pior, você pode destruir dados selecionando a opção errada. Sempre fazer os testes em um ambiente de laboratório com bons backups.

Importação e exportação extensões

Em algum momento, você provavelmente encontrará a necessidade de fazer algo com dados CD enquanto estiver importando ou exportando, como mesclar vários atributos para formar um nome completo ou conectar o nome de usuário com nome de domínio para formar um endereço de email. Quando isso acontece, é hora de começar a criar uma extensão de regras, que é basicamente código que permite alterações complexas. Na importação, uma extensão de regras significa que você pode demorar vários atributos de CD como entrada para um único atributo MV. Na exportação, isso significa que você pode trazer atributo MV vários para um único atributo CD. Observe que o elemento comum aqui é que a origem do fluxo de dados pode usar vários atributos mas o destino do fluxo de dados deve ser um único atributo. Novamente, isso é bastante simples quanto que vai de código, e a DLL resultante precisará ser colocados na pasta extensões. Você, em seguida, usar esse nome na definição de sua extensão de regras de configuração MA (veja a Figura 7 ), bem como do código para definir a regra que é implementada.

fig07.gif

Figura 7 extensões de regras personalizadas atributo fluxo podem ser writtenfor atributo complexo fl ows.

Executar perfis

Uma vez que MAs configuradas para importar e exportar dados, você terá que informar ao ILM para executar uma importação, exportação ou uma sincronização. Para fazer isso, você configurar um perfil de execução para cada uma dessas operações dentro de configuração MA e, em seguida, executar um de cada vez para obter os dados para percorrer as etapas adequadas a partir do CD para VC a MV e depois da MV a VC para CD (veja a Figura 8 ).

fig09.gif

Figura 8 fluxos de dados de diretórios conectados metaversethrough o conector espaço e fazer check-out novamente.

As operações podem ser completo, que inspeciona tudo, ou delta, que inspeciona apenas os objetos que foram alterados. Portanto, para uma importação completa, ILM será inspecionar cada objeto no diretório conectado e importar tudo no espaço do conector. Uma exportação completa faz o inverso, de CS para CD. Uma sincronização completa sincronizará cada objeto no MV para cada objeto conectado, enquanto uma sincronização de delta sincroniza somente os objetos alterados. Quando ativado, provisionamento é acionado durante a sincronização e decide se novos conectores são necessárias em um diretório conectado inspecionando o CS para que CD.

Para executar um perfil, clique com o botão direito do mouse em uma MA, selecione Executar e, em seguida, escolha um perfil. Várias etapas podem ser combinadas em um único perfil. Por exemplo, eu normalmente configurar um perfil de "Total importar & total sincronizar" em cada MA, bem como "Delta importar & delta sincronizar" e "Exportar" perfis. Perfis podem também ser executados de arquivos de comando usando uma ferramenta chamada runMA.vbs, disponível gratuitamente download em cenários mencionados anteriormente.

Perfis do ILM MA normalmente são executados seqüencialmente de um script em lotes em que o serviço Agendador do Windows. Sim, ele parece um throwback, mas embora coisas provavelmente serão alterados no futuro, agora você deve criar um script simples para executar seus MAs usando runMA apenas. A maioria dos dados de diretório não alteram mesmo assim em tempo real. Use o Agendador de tarefas no servidor ILM para executar esse script geralmente necessário manter as coisas. Lembre-se de que MAs pode precisa ser executado em uma ordem específica com base no seu modelo de sincronização de dados e pode ter um impacto significativo na utilização da rede, assim, equilibrar a necessidade de sincronização de dados com a necessidade possivelmente conflitante de um impacto mínimo sobre a rede.

O futuro

ILM será ser obter uma atualização em um futuro próximo que trará uma interface de novo com base na Web, integração do fluxo de trabalho, provisionamento usando uma interface baseada na Web — e outra alteração de nome. ILM está sendo adotado na família de produtos de gerenciamento de acesso e segurança Forefront e logo será conhecido como Forefront Identity Manager (FIM) 2010. Procure artigos no FIM 2010 como ele obtém mais próximo do lançamento para ver como você pode aplicar as lições aprendidas neste artigo para o próximo nível de gerenciamento de identidades e acesso.

John McGlinchey , MCSE do MCP, MCSA, é um consultor sênior da Microsoft Consulting Services com base na área Philadelphia, PA, enfocando o gerenciamento de identidades e acesso. John tem mais de 30 anos de experiência no setor de computador, incluindo mais de 20 anos de experiência de consultoria. Blogs de he no blogs.technet.com/johnmcg/, e ele é um dos IDAGUYS no blogs.technet.com/idaguys/que regularmente blog sobre tópicos de IDA. Vai entender.