Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles Ă  la une

System Center Orchestrator 2012 R2 : Accéder à la console web via une VIP

Introduction

Dans le cadre d’une infrastructure Orchestrator 2012 R2 en haute disponibilitĂ©, il est nĂ©cessaire de crĂ©er une ou plusieurs VIP pour les services web de ce produit. Pour rappel, ils sont au nombre de deux :

  • Le web service, accessible via le port 81 avec une url du type : http://nom_du_server:81/Orchestrator2012/Orchestrator.svc 
  • La console web (en silverlight), accessible via le port 82 avec une url du type : http://nom_du_serveur:82/

Le sujet de la haute disponibilitĂ© n’est dĂ©taillĂ© que pour le rĂ´le runbook server d’Orchestrator. Concernant les services Web, il n’y a aucune documentation proposĂ©e par Microsoft Ă  l’heure actuelle (20/11/2014).

Dans cet article, je ne dĂ©taillerai pas la crĂ©ation de la VIP qui n’a rien de particulier. Il s’agit plutĂ´t de voir la configuration Ă  rĂ©aliser sur les serveurs Orchestrator portant les services web.

Au niveau des prĂ© requis, il est donc nĂ©cessaire d’avoir au moins deux serveurs Orchestrator rĂ©pondant aux services web citĂ©s prĂ©cĂ©demment.

Erreur rencontrée

Après avoir configurĂ©e une VIP, lorsque l’on essaie d’accĂ©der au web service, cela ne pose aucun problème. Cependant ce n’est pas le cas de la console web.

En effet, la page web n’affichera que le squelette de la page web et tentera de vous afficher du contenu pendant un certain temps avant que vous n’obteniez le message d’erreur suivant :

Popup Arg SecurityException

Cette première erreur, [Arg_SecurityException], ne nous donne pas d’information concrète et il n’y a rien dans les logs IIS. Après avoir validĂ© ce message, vous obtiendrez une seconde popup :

Popup web services error

Ce message est plus concret puisqu’il nous informe qu’il y a une erreur avec le web service (service arrĂŞtĂ©, URL du service non valide ou accès refusĂ©). Cela nous confirme que l’IHM est basĂ©e sur le web service. Elle l’utilise afin de rĂ©cupĂ©rer les donnĂ©es de l’infrastructure Orchestrator.
 

Configuration

Afin de rendre opérationnelle notre VIP pour la console web Orchestrator, il faut réaliser une série d’opération sur IIS qu’il conviendra d’exécuter une ou plusieurs fois. En voici une liste récapitulative :

  • Configuration du pool d’application : A rĂ©aliser sur les deux sites web (console web et web services) sur tous les serveurs (nĹ“uds) les proposant (via IIS Manager).
  • Ajout de SPN sur le compte de service Orchestrator : A rĂ©aliser une fois (via une invite de commande).
  • Configuration des sites web pour l’utilisation des informations d’authentification du compte de service du pool d’application : A rĂ©aliser sur les deux sites web (console web et web services) sur tous les serveurs (nĹ“uds) les proposant (via IIS Manager).
  • ImplĂ©mentation de l’url utilisĂ©e par la console web pour accĂ©der aux web services : A rĂ©aliser sur le site console web Orchestrator sur tous les serveurs (nĹ“uds) le proposant (via IIS Manager).
  • RedĂ©marrage des sites web Orchestrator : A rĂ©aliser sur les deux sites web (console web et web services) sur tous les serveurs (nĹ“uds) les proposant (via IIS Manager).

Configuration du pool d’application :

Tout d’abord, il faut se rendre dans la console IIS Manager. Par défaut, Orchestrator utilise le pool d’application par défaut alors qu’il en crée un nommé System Center 2012 Orchestrator Web Features qui est défini avec le compte de service Orchestrator. Les deux sites web doivent donc être configurés pour utiliser ce pool d’application. Pour ce faire, on sélectionne le site web Microsoft System center 2012 Orchestrator Web Service, on clique sur Advanced Settings puis on parcours la liste des pools d’application disponibles,

updateapppool

Il suffit ensuite de sélectionner le pool System Center 2012 Orchestrator Web Features et de valider.

chooseapppool

NB : L’opération ci-dessus est à réaliser pour les deux sites web (Microsoft System center 2012 Orchestrator Web Service, Microsoft System center 2012 Orchestrator Orchestration console) sur la totalité des nœuds Orchestrator portant ces sites.

Ajout des SPNs nécessaires :

La seconde étape est l’ajout des SPN liés aux URLs utilisés pour accéder à la console web et aux web services Orchestrator au compte de service Orchestrator. Voici la liste des commandes à lancer pour ajouter les SPNs nécessaires (à noter vipihm et vipwebsvc peuvent être identiques si vous n’utilisez qu’une seule VIP pour la console web et pour les web services) :

