Introduction
La gestion des identitĂ©s en entreprise est une problĂ©matique de plus en plus importante. En effet, des thĂ©matiques telles que la mise en place d’un rĂ©fĂ©rentiel d’identitĂ© unique, le SSO (authentification unique), la gestion du cycle de vie d’un utilisateur (provisioning et deprovisioning, gestion du mot de passe, âŠ) et bien d’autres deviennent essentielles dans des environnements toujours plus complexes et offrant plus de services. Il devient donc primordial d’intĂ©grer des solutions permettant de gĂ©rer les identitĂ©s au sein d’une entreprise. Cela permet notamment :
-
d’automatiser des processus de gestions de comptes (exemple la saisie/modification/suppression d’un compte dans une base RH dĂ©clenche les actions nĂ©cessaires sur les infrastructures du systĂšme d’information)
-
d’Ă©viter les erreurs humaines de manipulations
-
de rĂ©duire les tĂąches d’exploitation
-
de n’avoir qu’un seul point d’entrĂ©e pour la saisie d’informations (rĂ©fĂ©rentiel RH par exemple, âŠ)
Dans cette sĂ©rie d’articles, nous allons nous intĂ©resser au composant Synchronisation Service. Si certains composants fonctionnent ensemble, ce n’est pas le cas de celui-ci qui peut ĂȘtre installĂ© seul. L’objectif est de dĂ©couvrir les possibilitĂ©s offertes par cet outil. Pour cela, nous allons utiliser le contexte d’une sociĂ©tĂ© « MyCompagny » souhaitant synchroniser les changements de son rĂ©fĂ©rentiel d’identitĂ© (une base de donnĂ©es SQL Server) vers l’annuaire Active Directory (synchronisation d’attributs). Aussi, nous verrons comme gĂ©rer le cycle de vie des objets tels que les utilisateurs ou les groupes via un mĂ©canisme de Provisioning/Deprovisioning.
Ces articles vont s’articuler de la façon suivante :
-
Partie 1 : Introduction, licensing, concepts
-
Partie 2 : Installation de FIM Synchronisation Service
Lors de cette septiĂšme et derniĂšre partie, je vais vous prĂ©senter le second type de DLL que l’on peut dĂ©velopper pour le service de Synchronization FIM. Il s’agit des rĂšgles d’extension de la mĂ©taverse. Celles-ci permettent de crĂ©er des objets dans le connector space lorsque celui-ci n’existe pas. Lors d’une opĂ©ration d’export, ces nouveaux objets seront aussi créés dans le systĂšme connectĂ©. Dans notre cas, la rĂšgle d’extension de la mĂ©taverse prendra en charge la crĂ©ation des comptes utilisateur n’existant pas dans l’annuaire Active Directory (provisioning). Comme pour le prĂ©cĂ©dent article, je vais d’abord vous prĂ©senter comment crĂ©er ce type de projet depuis la console d’administration de FIM Synchronization Service puis les diffĂ©rentes mĂ©thodes que l’on peut configurer avant de terminer sur un exemple d’implĂ©mentation.
NB : En AoĂ»t 2015, Microsoft a sorti une nouvelle version de la suite FIM, renommĂ© pour l’occasion MIM (Microsoft Identity Manager) suite Ă l’abandon de la gamme de produits Forefront. Cette nouvelle mouture apporte quelques fonctionnalitĂ©s supplĂ©mentaires. Cependant le contenu de ces articles restent valables.
CrĂ©ation d’une rĂšgle d’extension de la mĂ©taverse
Comme pour les rĂšgles d’extension des Managements Agents, celle de la mĂ©taverse repose sur une DLL (nous utiliserons Ă©galement le C# et Visual Studio pour la crĂ©er). NĂ©anmoins, il n’est possible de crĂ©er qu’une seule rĂšgle d’extension de la mĂ©taverse par environnement de FIM Synchronization Service. Pour rĂ©aliser cette opĂ©ration, il suffit de se rendre dans le menu Tools de la console de gestion de FIM Synchronization Service. Il faut ensuite cliquer sur Options.
Un assistant apparaĂźt. Pour activer la rĂšgle d’extension de la mĂ©taverse, il faut cocher la case Enable metaverse rules extension. Il est ensuite nĂ©cessaire de dĂ©finir le nom de la DLL. Cette derniĂšre sera situĂ©e dans le mĂȘme rĂ©pertoire que les rĂšgles d’extensions (par dĂ©faut C:\Program Files\Microsoft Forefront Identity Manager\2010\Synchronization Service\Extensions). Afin que le provisioning soit traitĂ© par la rĂšgle d’extension, il convient de cocher la case Enable Provisioning Rules Extension. Aussi comme dans l’article prĂ©cĂ©dent, on peut gĂ©nĂ©rer le squelette de la rĂšgle d’extension (un projet Visual Studio) via le bouton Create Rules Extension Project.
NB : La case Enable Synchronization Rule Provisioning n’est pas utile dans cette sĂ©rie d’articles. Cette derniĂšre permet de gĂ©rer le provisioning au travers de la syntaxe dĂ©clarative utilisĂ©e par FIM Service / Portal. Pour rappel cette derniĂšre simplifie la customisation des flux de synchronisation en outrepassant la nĂ©cessitĂ© de rĂ©aliser le dĂ©veloppement d’une DLL. NĂ©anmoins, elle nĂ©cessite le dĂ©ploiement de FIM Service et FIM Portal et donc l’achat des CALs associĂ©s.
Enfin, si vous crĂ©ez le projet, vous retrouver le mĂȘme assistant que dans la partie 6. Ce dernier vous demande les informations nĂ©cessaires Ă la crĂ©ation du projet Visual Studio. Ce dernier sera composĂ© de plusieurs fichiers dont une classe (fichier avec l’extension .cs portant le nom de la rĂšgle d’extension) contenant diffĂ©rentes mĂ©thodes qu’il faudra complĂ©ter pour dĂ©finir les rĂšgles de provisioning/deprovisioning.
Notions
Généralités
Contrairement aux rĂšgles d’extensions des Management Agent, il n’est pas possible de choisir quand une dll d’extension de la mĂ©taverse est appelĂ©e. En effet, celle-ci est automatiquement exĂ©cutĂ©e lorsqu’un objet de la mĂ©taverse est modifiĂ©. Cela peut intervenir lors des actions suivantes :
-
Une rĂšgle d’import modifie un attribut d’un objet.
-
Un objet d’un connector space rĂ©alise une jointure (manuelle via l’outil Joiner ou automatique).
-
Un objet d’un connector space rĂ©alise une projection.
-
Un objet d’un connector space a Ă©tĂ© dĂ©connectĂ© alors que l’objet de la mĂ©taverse n’a pas Ă©tĂ© supprimĂ©.
-
Une synchronisation complÚte est exécutée.
Contrairement Ă une rĂšgle d’extension d’un Management Agent, la rĂšgle de provisioning n’intervient pas en fonction d’une configuration dans FIM.
Méthodes
Initialize et Terminate
Ces derniĂšres fonctionnent de la mĂȘme façon que dans les rĂšgles d’extension d’un Management Agent (veuillez-vous rĂ©fĂ©rer Ă la partie 6 : LIEN).
ShouldDeleteFromMV
Cette mĂ©thode contrĂŽle le comportement de suppression d’un objet dans la mĂ©taverse. Cela correspond Ă la configuration que nous avons abordĂ© lors de la partie 5 (Object Deletion Rule). Ainsi, si les choix disponibles via l’interface graphique ne vous conviennent pas, il est possible d’indiquer un comportement particulier pour dĂ©cider de la suppression d’un objet de la mĂ©taverse.
Pour rappel, les rĂšgles de suppression d’objets se configurent pour chaque type d’objet. La fonction ShouldDeleteFromMV ne s’appliquera donc sur un objet que si vous activez la suppression via rĂšgle d’extension pour son type.
Provision
Provision est la mĂ©thode permettant de gĂ©rer notamment le provisioning / deprovisioning via la crĂ©ation d’un objet dans un connector space (ce dernier est ensuite créé dans le systĂšme connectĂ© lors de la prochaine opĂ©ration d’export).
Aussi, grĂące Ă celle-ci il est possible dâeffectuer dâautres opĂ©rations comme les dĂ©placements d’objets.
Ordre d’application
Enfin, aprĂšs avoir vu toutes les Ă©tapes de synchronisation au travers des diffĂ©rents articles, il est temps de faire un rĂ©capitulatif sur l’ordre d’application dans lequel elles interviennent. Lors d’une synchronisation, il existe deux phases :
-
Synchronisation entrante : depuis le connector space vers la métaverse
-
Synchronisation sortante : depuis la métaverse vers le connector space
Lors de la premiĂšre Ă©tape, voici les rĂšgles qui s’appliquent :
-
Object Deletion rule
-
Conntor Filter rule
-
Join Rule
-
Projection rule
-
Import Attribute Flow rule
Durant la synchronisation sortante, l’ordre d’application est le suivant :
-
Provisioning rule
-
Deprovisioning Rule
-
Export Attribute flow rule
Exemple
NB : Pour cet exemple, j’intĂšgre aussi l’implĂ©mentation de la mĂ©thode Initialize qui va ĂȘtre en charge de rĂ©cupĂ©rer une configuration au travers d’un fichier XML. Ce dernier contient uniquement l’unitĂ© d’organisation dans laquelle les utilisateurs doivent ĂȘtre créés.
L’objectif de cet exemple est de crĂ©er des utilisateurs dans l’annuaire Active Directory. Pour effectuer cette opĂ©ration, il faut crĂ©er un nouveau connecteur dans le Management Agent Active Directory. Pour ce faire, on rĂ©cupĂšre les connecteurs existants liĂ©s Ă l’objet dans la mĂ©taverse (en spĂ©cifiant le nom du Management Agent concernĂ©s) :
Il suffit ensuite de s’assurer qu’il n’en existe aucun en les comptant.
La crĂ©ation d’un nouveau connecteur s’effectue avec la mĂ©thode StartNewConnector (voir la code complet ci-dessous) en indiquant le type d’objet Ă crĂ©er dans le connector space en paramĂštre.
Il est ensuite nĂ©cessaire de peupler les attributs de l’objet. Il faut notamment crĂ©er le distinguishedName de l’objet. Cela s’effectue en concatĂ©nant le common name avec l’emplacement dans l’annuaire Active Directory (rĂ©cupĂ©rĂ© via le fichier de configuration XML). Les mĂ©thodes Concat et EscapeDNComponent sont ici utilisĂ©es pour la concatĂ©nation des chaĂźnes et la transformation de celles-ci en type ReferenceValue.
Enfin, on peut sauvegarder le nouveau connecteur avec la mĂ©thode CommitNewConnector. Il est Ă noter que cette logique a Ă©tĂ© incluse dans une boucle incrĂ©mentant le common name avec un chiffre si un objet du mĂȘme nom existe dĂ©jĂ dans l’unitĂ© d’organisation indiquĂ©e (une erreur du type ObjectAlreadyExistsException est alors retournĂ©e).
Voici le code complet de la rĂšgle d’extension de la mĂ©taverse :
Enfin, on remarque qu’il est possible de procĂ©der au dĂ©placement d’un objet dans l’annuaire Active Directory en changeant la valeur de l’attribut DN. Cette opĂ©ration peut s’effectuer lorsqu’on dĂ©tecte un connecteur existant.
Conclusion
De nombreuses personnalisations sont possibles au travers des rĂšgles d’extensions. Elle permettent de gĂ©rer tout les cas qui ne le sont pas au travers de l’interface graphique. De nombreux aspects de FIM Synchronization Service ont Ă©tĂ© abordĂ©s durant cette sĂ©rie d’articles. NĂ©anmoins, il est possible de mettre en Ćuvre de nombreuses autres configurations en fonction du type de Management Agent dĂ©ployĂ© (et donc des sources de donnĂ©es) ainsi que des personnalisations Ă effectuer sur ceux-ci.

