PI Services

Le blog des collaborateurs de PI Services

FIM Synchronization Service Partie 1 : Introduction, concepts et licensing

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 gestion de compte (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, …)

Forefront Identity Manager (FIM) est une suite de produits répondant à un grand nombre de ces problématiques. Voici une liste des différents composants de FIM et de leur utilité :

  • FIM Synchronization Service : Il s'agit du service le plus connu, car il est le plus utilisé et forme notamment la base des outils comme Dirsync/Azure AD Connect (pour la synchronisation AD On premise / Office 365). Il représente le moteur de synchronisation pouvant interagir entre différents référentiels. Il permet de répercuter les changements d'un référentiel à un autre.
  • FIM Service : Ce composant ajoute une surcouche offrant la possibilité de définir une politique de gestion des identités avec un système de Workflow. Par exemple, il est possible de gérer les membres d'un groupe Active Directory. Cette action est aussi réalisable directement via FIM Sync. Cependant, elle nécessite une implémentation qui peut être plus complexe via ce dernier. En effet FIM Service et FIM Portal donne la possibilité d'utiliser une syntaxe dite déclarative, qui est plus simple dans un environnement où il n'y a pas de développeur.
  • FIM Portal : Il s'agit d'une interface web d'administration pour les autres composants de FIM. Ainsi, il devient possible de configurer simplement FIM Service.
  • Password Change Notification Service : Associé à FIM Portal, il permet d'implémenter un portail de réinitialisation de mot de passe "self service".
  • FIM Certificate Management : Il s'agit d'un portail de gestion des certificats sur carte à puce ("smartcard"). Ce dernier n'est pas intégré à FIM Portal. Il devient ainsi possible de gérer le cycle de vie de ce type de certificat via des Workflow spécifiques tels que l'enrôlement des cartes à puces. Ce composant nécessite l'installation d’un module sur l'autorité de certification émettrice.
  • FIM Reporting : Cet outil permet de générer des rapports. Par exemple, on peut vouloir obtenir un rapport sur les changements de membre au sein d'un groupe ou encore un historique des workflows qui ont été exécutés par FIM Service.

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é "MyCompany" 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 :

NB : En Août 2015, Microsoft a sorti une nouvelle version de la suite FIM, renommée 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.

Licensing

Le licensing de FIM a évolué depuis Avril 2015. Désormais, il n'est plus nécessaire d'avoir une licence serveur. Celle-ci est incluse avec la licence de Windows Server (Standard et Datacenter). Cependant le système de CAL existe toujours et Microsoft a d'ailleurs publié un schéma récapitulatif à ce sujet. En effet, tous les services ne nécessitent pas forcément d'avoir une CAL. Ainsi, on remarque que tous les services à l'exception de celui de synchronisation nécessite une CAL pour chaque utilisateur géré par le service. Toutes les opérations réalisées durant cette série d'article ne nécessiteront donc pas de CAL.

msohtmlclipclip_image001

NB : La licence SQL Server n'est pas inclue et doit donc être prévue (SQL Express n'est pas compatible avec FIM Synchronization Service).

Concepts

Lors de ce chapitre, J’aborderai les différents concepts que nous pouvons rencontrés avec le service de synchronisation FIM. Ces derniers doivent être compris dès que l'on souhaite mettre en place une synchronisation entre différents référentiels d'identité. Grâce à ceux-ci, nous allons pouvoir savoie à chaque instant où la donnée est stockée. En effet, FIM Synchronization Service repose sur un schéma plus complexe qu'une simple base de données.

Metaverse (MV)

Il s'agit du cœur de FIM, il centralise la totalité des informations de tous les objets gérés par l'outil. Il peut s'agir d'utilisateur, de groupe, de contact, etc. Il est même possible de créer ses propres objets. La metaverse n'existe qu'une fois par serveur FIM. Cette dernière peut contenir différents types d'attributs :

  • Chaîne de caractère
  • Nombre
  • Booléen
  • Reference (correspond à un lien vers un autre objet)
  • Binaire