SetSPN.exe –A HTTP/sco1 DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/sco1.myenterprise.com DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/sco2 DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/sco2.myenterprise.com DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/vipihm.myenterprise.com DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/vipwebsvc.myenterprise.com DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/vipihm DOMAIN\SERVICE_ACCOUNT
SetSPN.exe –A HTTP/vipwebsvc DOMAIN\SERVICE_ACCOUNT

Attention : N’oublier de remplacer sco1, sco2, vipihm et vipwebsvc par les valeurs de vos noeuds Orchestrator et de vos VIPs. DOMAIN\SERVICE_ACCOUNT doit être remplacé par votre compte de service.

NB : Cette opération n’est à réaliser qu’une seule fois.

Utilisation des informations d’authentification du compte de service du pool d’application :

Nous devons ensuite définir l’utilisation des informations d’authentification du compte de service du pool d’application sur les différents sites web. On sélectionne l’un des sites web Orchestrator dans IIS Manager puis on choisit Configuration Editor :configurationeditor Il faut parcourir l’arborescence jusqu’au niveau : system.webServer, security, authentication, windowsAuthentication.

updatewindowsauthent Enfin, la propriété useAppPoolCredentials doit être défini à la valeur True.

useapppoolcred

NB : L’opération ci-dessus est à réaliser pour les deux sites web (Microsoft System center 2012 Orchestrator Web Service, Microsoft System center 2012 Orchestrator Orchestration console) sur la totalité des noeuds Orchestrator portant ces sites.

Définir l’url utilisée par la console web pour accéder aux web services :

La dernière étape consiste à définir l’url utilisée par la console Orchestrator pour accéder aux web services. Dans IIS Manager, il faut sélectionner le site web Microsoft System center 2012 Orchestrator Orchestration console et cliquer sur Application Settings.

applicationsettingsLa valeur de l’attribut ScoServiceUri doit être changée avec la valeur de la vip : http://nom_vip:81/Orchestrator2012/Orchestrator.svc

scoserviceuri
Attention, si comme moi, vous dĂ©cider d’effectuer un transfert de port (81 vers 80), alors il faudra supprimer ce dernier de l’URL : http://nom_vip/Orchestrator2012/Orchestrator.svc"

NB : L’opération ci-dessus est à réaliser pour le site Microsoft System center 2012 Orchestrator Orchestration console sur la totalité des nœuds Orchestrator portant ces sites.

Redémarrage des sites web :

Il ne vous reste plus qu’Ă  redĂ©marrer les site web sur tout les nĹ“uds Orchestrator via l’interface de IIS :
 restart

NB : L’opération ci-dessus est à réaliser pour les deux sites web (Microsoft System center 2012 Orchestrator Web Service, Microsoft System center 2012 Orchestrator Orchestration console) sur la totalité des nœuds Orchestrator portant ces sites.

Une fois l’opĂ©ration effectuĂ©e, la VIP est opĂ©rationnelle.

A titre informatif, l’environnement sur lequel la configuration a Ă©tĂ© testĂ©e Ă©tait composĂ© d’un HLB F5 possĂ©dant une VIP avec transfert de port 81 vers 80 pour le web services et une autre VIP pour la console Silverlight (port 82 vers 80). Cependant, cette configuration est valable quelque soit l’environnement.

Powershell / Active directory: Traduire le SID <=>l’utilisateur

 

CADRE:

Cet article vise un public débutant en powershell ne connaissant pas bien l’utilisation des classes objets avec powershell.

INTRODUCTION:

Dans cet article nous allons expliquer comment Traduire le SID lié à un utilisateur active directory ou local ou encore l’inverse.

Il faut savoir que Powershell est fondé sur la programmation objet.

Nous avons besoin d’installer aussi Net Framework 4.5, pour avoir les classes d’objets suivant sous powershell: 

1- System.Security.Principal.SecurityIdentifier (SID)

2- System.Security.Principal.NTAccount (compte NT)

SCRIPT:

Traduire le l’utilisateur en SID:

1-  CrĂ©ation de l’objet de la classe System.Security.Principal.NTAccount qui permet de reprĂ©senter un utilisateur ou un groupe dans une variable $objUser .

$objUser = New-Object System.Security.Principal.NTAccount("administrator")

2-  Traduction de l’objet de la classe System.Security.Principal.NTAccount qui reprĂ©sente un utilisateur ou un groupe en classe System.Security.Principal.SecurityIdentifier qui reprĂ©sente le SID Ă  savoir que .translate() après le $objUser est la mĂ©thode qui permet la traduction mais c’est la classe de l’objet contenue dans () sur lequel s’appuie la traduction (en quoi on veut le traduire) sans cela aucune traduction n’est possible .

$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])

