Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

Créer une machine virtuelle dans Microsoft Azure

Nous allons voir ici comment créer une machine virtuelle dans le cloud de Microsoft, Azure.

Il est intéressant de migrer vers la plateforme Azure car Microsoft offre beaucoup d’avantages. Notamment pour bénéficier des performances d’un Datacenter sans vous soucier de sa gestion et en ne payant que ce que vous consommez.

Voici les différentes étapes à suivre pour créer une machine virtuelle. Dans mon exemple, je vais créer une VM avec Windows Server 2012 R2.

Création

Dans un premier temps, il faut ouvrir le portail de gestion : https://manage.windowsazure.com/.

Cliquez sur “Nouveau” en bas à gauche :

image Choisissez “Calcul” –> “Machine virtuelle” –> “A partir de la galerie” :

image L’assistant démarre. Choisissez une image Windows Server. Ici vous pouvez choisir la version et l’édition. Cliquez sur suivant en bas à droite.

imageSaisissez le nom de la machine virtuelle, la taille (voir la grille de prix) ainsi que le compte d’administration et le mot de passe. Cliquez sur suivant.

image Choisissez ici le nom DNS public de la machine, l’abonnement associé et l’emplacement de la VM (zone du datacenter Microsoft). Cliquez sur suivant.

image Cliquez sur valider.

image Patientez quelques minutes pendant la création de la VM. Une fois fini vous devez avoir ce message :

image Dans le tableau de bord, on peux voir la VM :

image

Gestion

Pour gérer votre serveur à proprement parler, il faut pouvoir se connecter dessus. Pour cela, plusieurs méthodes nous sont offertes. Avant tout, il faut aller dans les paramètres de la VM de la console Azure, puis configurer les points de terminaison.

image

On voit ici qu’il y’a le RDP et le PowerShell actif par défaut. Il est possible de changer les ports public pour l’administration ainsi que de rajouter d’autres protocoles, tel que SSH, HTTPS, MSSQL, suivant vos besoins.

En RDP

Il suffit d’ouvrir le bureau à distance et de saisir l’adresse du serveur et le port public.image Il faut saisir le compte d’administration renseigné lors de la création de la VM. Attention à bien saisir le login sous la forme NomVM\NomUtilisateur.

image Nous voici connectés au bureau de la VM !

image

En Powershell

