Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles Ă  la une

FIM Synchronization Service Partie 7 : CrĂ©ation d’une rĂšgle d’extension de la metaverse (provisioning)

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 :

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.

Image

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.

Image

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.

Image

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.

Image

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 :

  1. Synchronisation entrante : depuis le connector space vers la métaverse
  2. Synchronisation sortante : depuis la métaverse vers le connector space

Lors de la premiĂšre Ă©tape, voici les rĂšgles qui s’appliquent :

  1. Object Deletion rule
  2. Conntor Filter rule
  3. Join Rule
  4. Projection rule
  5. Import Attribute Flow rule

Durant la synchronisation sortante, l’ordre d’application est le suivant :

  1. Provisioning rule
  2. Deprovisioning Rule
  3. 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.

DirectAccess / Authentification forte : Ouvertures de session longues

Contexte

Le problĂšme dĂ©crit ci-dessous a Ă©tĂ© rencontrĂ© dans le cadre d’une infrastructure DirectAccess sous Windows Server 2012 R2. Celui-ci peut se produire lorsque l’authentification forte (par carte Ă  puce ou OTP) est activĂ©e avec des clients Windows 7.

ProblÚme rencontré

Lorsque des lecteurs rĂ©seaux sont montĂ©s Ă  l’ouverture de la session, cela peut empĂȘcher cette derniĂšre de s’ouvrir correctement et laisser l’utilisateur bloquĂ© sur la page de “Bienvenue” pendant plusieurs minutes voir plusieurs dizaines de minutes.

Analyse

Pour rappel, la connectivité DirectAccess est composée de deux tunnels :

  • Le tunnel infrastructure utilisĂ© notamment pour l’authentification et les stratĂ©gies de groupes.
  • Le tunnel utilisateur qui permet d’accĂ©der Ă  des ressources d’entreprise (partages, applications, site web) en fonction des autorisations de la personne connectĂ©e.

Ce problĂšme est une consĂ©quence de l’activation de l’authentification forte. En effet, tant que cette derniĂšre n’a pas eu lieu, le tunnel utilisateur n’est pas créé. Les lecteurs rĂ©seaux Ă©tant des ressources liĂ©s Ă  l’utilisateur, elles sont accĂ©dĂ©es par ce tunnel. Le systĂšme d’exploitation tente de monter les lecteurs rĂ©seaux et il faut attendre un timeout de cette opĂ©ration avant que la session ne s’ouvre.

Solution

Toutes les solutions prĂ©sentĂ©es ici sont des contournements permettant d’Ă©viter le problĂšme mais prĂ©sentant toutes des inconvĂ©nients (Ă  voir selon le cas, celle qui est le plus acceptable pour vous).

1/ Authentification forte pendant l’ouverture de session

Demander l’authentification forte lors de l’ouverture de session permet de dĂ©clencher la crĂ©ation du tunnel utilisateur. Ainsi, les lecteurs rĂ©seaux peuvent ĂȘtre montĂ©s. Cependant, cette mĂ©thode implique deux inconvĂ©nients :

  • Elle ne fonctionne que lorsque la mĂ©thode d’authentification forte utilisĂ©e est la carte Ă  puce. En cas d’usage d’un OTP, cela ne peut ĂȘtre opĂ©rationnelle puisque DirectAccess Ă  un processus propre pour gĂ©rer ce type d’authentification dĂ©corrĂ©lĂ© de celui de l’ouverture de session. Pour plus d’informations, je vous invite Ă  lire cet article : https://blog.piservices.fr/post/2015/11/23/DirectAccess-Deploiement-de-lauthentification-forte
  • L’utilisateur est obligĂ© de s’authentifier sur son poste client avec l’authentification. Cela dĂ©grade l’expĂ©rience utilisateur lorsque l’on se trouve en entreprise et qu’on ne souhaite donc pas utiliser DirecAccess.

2/ Logon Script

Les lecteurs rĂ©seaux sont parfois mappĂ©s par un script s’exĂ©cutant aprĂšs l’ouverture de session (logon script). Pour que cette solution soit fonctionnelle, il suffit d’intĂ©grer un test vĂ©rifiant que la connectivitĂ© DirectAccess est montĂ©e et de boucler dessus tant que ce n’est pas le cas. Cela peut ĂȘtre fait en validant l’accĂšs Ă  une ressource d’entreprise comme un partage ou l’url du serveur NLS de DirectAccess. Cependant cette solution prĂ©sente l’inconvĂ©nient de devoir parfois laisser un script tourner continuellement.

3/ Management servers

L’une des autres possibilitĂ©s est d’ajouter les serveurs de fichiers utilisĂ©s par ces lecteurs rĂ©seaux dans la liste des serveurs de management. Ainsi, l’accĂšs Ă  ceux-ci se fait via le tunnel infrastructure qui ne nĂ©cessite pas d’authentification forte et qui est montĂ© dĂšs le dĂ©marrage de l’ordinateur avant l’ouverture de session (si une connexion Ă  internet est disponible). Cependant, cette mĂ©thode est contraire Ă  la volontĂ© de sĂ©curiser les accĂšs aux ressources d’entreprise avec de l’authentification forte. En effet, si l’utilisateur ouvre une session, il pourra accĂ©der aux serveurs de fichiers sans authentification forte et par rebond Ă  d’autres serveurs. Cette solution affaiblit donc la sĂ©curitĂ© de l’infrastructure.

Si toutefois vous souhaitez implĂ©menter cette solution, il suffit de lancer la console de gestion DirectAccess et de se rendre dans la configuration du serveur ou du cluster via le menu Ă©ponyme. Ensuite, il faut cliquer sur le bouton “Edit” de l’étape 3 de l’assistant de configuration.

