MIM 2016 Synchronization Services -> un moteur de synchronisation performant et économique

Bonjour à tous

Cet article a pour but de vous présenter la suite MIM 2016 et plus particulièrement le composant MIM 2016 Synchronization Services.

1. Vue d’ensemble de la solution MIM 2016 :
MIM 2016 est la solution de gestion des identités de Microsoft. Il s’agit en fait plus d’un ensemble de produits que d’une solution unique :
– MIM 2016 Synchronization Service est un moteur de synchronisation et le composant historique de cette solution. Ce produit était anciennement appelé MIIS 2003, ILM 2007 puis FIM 2010.
– MIM 2016 Service est un moteur de synchronisation, un portail web, un moteur de workflow (extensible avec MIMWALL).
– BHOLD est le composant de MIM 2016 qui permet de faire de l’attestation, de la certification et du SOD. Ce composant a été très peu déployé en entreprise.
– Le moteur de rapport de MIM 2016 s’appuie sur le produit Microsoft System Center Service Manager (SCSM).
– Le composant MIM 2016 Certificate Management (anciennement appelée Certificate Lifecycle Manager – CLM) est une solution de gestion de certificats et de cartes à puces virtuelles.
– Le composant Privilege Access Management (PAM) permet de gérer les groupes à fort privilèges avec la possibilité de définir des accès temporaires à ces groupes.

La suite MIM 2016 peut être achetée de 2 manières :
– Via une souscription à la licence Azure AD Premium P1 (locatif) pour chaque identité (utilisateur) de votre entreprise.
– Via l’achat de la suite.
Depuis avril 2015, MIM 2016 Synchronization Service 2016 (moteur de synchronisation uniquement) nécessite uniquement une licence Windows Server.
http://social.technet.microsoft.com/wiki/contents/articles/2487.how-to-license-fim-2010-and-mim-2016.aspx

2. Vue d’ensemble de MIM 2016 Synchronization Services
MIM 2016 Synchronization Services représente donc une solution très économique pour les entreprises qui souhaitent uniquement disposer d’un moteur de synchronisation.
Cette solution nécessite une base de données SQL Server et installe un service appelé Forefront Identity Manager Synchronization Service.
La configuration de l’outil MIM 2016 Synchronization Services est relativement simple et s’appuie sur une console unique appelée Synchronization Services Manager (MIIS.EXE).
Chaque système cible (un annuaire Active Directory, un fichier CSV, une base SQL Server) est synchronisé à l’aide de management agents. MIM 2016 Synchronization Services dispose de très nombreux connecteurs / management agent comme SQL Server, Oracle, AD LDS, AD, CSV, PowerShell. La liste complète est disponible à cette adresse :
https://docs.microsoft.com/fr-fr/microsoft-identity-manager/supported-management-agents

MIM 2016 Synchronisation Services dispose d’un référentiel des identités appelé Metaverse. Les entrées de la Metaverse ne sont accessibles qu’en lecture seule. Ce référentiel contient l’ensemble des identités :
– Person : contient les objets identités MIM 2016 Synchronization Services pour les objets utilisateurs et les contacts.
– Domain, Group, OrganizationalUnit, Printer : il s’agit des objets identités correspondant aux domaines, groupes, unités d’organisation et imprimantes d’Active Directory Domain Services (AD DS ou AD) et Active Directory Lightweight Directory Services (AD LDS).

Le moteur de synchronisation de MIM Services s’appuie sur celui du MIM 2016 Synchronization Services. Pour cette raison, la Metaverse contient des objets SynchronizationRule, ExpectedRuleEntry (ERE), DetectedRuleEntry (DRE). Ces objets permettent au MIM Agent (connecteur MIM Services) de synchroniser les règles du MIM Services dans la base du MIM 2016 Synchronization sous forme d’objets. Ces règles de synchronisation sont ensuite exécutées par le MIM 2016 Synchronization Services.

La Metaverse est extensible (au travers du Metaverse Designer de la console MIIS.EXE). Il est ainsi possible d’ajouter des attributs à la classe Person par exemple. On notera que la Metaverse ne permet pas d’ajouter d’attributs au format date.

3. Le moteur de synchronisation du MIM 2016 Synchronization Services :
Le schéma ci-dessous explique le fonctionnement du moteur de synchronisation MIM 2016 Synchronization Services.

Chaque système cible (SQL Server et Active Directory) dispose d’une copie en lecture seule appelée Connecteur Space dans la base de données SQL Server de MIM 2016 Synchronization Services. On notera qu’on peut définir un scope au niveau de l’outil pour répliquer qu’une partie d’un système cible. Il est par exemple possible d’inclure uniquement certaines OU ou certains attributs au niveau du management agent Active Directory.

