Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles Ă  la une

FIM Synchronization Service Partie 4 : Management Agent : Fonctionnalités avancées

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 de Forefront Identity Manager qui rĂ©pond Ă  un grand nombre de ces problĂ©matiques. 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 :

Dans ce quatrième article, j’aborderai la configuration du second Management Agent de notre Ă©tude de cas. Ce dernier nous permettra de synchroniser les objets Active Directory. Aussi, nous verrons Ă©galement la notion de profil d’exĂ©cution. Ces derniers vont nous permettre de lancer nos tâches de synchronisation et mĂŞme de les planifier.

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.

Configuration du management Agent Active Directory

Dans l’article prĂ©cĂ©dent nous avons vu la configuration d’un Management Agent. Pour la plupart d’entre eux, les onglets suivants sont identiques :

  • Configure Connector Filter
  • Configure Join and Projection Rules
  • Configure Attribute Flow
  • Configure Deprovisioning
  • Configure Extensions

En effet, pour chaque Management Agent, la partie qui change est celle consacrĂ©e Ă  l’accès aux donnĂ©es. Les autres sections permettent d’interagir avec les donnĂ©es prĂ©sentes dans le connector space ou dans la metaverse.

Prérequis

Afin de synchroniser des informations avec un annuaire Active Directory, il est nĂ©cessaire d’avoir un compte de service permettant de le lire. Pour que ce dernier support les opĂ©rations de type delta (afin de ne traiter que les changements depuis la dernière synchronisation), il est nĂ©cessaire d’ajouter la permission Replicate directory changes au compte de service. Cette dernière s’ajoute au niveau du domaine.

image

Ce compte sera Ă©galement utilisĂ© pour rĂ©pliquer les Ă©ventuels changements sur un objet depuis la mĂ©taverse. Ce dernier devra donc avoir des droits d’Ă©criture sur les objets et mĂŞme Ă©ventuellement de crĂ©ation / suppression si l’on souhaite mettre en place du provisioning. Il est d’ailleurs recommandĂ© d’ajouter les permissions au fur et Ă  mesure des besoins en donnant les droits au compte de service sur les unitĂ©s d’organisation Ă  traiter. Il faut aussi Ă©viter d’insĂ©rer un compte avec des droits importants comme un compte membre du groupe Administrateurs du domaine.

Création du management Agent

Lors de la crĂ©ation du Management Agent (pour rappel, elle s’effectue via le bouton Create), on choisit le type Active Directory Domain Services, puis on le nomme et on ajoute Ă©ventuellement une description.

clip_image001

La section suivante permet d’indiquer le nom de la forĂŞt Active Directory ainsi que le compte de service qui sera utilisĂ© pour lire les informations dans l’annuaire.

clip_image002

Il est ensuite possible de spĂ©cifier les diffĂ©rentes partitions de domaine qui seront accĂ©dĂ©es par FIM. Dans le cas d’une forĂŞt mono domaine vous n’aurez ici qu’un seul choix possible (il est nĂ©anmoins possible d’accĂ©der aux autres partitions de l’annuaire via le bouton Show All mais cela n’est pas utile). Il est ainsi possible de rĂ©aliser un filtrage sur le domaine Ă  synchroniser.

La section Domain Controller connection settings permet de dĂ©finir, si besoin, une liste de contrĂ´leur de domaine Ă  utiliser. Cette opĂ©ration s’effectue avec le bouton Configure tout en prenant soin de cocher la case Only use preferred domain controllers si on ne souhaite utiliser que cette liste. Il est Ă©galement possible de dĂ©finir des identifiants d’accès diffĂ©rents. Aussi, la section Password Synchronization peut ĂŞtre utilisĂ© dans le cas d’une synchronisation du mot de passe Active Directory vers la mĂ©taverse afin de le rĂ©pliquer sur d’autres applications. Cela nĂ©cessite une implĂ©mentation spĂ©cifique qui ne sera pas abordĂ©e dans cette sĂ©rie d’articles.

Le bouton Containers permet de sĂ©lectionner les unitĂ©s d’organisation ou container que vous souhaitez synchroniser. Il s’agit ici d’un autre niveau de filtrage.

clip_image003