En dehors du type booléen, tous les champs peuvent être de type "Multi-valued", c’est-à-dire qu'ils peuvent posséder une liste de valeur au lieu d'une valeur unique. Aussi, les champs de type chaîne de caractères, binaire et nombre peuvent être indexés, ce qui permet d'effectuer des recherches dessus. Cette option pourra être utile dans le cas de règles développées en C# ou en VB.Net lorsque celles-ci nécessiteront de trouver un objet (ou une liste d'objets) précis dans la metaverse.

NB : Les types indexés possèdent certaines propriétés supplémentaires. Par exemple, une chaîne de caractère indexée est limitée à une longueur de 448 caractères (illimité dans le cas contraire).

Connector Space (CS)

C'est une entité logique représentant tous les objets d'un système connecté à FIM. Ce dernier peut être une base de données, un annuaire LDAP, un fichier à plat, ... Ces objets interagissent avec le système connecté ou avec la metaverse au travers d'actions que nous verrons plus loin. Attention, il faut bien noter qu'un connector space ne contient qu'une représentation de l'objet pour un système donné. Si vous modifiez cet objet, cela n'aura pas d'impact sur le système connecté ou sur la metaverse tant que cette modification n'aura pas été poussé sur l'un de ces éléments. Il existe un connector space par système connecté à FIM.

Management Agent (MA)

Il s'agit de l'ensemble de règle déterminant les mécanismes de synchronisation entre le système de données, le connector space et la metaverse. Il interagit avec ces trois systèmes.

Connector

Un Connector est le nom donné à un objet d'un connector space d'un système connecté à FIM qui est lui-même connecté à un objet dans la metaverse. S'il ne l'est pas il s'agit d'un disconnector. Ces derniers peuvent être explicites à cause d'une action voulue dans le Management Agent et ne peuvent être connectés à la metaverse sans l'outil Joiner que nous verrons dans la partie 4 (celui-ci permet de joindre manuellement un objet d'un connector space à la metaverse). On parle alors de connector explicite si la jointure entre un connector space et la metaverse a eu lieu avec cet outil. Un disconnector peut être aussi de type filtered si un filtre dans la configuration du Management Agent empêche de connecter l'objet du connector space à la metaverse. Ce comportement peut être modifié facilement en changeant le filtre. A noter qu'un connector explicite ne peut devenir un filtered disconnector via un filtre. Ces derniers ne s'appliquent pas à ce type d'objet.

Join

C'est l'opération consistant à joindre un objet d'un Connector Space à un objet de la metaverse. Attention, ceux-ci doivent exister tous les deux. Elle a pour effet de créer un connector.

Projection

Lorsqu'un objet dans un connector space n'existe pas dans la metaverse, il peut être projeter. Cette opération correspond à la création d'un objet dans la metaverse. Cela permet aussi de créer un connector.

Import

Cette opération importe les données depuis un système connecté vers le connector space associé.

Export

Il s'agit d'exporter les données vers un système connecté depuis le connector space associé.

Synchronisation

C'est l'étape qui permet d'appliquer tout changement entre la metaverse et un connector space. Celle-ci est bidirectionnelle. Cette opération suit généralement un import et précède un export.

Provisioning

Le provisioning est la notion définissant l'action qui crée un nouvel objet dans un connector space lorsqu'il n'existe pas. Lors de celle-ci, un nouveau connecteur va être créé avec un objet de la metaverse. Ce nouvel objet ne sera visible dans le système connecté qu'après une opération d'export.

Delta

Les opérations d'import, d'export et de synchronisation peuvent être complètes ou incrémentielles. Ce second type est aussi nommé "delta" et n'est pas disponible pour tous les types de système. Il est parfois nécessaire d'implémenter quelques modifications sur le système connecté pour traiter ce type d'opération (exemple : un référentiel SQL nécessite une table des changements qui ont eu lieu depuis la dernière synchronisation).

Schéma fonctionnel

Enfin, voici un schéma avec deux systèmes connectés reprenant le cas pratique qui sera développé au cours de cette série d'article (un annuaire Active Directory et une base de données SQL Server) montrant les interactions entre les différents entités :

msohtmlclipclip_image002