2-  Traduction de l’objet Ă©tant effectuĂ© et mise dans une variable $strSID nous avons plus qu’à regarder la valeur de la variable en tapant .value après $strSID

$strSID .Value

affiche: S-1-5-21-29

Traduire le SID en Nom d’utilisateur:

Nous avons vu comment traduire l’utilisateur en SID l’inverse est tout simplement d’inverser les classes d’objets avec les noms des variables correspondant.

$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-546")

$objUser = $objSID.Translate([System.Security.Principal.NTAccount])

$objUser.Value

affiche: BUILTIN\Invités

Powershell / Active Directory : Intégration de la photo des utilisateurs

Introduction

Cet article a pour but d’expliquer la gestion des photos dans l’annuaire Active Directory via une intégration par un script Powershell. En effet, le référentiel photo d’une entreprise ne respecte pas forcément les préconisations Microsoft. Grâce à un script, nous allons voir comment les respecter et peupler un annuaire Active Directory. La solution proposée permettra d’automatiser le processus en s’affranchissant d’outils tiers qui peuvent réaliser cette opération.

Solution

L’attribut AD permettant de renseigner la photo est thumbnailPhoto. Il y a plusieurs restrictions sur une image de profil :

  • la résolution est limitée à 96×96 pixels
  • la taille ne doit pas éxéder 100Kb

La valeur stockée dans l’attribut thumbnailPhoto est un tableau de bytes.

La solution proposée utilise des classes .Net issue de System.Drawing. Ainsi, on va pouvoir redéfinir la taille d’une image, la centrer et éventuellement définir la qualité si la photo est trop lourde. Afin d’être le plus portable possible, le script interroge Active Directory via ADSI pour réaliser la modification de l’attribut thumbnailPhoto.

NB : Depuis la V15 des produits d’infrastructure Microsoft et grâce au couple Exchange 2013/Lync 2013, il est possible de stocker des photos d’une résolution de 648*648 pixels directement dans la boîte aux lettres de l’utilisateur. Cette dernière est accédée directement via les Exchange Web Services par Lync. Une copie d’une résolution de 48×48 est toujours stockée dans l’attribut thumbnailPhoto.

Script

Le script permet de rendre conforme la photo d’un utilisateur et de la placer sur l’objet Active Directory dans l’attribut thumbnailPhoto. Pour chaque utilisateur, il est nécessaire de renseigner les paramètres suivants :

  • le samaccountname de l’utilisateur
  • le dossier contenant la photo
  • le nom du fichier photo
  • l’extension du fichier photo
Le script possède deux fonctions. Set-ADUserPhoto, requête l’annuaire Active Directory pour obtenir l’utilisateur via son SamAccountName. L’attribut thumbnailPhoto est ensuite mis à jour avec la valeur qui est retournée par la fonction Resize-Photo. Cette dernière retourne l’image sous la forme d’un tableau de bytes. Elle insère l’image d’origine dans une nouvelle image Bitmap possédant les limites de dimensions spécifiées (dans notre cas 96×96 pixels). Tout surplus sur les côtés est donc supprimé. L’image d’origine est positionnée de façon à se situer au centre. Enfin cette image est enregistrée en mémoire. Sa taille est évaluée. Si sa taille est supérieure au poids maximal choisi (ici 100Kb) alors on génère une nouvelle image en faisant varier la qualité (il s’agit d’un pourcentage que l’on décrémente de 5% à chaque essai).

Pour vérifier que l’opération s’est correctement exécutée, il suffit de vérifier dans la console Active Directory Users and Computers que l’utilisateur possède bien une valeur pour l’attribut thumbnailPhoto (via l’éditeur d’attribut). La photo peut ensuite être consultée via Outlook (pour les messageries Exchange) ou le client Lync. thumbnailPhoto

Ce script s’exécute utilisateur par utilisateur. Il est possible d’imaginer une logique de traitement « en masse ».

Voici un script pour remplacer la région Main du script traitant l’intégralité des comptes utilisateurs Active Directory.
On suppose que toutes les photos sont stockées dans le même répertoire et portent comme nom de fichier le samaccountname de l’utilisateur. Bien entendu, cette partie reste adaptable en fonction des besoins. Il est par exemple possible de changer la racine de la recherche pour ne cibler qu’une unité d’organisation. Pour se faire, il faut remplacer $Root = [ADSI] » par le distinguished name de l’unité d’organisation ciblée. Exemple :
A titre informatif, la fonction Resize-Photo peut être totalement décorrelée du processus de mis à jour de l’objet AD et être utilisée pour d’autre situation. Il est en effet possible de sauvegarder l’image générée dans un fichier plutôt qu’en mémoire en changeant un paramètre de la méthode Save :
Il faut remplacer la variable $Ms (représentant le buffer mémoire que l’on a instantié) par un chemin de fichier.