L’onglet Configure Provisioning Hierarchy offre la possibilitĂ© de crĂ©er automatiquement les objets d’arborescence nĂ©cessaires Ă  la crĂ©ation de la hiĂ©rarchie (comme les unitĂ©s d’organisation) si ces derniers n’existent pas lors du dĂ©placement ou de la crĂ©ation d’un objet. Dans notre exemple, ce dernier n’est pas configurĂ©. NĂ©anmoins si vous souhaitez l’activer, il suffit d’Ă©tablir un lien entre un objet composant le distinguished name dans la mĂ©taverse et son Ă©quivalent dans l’annuaire (voir screenshot ci-dessous).

clip_image004

L’onglet Select Object Types permet de dĂ©finir les objets que l’on souhaite synchroniser. Par dĂ©faut, il est nĂ©cessaire de laisser les cases container, domainDNS et OrganizationalUnit cochĂ©es. En effet, ces objets permettent de construire le distinguishedName des objets Active Directory, ce qui est obligatoire si l’on souhaite les synchroniser. Aussi, on peut ajouter d’autres types d’objets via le bouton Show All. ConformĂ©ment Ă  notre Ă©tude de cas, nous ajoutons les utilisateurs.

clip_image005

Au travers de la section Select Attributes, il est possible de sĂ©lectionner les attributs qui vont ĂŞtre utilisĂ©s par le service de synchronisation de FIM. Ces derniers ne sont pas tous affichĂ©s par dĂ©faut. Il faut cocher la case Show All afin d’obtenir un listing complet.

clip_image006

J’ai choisi les attributs department, givenName (prĂ©nom), sn (nom) et samAccountName.

NB : Le compte de service doit avoir les droits d’Ă©criture sur tous les attributs cochĂ©es si ces derniers doivent ĂŞtre modifiĂ©s par le Management Agent (ce qui est le cas avec l’entreprise MyCompany).

Comme lors de l’article prĂ©cĂ©dent l’assistant nommĂ© Connector Filter configure le filtrage des objets Ă  traiter via des conditions (valeur d’un attribut par exemple). Pour rappel, ces filtres sont exclusifs. Contrairement au Management Agent SQL, nous avons plus de choix puisque nous synchronisons plusieurs types d’objets. Il est donc possible d’Ă©tablir un filtrage pour chacun d’entre eux. En dehors des types utilisateurs, groupes et contacts, il n’existe pas de besoin pour crĂ©er des filtres sur les autres objets qui ne sont utilisĂ©s que pour la synchronisation complète de l’architecture.

clip_image007

Durant le panel Configure Join and Projection Rules que nous avons aussi rencontrĂ© lors de la configuration Management SQL, nous ajoutons une règle de jointure sur les objets de type person au travers de l’attribut samAccountName. Cette dernière crĂ©e le lien entre les objets de la metaverse et ceux de l’annuaire Active Directory. Cela crĂ©e aussi indirectement le lien avec les objets issus du rĂ©fĂ©rentiel SQL puisque nous les avons prĂ©cĂ©demment créé dans la mĂ©taverse via la règle de projection du Management Agent SQL.

Optionnellement, il est possible d’ajouter une règle de projection si l’on souhaite crĂ©er les objets utilisateurs qui n’auraient pas d’Ă©quivalent dans la mĂ©taverse.

clip_image008

clip_image009

Comme pour le Management Agent SQL, nous dĂ©finissons des règles de flux pour les attributs suivants : nom, prĂ©nom, et service d’appartenance de chaque collaborateur en export vers l’annuaire Active Directory et samaccountname en import. Cependant, le sens du flux est diffĂ©rent puisqu’il s’agit d’exporter les changements vers l’annuaire Active Directory.

clip_image010

NB : Cette configuration force les attributs du rĂ©fĂ©rentiel SQL dans l’annuaire LDAP. Si un attribut est modifiĂ© dans l’annuaire Active Directory, il sera Ă©crasĂ© lors de la prochaine synchronisation (en dehors su samAccountname puisqu’il permet la jointure avec l’objet dans la mĂ©taverse). Pour garder une valeur de l’annuaire LDAP, il convient de rĂ©importer les changements dans la metaverse en ajoutant des règles de flux d’attributs d’imports. Il est aussi nĂ©cessaire de dĂ©finir le Management Agent qui Ă  la prioritĂ© sur l’attribut puisque plusieurs Management Agent sont susceptibles d’Ă©crire une valeur. Nous verrons ce second aspect dans le chapitre concernant l’administration de la mĂ©taverse dans le prochain article.