Management 1
Dans l’onglet “Management”, il faut indiquer les noms DNS des serveurs de fichiers (les IP ne peuvent ĂȘtre indiquĂ©es que si vos serveurs communiquent en IPv6). Vous pouvez ensuite cliquer sur le bouton “Finish”.

Management 2

N’oubliez pas de mettre Ă  jour les stratĂ©gies de groupe en cliquant sur le bandeau qui apparait en bas de la console de gestion DirectAccess. Enfin, il faut rĂ©cupĂ©rer cette nouvelle version des GPOs DirectAccess sur vos postes clients (via la commande “gpupdate” par exemple).

4/ Déclenchement de la connectivité DirectAccess aprÚs le logon

Le dĂ©marrage d’un des services requis pour la connectivitĂ© DirectAccess aprĂšs l’ouverture de session permet de corriger le phĂ©nomĂšne. Le service IP Helper (iphlpsvc) permettant notamment de gĂ©nĂ©rer les interfaces de transitions IPv4/IPv6 est l’un deux. En effet, aucun tunnel dĂ©diĂ© Ă  DirectAccess n’existera tant que ce service n’est pas dĂ©marrĂ©. Ainsi, le client ne tentera pas de monter les lecteurs rĂ©seaux. NĂ©anmoins, via cette mĂ©thode, le tunnel infrastructure n’existe pas non plus tant que l’utilisateur n’est pas connectĂ©. Ainsi, un utilisateur qui se connecte pour la premiĂšre fois sur un ordinateur ne pourra le faire via DirectAccess. Aussi, les patchs ne pourront ĂȘtre rĂ©cupĂ©rĂ©s et les stratĂ©gies de groupes ne seront pas mises Ă  jour tant qu’un utilisateur n’a pas ouvert de session. Si toutefois vous souhaitez rĂ©aliser cette manipulation, il suffit de crĂ©er une stratĂ©gie de groupe avec les paramĂštres ci-dessous.

Dans “Computer Configuration / Preferences / Services”, il faut changer le mode de dĂ©marrage du service IP Helper afin qu’il dĂ©marre manuellement.

Service 1

Dans “Configuration / Preferences / Scheduled Tasks”, il faut crĂ©er une tĂąche planifiĂ©e lancĂ©e par le compte “SYSTEM”.

GPO 1

On dĂ©finit l’exĂ©cution de celle-ci Ă  l’ouverture de session.

GPO 2

Enfin, on indique qu’il faut lancer le service IP Helper via la commande “net start”.

GPO 3

Aussi, il est nĂ©cessaire de gĂ©rer le cas d’un utilisateur qui ferme sa session afin de ne pas rencontrer le problĂšme lors de la prochaine ouverture de session. Pour cela, il faut crĂ©er une seconde tĂąche se dĂ©clenchant Ă  la fermeture de session.

Celle-ci est quasiment identique en dehors de la commande exĂ©cutĂ©e (“net stop”) et du dĂ©clencheur. Ce dernier est paramĂ©trĂ© pour dĂ©tecter l’Ă©vĂ©nement 4647 du journal d’Ă©vĂ©nements SĂ©curitĂ©. Celui-ci correspond Ă  une demande de fermeture de session par l’utilisateur.

GPO 6

GPO 5

Enfin, cet Ă©vĂšnement n’est pas gĂ©nĂ©rĂ© par dĂ©faut. Pour l’obtenir, il faut activer l’audit sur la catĂ©gorie “Logoff”. Cette opĂ©ration s’effectue par stratĂ©gie de groupe dans “Computer Configuration / Policies / Windows Settings / Security Settings / Advanced Audit Policy Configuration / Audit Policies”.

GPO 7

SQL Server – Chiffrer les connexions Client/Serveur

Introduction

Afin d’amĂ©liorer la sĂ©curitĂ© des connexions rĂ©alisĂ©es depuis les clients SQL vers une base, il est possible d’activer la fonction de chiffrement de SQL (Encryption) depuis SQL Server Configuration Manager.

Cette fonctionnalitĂ© permet de chiffrer la connexion entre le client et le serveur afin d’éviter l’interception et la lecture des commandes rĂ©alisĂ©es par le client.

Prérequis

  • Un certificat avec sa clĂ© privĂ©e dĂ©livrĂ© pour l’authentification server d’installĂ© sur le serveur SQL (le certificat doit avoir pour nom le mĂȘme que celui utilisĂ© dans la source de donnĂ©e du client, souvent il s’agit du FQDN du serveur),
  • Dans le cas d’une utilisation d’un cluster, le nom du certificat doit ĂȘtre correspondre au nom DNS utilisĂ© par le cluster, le certificat devras ĂȘtre installĂ© sur tous les nƓuds du cluster,
  • Le compte de service utilisĂ© par le service SQL Server doit avoir les droits Read sur la clĂ© privĂ©e du certificat,
  • Le client doit ĂȘtre en mesure de valider et de faire confiance Ă  l’autoritĂ© ayant dĂ©livrĂ© le certificat,
  • Une fenĂȘtre d’interruption de l’instance SQL.

Réalisation

1. Depuis SQL Server Configuration Manager, faire un clic-droit sur l’instance souhaitĂ©e et sĂ©lectionner “Properties”

image

2. Depuis l’onglet certificate, sĂ©lectionner le certificat Ă  utiliser pour le chiffrement des connexions,

image

3. Depuis l’onglet Flags, passer la valeur de “ForceEncryption” Ă  ‘’Yes”,

image

4. Rebooter l’instance.

Verification

Un test rĂ©alisĂ© Ă  l’aide d’un outil de capture rĂ©seau, et d’un client SQL permet de prouver le chiffrement des connexions :

  • Avant

image

  • AprĂšs

image