Lors d’un Import, le contenu du système cible est copiée dans le connecteur space (copie à l’identique).
Lors d’un Export, le contenu du connecteur space est copiée dans le système cible (copie à l’identique).
Lors d’un Sync, les opérations suivantes sont effectuées :
– Filter/Delete : on fait un filtre entre le connecteur space et la Metaverse. Les objets filtrés sont chargés dans le connecteur space du management agent mais pas dans la Metaverse.
– Join : permet d’associer un objet du connecteur space avec un objet de la Metaverse selon une règle de jointure (exemple : ExtensionAttribute1 du connecteur space AD = EmployeeID de la Metaverse)
– Project : si l’objet n’est pas filtré et n’est pas joint, on peut le projeter du connecteur space vers la Metaverse (créer une entrée dans la Metaverse). Une Projection a toujours lieu du Connecteur space vers la Metaverse uniquement. Dans l’autre sens, c’est du Provision. Une projection crée un objet dans la Metaverse sans aucun attribut.
– Import Attributes Flow (IAF) : c’est pendant cette phase que les attributs des objets sont copiés dans la Metaverse. La console MIIS.EXE ne permet que de créer des règles IAF simples (copie de valeur). Les règles complexes nécessitent le développement d’une rule extension. Cette dernière est une DLL écrite en VBNET ou en C#.
– Provision : c’est l’inverse d’une projection. Cela crée un objet de la Metaverse vers un connecteur space. L’objet est créé sans attribut. La console MIIS.EXE ne permet pas de créer de règles de Provision. Il faut pour cela développer une Metaverse Rule. Cette dernière est une DLL qui doit être écrite en VBNET ou en C#.
– Export Attributes Flow (EAF) : c’est pendant cette phase que les attributs des objets sont copiés dans le connecteur space. La console MIIS.EXE ne permet que de créer des règles EAF simples (copie de valeur). Les règles complexes nécessitent le développement d’une rule extension. Cette dernière est une DLL écrite en VBNET ou en C#.

Dans notre exemple (importation des données d’une base SQL Server dans un annuaire Active Directory), les 6 opérations sont donc à effectuer :
– Import SQL
– Import Active Directory
– Synchronisation agent SQL
– Synchronisation agent AD
– Export sur management agent AD
– Import Full sur Management agent AD (pour mettre à jour le connecteur space).

Une « Projection rule » permet de définir comment MIM 2016 crée un objet dans la Metaverse depuis un objet dans un connecteur space.
Une Join rule permet de définir comment MIM 2016 associe un objet de la Metaverse avec un objet du connecteur space.

La procédure de configuration de MIM 2016 Synchronization Services est présentée en annexe de ce document.

https://blogs.msdn.microsoft.com/connector_space/2015/04/14/deprovisioning-in-depth-part-1-disconnectors/
https://blogs.msdn.microsoft.com/connector_space/2015/09/25/the-complete-synchronization-process-part-2-existing-user-synchronization/
https://blogs.msdn.microsoft.com/connector_space/2015/09/25/the-complete-synchronization-process-part-1-new-user-synchronization/

4. Ecriture d’une Rule Extension
MIM 2016 Synchronization Service permet de disposer de 2 types de règles de synchronisation :
– Direct : elles sont natives. C’est une copie de valeur.
– Advanced : elle permette d’effectuer une transformation. Cela nécessite de créer une DLL qui sera stockée dans le dossier d’installation de MIM (C:\Program Files\Microsoft Forefront Identity Manager\2010\Synchronization Service\Extensions).

Pour créer une règle de synchronisation avancée :
Lancer la console MIIS.EXE.
Aller dans l’onglet management agent, ouvrir les propriétés d’un management agent.
Aller dans Configure Attribute Flow. Sélectionner la règle et cliquer sur Advanced.
On indique ensuite le nom de la règle de transformation.
Appeler par exemple cette règle Title (remplacer le nom par défaut de la règle). Dans la Rule EXtension, il faudra donc faire un switch case sur la variable flowrule = Title.
Dans notre example on souhaite que l’attribut Title (AD) soit égale à la valeur de Title (Person) en majuscule.
https://blogs.msdn.microsoft.com/connector_space/2017/02/03/management-agent-advanced-attribute-flows/

MIM 2016 Synchronization Services s’interface très bien avec Visual Studio 2015.
Il est possible de définir si on programme en VBNET ou en C#.
Visual Studio se lance alors automatiquement.