Le panel traitant du Deprovisioning conserve sa configuration par défaut car notre étude de cas ne traite que la synchronisation pour le moment.

clip_image011

Enfin, nous n’avons pas créé de règles d’extension (nĂ©cessitant un dĂ©veloppement en C# ou VB) donc la case adĂ©quate reste grisĂ©e. Aussi, le Management Agent AD inclus la possibilitĂ© de provisionner des boĂ®tes aux lettres Exchange via la liste dĂ©roulante associĂ©e au label Provision For. Si l’on choisit une version d’Exchange, il faut aussi configurer l’url d’un serveur d’accès client pour exĂ©cuter des commandes Powershell Exchange. NĂ©anmoins, cette configuration doit ĂŞtre associĂ© Ă  une dll dĂ©veloppĂ©e en C# ou VB.

clip_image012

Profil d’exĂ©cution

Maintenant que les Managements Agents sont configurĂ©s, il convient de les exĂ©cuter. Pour ce faire, il est nĂ©cessaire de crĂ©er des profils d’exĂ©cution. Cette opĂ©ration s’effectue en sĂ©lectionnant le Management Agent puis en cliquant sur Configure Run Profiles.

image

Un profil d’exĂ©cution contient une ou plusieurs Ă©tapes permettant d’effectuer des opĂ©rations d’import, d’export, de synchronisation. Pour rappel, je vous invite Ă  consulter la partie 1 de cette sĂ©rie d’articles qui dĂ©finit toutes ces notions.

Pour crĂ©er un nouveau profil d’exĂ©cution, il suffit de cliquer sur New Profile et de dĂ©finir un nom pour celui-ci.

Run Profile 01

La section suivante offre la possibilitĂ© de dĂ©finir la première Ă©tape du profil d’exĂ©cution. Celle-ci peut avoir les types suivants :

  • Import Full
  • Import Delta
  • Export
  • Synchronization Full
  • Synchronization Delta
  • Delta Import and Delta Synchronization
  • Full Import and Delta Synchronization
  • Full Import and Full Synchronization

Run Profile 02

Il est donc possible de sĂ©lectionner des traitements incrĂ©mentiels ou complets. Aussi, on remarque que certains actions possèdes deux Ă©tapes (import et synchronisation). Cependant, tous les types ne sont pas reprĂ©sentĂ©s. Comment peut-on rĂ©aliser un import suivi d’une synchronisation puis d’un export ? Il suffira d’ajouter une Ă©tape au profil d’exĂ©cution ! La première Ă©tape peut ĂŞtre du type Full Import and Full Synchronization et le seconde de type Export. Il aurait Ă©tĂ© aussi possible de rĂ©aliser cette action en trois Ă©tapes :

  1. Full Import
  2. Full Synchronization
  3. Export

Chaque profil d’exĂ©cution peut ne possĂ©der qu’une seule Ă©tape. Cette façon offre la possibilitĂ© d’avoir un plus grand contrĂ´le sur l’exĂ©cution (notamment en phase de test), pour vĂ©rifier Ă  chaque instant que les changements sont correctement rĂ©pliquĂ©s. Ainsi, si nous avons une Ă©tape import, un changement sur un objet ne sera visible que sur le Connector Space du Mangement Agent et non pas dans la mĂ©taverse. Il est ainsi possible de mettre en place des actions correctrices avant de modifier la mĂ©taverse de façon irrĂ©versible.

Pour chaque Ă©tape il est possible de dĂ©finir un fichier de log. Ce dernier peut Ă©galement servir de fichier de test qui est Ă©crit sans qu’aucun changement n’ait lieu sur le Connector Space.

Run Profile 05

La section Threshold dĂ©finit les valeurs maximum d’objets pouvant ĂŞtre importĂ©s (Specify number of objects to process) ou supprimĂ©s (Specify number of deletions to process) pendant une exĂ©cution. Il s’agit de garde-fous Ă©vitant par exemple une suppression de masse suite Ă  une mauvaise manipulation.

Enfin, la dernière Ă©tape de l’assistant configure des limites d’Ă©criture au niveau du Connector Space, de lecture sur le système connectĂ© ainsi qu’un timeout de connexion sur celui-ci. Ces valeurs ne doivent en gĂ©nĂ©ral pas ĂŞtre personnalisĂ©es.

Run Profile 03

Dans notre exemple, j’ai créé un profil d’exĂ©cution avec les Ă©tapes Full Import / Full Synchronisation pour le Management Agent SQL et un second avec les Ă©tapes Full Import / Full Synchronisation / Export pour le Management Agent AD. Pour ce dernier, nous exĂ©cutons toutes les Ă©tapes au travers d’un profil d’exĂ©cution.

Run Profile 04

Aussi, l’une des fonctionnalitĂ©s utile offertes par le panneau de gestion des profils d’exĂ©cution est le bouton Script. En effet, celui-ci gĂ©nère des scripts VBS qui exĂ©cute le profil sĂ©lectionnĂ©. Il n’y a plus qu’Ă  les utiliser dans des tâches planifiĂ©es pour lancer Ă  intervalle rĂ©gulier un cycle de synchronisation. Malheureusement, pour des scripts en Powershell, il faudra les Ă©crire vous-mĂŞme.

Il est dorĂ©navant possible d’exĂ©cuter chaque Management Agent avec le bouton Run puis en sĂ©lectionnant le profil d’exĂ©cution qui nous convient.

Lors de la prochaine partie, nous verrons comment analyser les rĂ©sultats d’une exĂ©cution puis nous nous intĂ©resserons Ă  l’administration du service de synchronisation de FIM.

Gestion de licence Office 365 en PowerShell

 

Bonjour, nous allons voir les bases pour gérer ses licences O365 en powerShell

Connexion au tenant O365

 

Nous allons enregistrer les informations de connexion

$cred = Get-Credential

Puis nous allons nous connecter au tenant lié au informations de connexion enregistré précédemment.

Connect-MsolService -Credential $cred

 

Récupération des offres

Si vous n’avez pas d’erreur vous êtes connecté a votre tenant.

Nous allons récupérer les infos sur nos offres

Get-MsolAccountSku | Format-Table AccountSkuId

 

Nous allons ensuite listé les produits disponible dans l’offre que nous allons assigner.

$ServicePlans = Get-MsolAccountSku | Where {$_.SkuPartNumber -eq “ENTERPRISEPREMIUM_NOPSTNCONF”}
$ServicePlans.ServiceStatus

 

Voici les correspondances produits des valeurs de servicePlan pour un abonnement E5.

image

Création d’une offre personnalisée

En nous basant sur les valeurs servicesPlan, nous allons créer notre option de licence.

$MyO365Sku = New-MsolLicenseOptions -AccountSkuId piservices:ENTERPRISEPREMIUM_NOPSTNCONF -DisabledPlans LOCKBOX_ENTERPRISE,EXCHANGE_ANALYTICS,ATP_ENTERPRISE,MCOEV,INTUNE_O365,MCOSTANDARD,EXCHANGE_S_ENTERPRISE

Le paramètre –DisabledPlans permet des choisir les éléments que l’on souhaite désactiver dans l’offre.

 

Attribution de la licence

Pour des raison légal il faut spécifier le pays où a licence sera utilisé.

Set-MsolUser -UserPrincipalName adrien.gougeon@piservices.fr -UsageLocation FR

Enfin nous n’avons plus qu’a associer notre licence avec nos options.
Set-MsolUserLicense -UserPrincipalName adrien.gougeon@piservices.fr -AddLicenses piservices:ENTERPRISEPREMIUM_NOPSTNCONF -LicenseOptions $MyO365Sku

 

version script

Voici en bonus les commandes dans un script simple et fonctionnel.

$cred = Get-Credential
Connect-MsolService -Credential $cred

$MyO365Sku = New-MsolLicenseOptions -AccountSkuId piservices:ENTERPRISEPREMIUM_NOPSTNCONF -DisabledPlans LOCKBOX_ENTERPRISE,EXCHANGE_ANALYTICS,ATP_ENTERPRISE,MCOEV,INTUNE_O365,MCOSTANDARD,EXCHANGE_S_ENTERPRISE

$users=Get-MsolUser -Synchronized -UnlicensedUsersOnly | where {$_.UserPrincipalName -notlike ‘adm_*’ -and $_.UserPrincipalName -like ‘*@piservices.fr’} | select -Property UserPrincipalName

Foreach ($user in $users) {

    Set-MsolUser -UserPrincipalName $user.UserPrincipalName -UsageLocation FR

    Set-MsolUserLicense -UserPrincipalName $user.UserPrincipalName -AddLicenses piservices:ENTERPRISEPREMIUM_NOPSTNCONF -LicenseOptions $MyO365Sku

}

Nous avons la commande :

Get-MsolUser -Synchronized -UnlicensedUsersOnly | where {$_.UserPrincipalName -notlike ‘adm_*’ -and $_.UserPrincipalName -like ‘*@piservices.fr’} | select -Property UserPrincipalName

Cette commande permet d’obtenir les utilisateurs qui sont synchronisés et sans licence. le résultat est ensuite filtré pour enlever les comptes admins et cibler le domaine que nous voulons manipuler et enfin nous ne prenons que le champ UserPrincipalName car c’est le seul qui nous sert pour le script.

Bonus

Voici en bonus des commandes utiles pour améliorer vos scripts.

Pour sélectionner toutes les entrée d’une OU sans les sous-OU et mettre une valeur dans extensionAttribute15.

Get-ADUser -Filter * -SearchBase « VOTRE OU » -SearchScope 1 -Properties extensionAttribute15 | Set-ADUser –Add @{extensionAttribute15= »AzureAdSync »}

Cette commande peut vous être utile si vous faites de la synchro d’AD on-premise avec azure AD connect

Ajout d’un serveur Nano dans le domaine à partir de l’unattend.xml

Nous allons voir comment ajouter un serveur Nano dans le domaine à partir du fichier unattend.xml qui sera exécuté au premier lancement du serveur Nano à l’aide du contenu du fichier blob.

Dans un premier temps, sur votre contrôleur de domaine lancer la commande suivante :

djoin  /provision /domain labo.local /machine HYPV-1 /SAVEFILE HYPV-1

pour le commutateur /domain vous devez préciser le nom de votre domaine.

pour /machine, vous devez préciser le nom de la machine qui sera provisionner dans le domaine

pour /SaveFile, il s’agit du nom de fichier

image

 

Un fichier Blob a été généré

image

 

Observer son contenu en l’ouvrant avec notepad

image

Le contenu de ce fichier devra être présent dans le fichier unattend.xml du serveur entre les balises <AccountData> et </AccountData>.

image

Corps de l’unattend:

<?xml version='1.0' encoding='utf-8'?>  
<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  
  <settings pass="offlineServicing">  
    <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">  
        <OfflineIdentification>                
           <Provisioning>    
             <AccountData></AccountData>  
           </Provisioning>    
         </OfflineIdentification>    
    </component>  
  </settings>  
  
  <settings pass="oobeSystem">  
    <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">  
      <UserAccounts>  
        <AdministratorPassword>  
           <Value>MonMotDePasse</Value>  
           <PlainText>true</PlainText>  
        </AdministratorPassword>  
      </UserAccounts>  
      <TimeZone>Pacific Standard Time</TimeZone>  
    </component>  
  </settings>  
  
  <settings pass="specialize">  
    <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">  
      <RegisteredOwner>My Team</RegisteredOwner>  
      <RegisteredOrganization>My Corporation</RegisteredOrganization>  
    </component>  
  </settings>  
</unattend>  

 

Copier coller le contenu entre les balises.

image

 

Depuis un accès Offline, appliquer maintenant le fichier unattend sur le serveur

image

 

Démarrer le serveur

image

 

Authentifier vous avec un compte admin du domaine

image

 

L’authentification a réussi. On remarque également que notre serveur est maintenant dans le domaine.

image