Il faut installer les outils Powershell pour Windows Azure (lien : http://go.microsoft.com/fwlink/p/?linkid=320376&clcid=0x409) ensuite ouvrir la console “Windows Azure Powershell”.

Il faut commencer par se connecter a son compte Azure avec la cmdlet “Add-AzureAccount”.

Ensuite, petite subtilité, il faut bien choisir l’abonnement utilisé pour créer la VM, voici un exemple :

image

Il est possible d’obtenir toutes les informations de la VM, de manière identique à un déploiement HyperV sur site, mais avec les particularités Azure (InstanceSize, DNSName,…).

image 

Conclusion

 

Vous pouvez maintenant gérer vos machines virtuelles Azure. Il est aussi possible, bien sûr, de démarrer, arrêter les VM mais aussi en créer: de quoi automatiser vos déploiements.

Powershell / Exchange : Erreur 9323 – Certificat expiré sur un objet AD

Introduction

Cet article permet de montrer la gestion des certificats via Powershell au travers d’un problème concret rencontré sur une infrastructure Exchange. Une solution basée sur un script Powershell sera détaillée.

Erreur rencontrée

Contexte : Infrastructure Exchange 2010 avec plusieurs dizaine de milliers de contacts Active Directory importés et mis à jour par un outil tierce.

Dans l’observateur d’événements de nombreux événements 9323 apparaissent.

9323

Ces derniers sont liés à la génération de l’OAB. Exchange détecte un utilisateur dont un certificat est expiré. Ces événements n’apparaissent que sur des objets de type "Contact"  La solution doit contrôler tous les objets Active Directory de ce type.

Solution

La soluton proposée pour purger les certificats invalides des contacts Active Directory se base sur un script Powershell V2. Ce dernier analyse l’attribut UserCertificate (il s’agit d’une liste de certificat).

Avec le type d’objet "System.Security.Cryptography.X509Certificates.X509Certificate2", il est possible d’obtenir des informations sur les certficats contenus dans cet attribut sous forme lisible (et non pas un tableau de bytes ou de valeur hexadécimal comme sur la console Active Directory Users and Computers).

Ci-dessous, un exemple de données récupérées sur les certificats d’un objet Active Directory (ici, il n’y a qu’un seul certificat et la variable $User est un utilisateur Active Directory).

Certificate

On remarque qu’on accède à des renseignements comme l’émetteur ou le sujet. Les informations qui nous interessent (dates de validité du certificat) sont aussi présentes. Il suffit donc de comparer la date d’expiration contenue dans l’attribut "notAfter" avec la date du jour en cours pour détecter les certificats expirés.

Grâce à la cmdlet "Set-ADObject", il sera ensuite possible de supprimer les certificats qui ne sont plus valides.

Script

En amont de ce script, un transcript est lancé afin de loguer toute les opération effectuées. Une vérification de la présence du module ActiveDirectory ainsi que son chargement sont ensuite réalisées.

Le script appelle une fonction créée pour traiter tout objet AD (ou tableau d’objets AD) qui lui est passé. Pour ma part, je transmets en paramètre tous les contacts présents dans Active Directory. Cependant cette fonction peut très bien être utilisée avec des utilisateurs. Voici l’algolrithme mis en place dans la fonction Test-CertExpiration :

  1. Filtrage des objets pour ne conserver que ceux ayant au moins un certificat présent dans l’attribut userCertificate.
  2. Boucle ForEach sur tous les utilisateurs :
    1. Boucle For sur tous les certificats de l’utilisateur (pas de ForEach afin d’être certain de la position du certificat dans l’attribut userCertificate)
    2. Analyse de la date d’expiration
    3. Si le paramètre DeleteExpired est présent alors on supprime le certificat dans Active     Directory s’il n’est plus valide.
    4. Si le paramètre DeleteExpired n’est pas présent alors deux attributs sont ajoutés à l’objet     AD :
      1. CertExpired : contient les index des certificats expirés dans le tableau de l’attribut userCertificate
      2. CertValid : contient les index des certificats valides dans le tableau de l’attribut userCertificate
  3. Si le paramètre Export et ExportPath ont été renseigné alors le tableau d’objet AD est exporté sous format CSV avec la liste des index des certificats valides et expirés.

Ci-dessous, vous trouverez le script intégralement commenté. A noter, que le compte exécutant ce script doit posséder les droit suffisants à la modifications des objets AD concernés (via une délégation par exemple).

Ici, la fonction Test-CertExpiration, est utilisée en mode suppression, cependant il est aussi possible de se servir du mode Export pour n’effectuer qu’un simple audit (logué dans un fichier) des objets concernés via la commande suivante :

$ADObjets est un tableau d’objets Active Directory.

Il est enfin possible de ne donner qu’un tableau d’objets AD à traiter sans spécifier le mode export ou suppression :

Dans ce cas, un tableau d’objets AD est retourné. Pour chaque objet, les attributs CertExpired et CertValid sont ajoutés.

Quelques points clés du fonctionnement de la fonction Test-CertExpiration :

Les paramètres Export et DeleteExpired sont de type switch et ne peuvent apparaître ensemble. Le paramètre ExportPath est dynamique et n’est disponible que si le paramètre Export a été choisi.

Pour information, il n’est pas nécessaire de paralléliser le processus de contrôle du certificat. Après un test effectué sur plus de 90000 contacts Active Directory, il s’avère que ce dernier a duré moins de 5 minutes. Utiliser du multi thread (workflow ou job Powershell) alourdirai le script et ralentirai le processus au lieu de l’accélérer.