Le code d’une Metaverse Rule se base sur 2 objets :
– MvEntry : entrée de la Metaverse
– CsEntry : entrée du Connector Space

Microsoft s’appuie sur la DLL Microsoft.MetadirectoryServices. Une rule extension d’un management agent par défaut se compose des fonctions suivantes :
– Initialize
– Terminate
– ShouldProjectToMV
– FilterForDisconnection
– MapAttributesForJoin :
– ResolveJoinSearch : écriture de « join rule » avancée
– MapAttributesForImport : règle de transformation avancée en import
– MapAttributesForExport : règle de transformation avancée en export.
– Deprovision : permet de faire une règle de déprovisionning pour le management agent.

Une fonction (function) renvoie une valeur.
Une procédure (sub) effectue une action.
Dans notre cas MapAttributesForExport est une procédure.

Le code ci dessous est celui de la Rule Extension à créer. Il peut être téléchargé à cette adresse :
http://msreport.free.fr/articles/ADExtension.vb.txt

Public Sub MapAttributesForExport(ByVal FlowRuleName As String, ByVal mventry As MVEntry, ByVal csentry As CSEntry) Implements IMASynchronization.MapAttributesForExport
‘ TODO: Add export attribute flow code here
Select Case FlowRuleName
Case “Title”
Dim TitleValue As String = mventry(“Title”).Value.ToString.ToUpper
csentry(“Title”).Value = TitleValue
End Select
‘Throw New EntryPointNotImplementedException()
End Sub

Autre exemple de Rule Extension:
http://msreport.free.fr/articles/Referentiel.vb.txt

Pour plus d’informations :
https://blogs.msdn.microsoft.com/connector_space/2016/08/19/creating-an-ma-extension/
https://www.packtpub.com/mapt/book/virtualization_and_cloud/9781785283925/3/ch03lvl1sec32/creating-a-rules-extension
https://msdn.microsoft.com/en-us/library/windows/desktop/ms696026(v=vs.100).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.metadirectoryservices(v=vs.100).aspx
http://www.wapshere.com/missmiis/advanced-attribute-flow-rules
https://social.technet.microsoft.com/Forums/en-US/4eb7a11e-0eb2-4818-8015-4f0c70b29856/issues-with-ma-extension-attribute-flow?forum=identitylifecyclemanager

5. Ecriture d’une Metaverse rule
L’interface graphique de MIM 2016 Synchronization Services ne permet pas de faire des règles de Provision. Si l’on veut créer, supprimer ou renommer des objets dans les systèmes cibles, une opération de Provision (création d’un objet dans un connecteur space à partir de l’objet de la Metaverse), il faut créer une Metaverse Rule (objet de la classe MVExtensionObject). Pour cela il faut écrire du code C# ou VBNET et compiler ce code sous forme d’une DLL.

Il faut cliquer sur « Create Rules Extension Project ».
La classe MVExtensionObject contient 3 procédures et 1 fonctions :
– Initialize
– Terminate
– Provision : permet de configurer comment MIM va créer les objets dans les systèmes cibles
– ShouldDeleteFromMV

Le code suivant permet de créer, supprimer et renommer des utilisateurs dans l’Active Directory en fonction de la valeur des attributs EntryDate et ExitDate de l’annuaire AD LDS. Ces 2 attributs sont tout d’abord importés dans la Metaverse (EmployeeStartDate et EmployeeEndDate)
http://msreport.free.fr/articles/MVExtension.vb.txt

Pour plus d’informations sur l’écriture de Metaverse rule:
https://dirteam.com/tomek/2007/03/18/ad-account-connector-rename-with-miis/
https://blogs.msdn.microsoft.com/connector_space/2016/11/18/rules-extensions-basic-mv-extensions/
https://msdn.microsoft.com/en-us/library/windows/desktop/ms695377(v=vs.100).aspx
http://nkoctay.blogspot.fr/2011/12/metaverse-rules-extension.html
http://www.wapshere.com/missmiis/getting-started-with-object-creation-and-deletion
https://tlktechidentitythoughts.wordpress.com/2016/08/30/deprovision-in-mimfim-using-classic-provisioning-c/

A+
Guillaume MATHIEU
Directeur Technique Metsys
La connaissance s’accroît quand on la partage.

A propos Guillaume Mathieu

Directeur Technique chez Metsys
Ce contenu a été publié dans IAM, MIM, avec comme mot(s)-clé(s) . Vous pouvez le mettre en favoris avec ce permalien.