Archives mensuelles : janvier 2017

Séance de Cluedo avec ADFS : Authentification ADFS en boucle sur Office 365

On est quelques un à s’être cassé les dents dessus. Le fameux cas ou quoi que l’on fasse nos utilisateurs de services fédérés avec la solution ADFS ne peuvent pas s’authentifier sur Office 365. C’est un cas que l’on peut reproduire avec toutes les versions d’ADFS. En fait, nos utilisateurs peuvent s’authentifier autant qu’ils le veulent, ça les ramène toujours à la mire d’authentification.

clip_image001

Sur ce sujet, Microsoft a écrit de beaux articles :

J’ai eu beau retourner ces articles dans tous les sens, impossible de trouver le pourquoi. J’avais juste quelques premières constatations. Quelque chose me disait qu’il y avait un coupable mais impossible de savoir comment le colonel moutarde avait tué dans la bibliothèque. Voilà quelles étaient mes premières constatations :

  • Si on s’authentifie avec un compte qui n’existe pas ou un mot de passe faux, tout se déroule normalement
  • Du point de vue ADFS, cela fonctionne, j’ai bien un Event qui m’indique qu’un ticket Kerberos a été délivré
  • Ça ne concerne pas tous les comptes (sinon c’est pas drôle)

Après quelques heures de recherche, j’ai exclus Office 365 de la liste des suspects, tout comme les F5 BIG-IP et même les serveurs Web Application Proxy. En procédant par élimination, il ne restait donc que les deux serveurs ADFS de ma ferme. Vu que j’arrivais toujours à reproduire le problème en bloquant l’un ou l’autre de mes serveurs ADFS, j’en ai donc conclus que le problème était partagé par les deux serveurs de la ferme. Plus la peine de descendre plus bas, le coupable est nécessairement à cet étage. C’est en observant le fonctionnement de la ferme ADFS avec des comptes pour lesquels cela fonctionne et d’autres pour lesquels cela ne fonctionne pas que j’ai mis le doigt dessus.

Lorsqu’on reprend le processus de fonctionnement d’ADFS de bout en bout, notre serveur ADFS doit interroger l’annuaire Active Directory. Dans mon contexte, mon infrastructure ADFS utilise un compte de service GMSA. Voyant un token ADFS généré, je me disais qu’il n’y avait pas de problème. Erreur de ma part. J’ai fini par comparer les ACL sur les comptes différents comptes et finir par m’apercevoir d’un détail qui me choquait :

clip_image002

Ça a l’air de rien mais cette permission change tout lorsqu’on regarde un utilisateur, ou même un device :

clip_image003

C’est étrange mais quand elle est là (et que le compte de service de votre ferme ADFS n’est pas membre du groupe Admin du domaine), c’est tout de suite beaucoup plus facile pour ADFS de fonctionner normalement. Avec ces quatre permissions magiques, l’authentification ADFS fonctionne comme un charme. Maintenant qui m’a mis sur la voie ? Une fonctionnalité méconnue d’Active Directory : Effective Permissions, un vieux truc introduit avec Windows Server 2008 R2 !

clip_image004

En comparant les permissions effectives entre un compte pour lequel ADFS fonctionnait et un pour lequel la même infrastructure ADFS ne fonctionnait pas, j’ai fini par comprendre qu’il y avait une différence entre mes deux comptes et trouver les permissions manquantes. Accessoirement, ces permissions sont décrites dans le schéma comme on peut le voir ci-dessous :

clip_image005

Vu que le schéma n’avait pas altéré, j’en ait déduit qu’il y a eu modification des permissions au niveau de la racine du domaine (pas glop). Ne restait donc plus qu’à propager les bonnes permissions.

BenoîtS – Simple and secure by design but Business compliant (with disruptive flag enabled)

Certification Azure 70-533 : Implementing Microsoft Azure Infrastructure Solutions

ça c’est fait !

clip_image001

ça faisait longtemps que je devais la passer. J’avais une appréhension car ceux qui l’ont passé avant moi me disaient : Ça parle beaucoup d’ASM, très peu d’ARM. La certification n’était pas à jour par rapport Azure. Pour moi ça posait deux problèmes :

  • Premièrement, je ne fais que du CSP ces jours-ci dont pas possible de pratiquer autre chose que de l’ARM
  • Azure est en perpétuelle évolution. Rien que l’année dernière, Azure c’est plus de 500 nouveaux services ou nouvelles fonctionnalités pour services existants. Si cela se confirmait, cela signifierait que la certification serait totalement déconnectée de la réalité

Heureusement, en préparant ma certification, j’ai découvert plusieurs indices qui m’ont amené à penser que ce n’était pas les cas :

Par contre, cela ne veut pas dire qu’il faille faire l’impasse sur l’ancien Azure (ASM). Même si on ne déploie plus beaucoup de Cloud Services, faut au moins comprendre de quoi on parle. Ce n’est pas encore demain la veille qu’ASM rendra son dernier souffle. Avec les souscriptions Azure CSP, on va clairement dans cette direction.

Comment se préparer

On ne va pas faire de mystères. Il existe bien des outils pour se préparer à la certification. C’est effectivement un accélérateur mais je n’ai jamais été un grand fan. Ce n’est pas par ce qu’on est certifié Azure qu’on sait gérer une infrastructure en production en « Zero Downtime » ni même de concevoir une infrastructure hautement disponible. ça implique de l’expérience et donc de la pratique. Mon premier conseil sera donc de pratiquer pour se préparer à la certification.

Le second, sera de passer par la case formation. Là on dispose de plusieurs options :

  • La formation classique
  • L’auto-formation
  • Microsoft MOOCs

La formation « Classique » que je défends chez ABC-Systèmes. Nous pensons que cette approche est la plus enrichissante car elle permet l’échange entre les stagiaires et surtout la confrontation avec le monde réel. Autre avantage de la formation, pendant sa durée, les stagiaires sont uniquement focalisés sur un seul sujet. Les cours Azure que je délivre sont basés sur les cours Officiel Microsoft que j’enrichi avec mon expérience terrain. Si votre objectif n’est pas nécessairement la certification, c’est la méthode la plus appropriée. Fin de l’autopromotion.

La seconde option en auto-formation implique de la discipline et du temps. Une initiative intéressante en ce moment de la part de Microsoft est ce bundle. Celui-ci propose :

  • L’inscription à l’examen 70-533
  • L’accès à un outil en ligne pour se préparer à la certification 70-533 pendant 30 jours

Dans cette seconde approche, il manque un peu de contenu pour l’auto-formation. Pas de problème, les équipes de DX France ont passé un peu de temps pour concocter plein de contenu dans la Microsoft Virtual Academy :

La dernière option et la plus récente, ce sont les Microsoft MOOCs. L’initiative est intéressante mais implique beaucoup plus de travail. Déjà il n’y a pas de cours MOOC pour préparer l’examen 70-533. Il faudra donc couvrir plusieurs MOOCs pour couvrir tous les sujets de l’examen. Si vous êtes allergiques à l’anglais, passez votre chemin.

 

Quelques sujets à réviser

C’est posé en vrac, je ne donne pas les questions précise de l’examen mais plutôt le thème général :

  • Sachez identifier un workload supporté / non supporté dans Azure. Et oui, DirectAccess n’est pas supporté dans Azure
  • Sachez comment ajouter un disque de données en PowerShell, que ce soit en ASM ou en ARM. Si vous connaissez l’un, l’autre ressemble beaucoup, c’est de la logique
  • Sachez clairement comment uploader un VHD dans Azure et comment le rendre utilisable comme OS utilisable pour créer une machine virtuelle
  • Un Cloud Service, c’est deux fichiers. Sachez clairement à quoi sert chaque fichier même si vous n’allez plus en déployer
  • Sachez mettre en place un CDN. Pour comprendre faites-le au moins une fois
  • Bien connaître les fonctionnalités offertes par chaque édition de App-Services/ Azure SQL
  • Sachez comment activer le chiffrement de disque avec le Key Vault : Découverte d’Azure Disk Encryption (Preview)
  • Sachez à quoi cela sert de locker des ressources dans Azure : A quoi ça sert de locker ses ressources dans Azure?
  • Sachez comment empêcher le déploiement des certains services / SKU de services : Découverte d’Azure Resource Policy
  • Sachez comment mettre en œuvre Azure Site Recovery avec Hyper-V : Azure Site Recovery avec Hyper-V 1/3

 

Quelques tips pour le jour de l’examen

  • Anglais et rien qu’anglais. Le peu de fois que j’ai passé un examen Microsoft en Français j’ai clairement eu l’impression que la traduction était faite par les mêmes équipes qui ont fait la localisation de SCVMM. 120 minutes c’est le temps accordé pour répondre aux questions. En choisissant anglais, ce temps passe à 150 minutes vu que ce n’est pas notre langue natale. De plus, si vous avez utilisé les tests d’entrainement, ils sont en anglais, …
  • L’examen est organisé en section, passer à la section suivante implique qu’on ne peut plus revenir en arrière donc penser bien à clore chaque section individuellement.
  • Un doute, on marque la question. En marquant la question, on a une chance de pouvoir revenir dessus. Qui sait, dans les questions suivantes une autre va pouvoir nous orienter. Un des grands jeux de ce qui écrivent ces questions, c’est de poser deux voire trois fois la question, y a juste un détail qui change, à vous de l’identifier.
  • Quand on sait pas on procède par élimination pour ne conserver que les choix les plus logiques.
  • Utilisez la tablette. Certains sont capables de se faire une représentation mentale, d’autres comme moi doivent dessiner. Moi je dessine.
  • Question Hardcore : On reste calme. L’examen est adaptatif. De temps en temps, une question « hardcore » est incluse histoire de voir comment on se comporte. L’idée est de voir comment on réagit pour savoir si on est au-dessus du niveau général ou en dessous.

 

Voilà pour mon Feedback sur cet examen. Next move : 70-534 : Architecting Microsoft Azure Solutions.

 

BenoîtS – Simple and secure by design but Business compliant (with disruptive flag enabled)

Faciliter l’accès à la facture Azure

Azure, ce n’est pas que pour les IT-Pro, Dev ou Dev-Ops, c’est aussi pour le DAF. C’est lui qui paie la facture. Or jusqu’à il y a quelques jours, pour permettre à un DAF d’accéder à la facture Azure, il devait avoir les privilèges les plus élevés sur la souscription. Lui donnant aussi le droit d’annuler la souscription. Or, la première chose que demande le DAF, c’est de pouvoir accéder simplement à la facture.

Depuis quelques jours, c’est maintenant possible. Dans la gestion des souscriptions, on dispose d’une rubrique « Send my Invoice » comme illustré ci-dessous :

clip_image001

Ne reste plus qu’à référencer une adresse mail de destination et vos pourrez enfin répondre à la première demande de votre DAF.

clip_image002

Attention, je dis bien la première demande de votre DAF. Après il reviendra avec beaucoup d’autres questions tel que :

Pour la dernière, faudra passer un niveau de comptabilité avec comptabilité analytique.

BenoîtS – Simple and secure by design but Business compliant (with disruptive flag enabled)

Découverte Azure Queue

Dans mes projets Azure, j’accompagne souvent des clients qui migrent leurs applications vers Azure. Ces applications sont souvent organisées en front-end / back-end. Généralement, ça prend le forme d’un serveur web IIS/Apache pour la partie frontale et SQL Server / MySQL pour la partie back-end. D’un point de vue technique, il est tout à fait possible de migrer l’application dans Azure tel que. Pour une migration rapide, cela fonctionne. Par contre, il ne faut pas se leurrer, on aura des problèmes de scalabilité. Augmenter le nombre d’instance (scale-out) du composant frontal ne pose pas de problème particulier. Par contre, pour le composant dorsal, c’est un peu plus compliqué. On va être limité au Scale-Up. Or, si on multiplie le nombre de composants Front-end en conservant une unique instance du composant back-end (quel que soit la taille de l’instance), ça va pas le faire. Rien que la saturation des ports TCP, ça va être fatal.

C’est là qu’il est intéressant de passer un peu de temps dans les Design Patterns du Cloud (Azure). Un des Design Patterns va nous intéresser, celui nommé Queue-Based Load leveling. Le mécanisme de la Queue permet de jouer le rôle de buffer entre les multiples instances de notre composant frontal et notre unique composant dorsal. Cette approché permet de réduire l’impact de pics de charge et la disponibilité de notre application.

clip_image001

Dans le contexte de notre application, nous allons donc avoir de multiples instances qui vont déposer des messages dans une file d’attente qui sera dépilée par la partie back-end. Toujours dans les Design Patterns, on en trouve un très intéressant : Competing Consumers Pattern.

clip_image002

Si on arrive à introduire un service qui traite les messages déposés avant d’attaquer la base de données, on autoriser le traitement des messages en parallèle, augmentant la puissance de traitement tout en offrant scalabilité, disponibilité pour notre application. Voilà pour la théorie. Passons maintenant à la pratique dans Azure. Dans Azure, nous avons deux services de queues mis à notre disposition :

  • Azure Queues
  • Azure Service bus Queues

D’un point de vue technique, on peut dire qu’Azure Queues est la version basique et Azure Service bus Queues la version haut de gamme capable de gérer :

  • Des messages de plus grande taille
  • Une file d’attente de plus grande taille

Pour illustrer le propos, regardons ce qu’on peut faire avec la fonctionnalité Azure Queue qui est un sous-composant du Storage Account. On va commencer par se créer un environnement avec un groupe de ressources avec un Storage Account :

New-AzureRmResourceGroup -Name StorageQueue -Location « West Europe »

New-AzureRmStorageAccount -ResourceGroupName StorageQueue -Name storagequeuetp -Location « West Europe » -SkuName « Standard_LRS » -Kind Storage

clip_image003

 

Maintenant, nous avons juste besoin de récupérer la clé primaire d’accès à notre Storage Account pour générer une clé de contexte SAS et générer notre file d’attente :

$keys = Get-AzureRmStorageAccountKey -ResourceGroupName storagequeue -Name storagequeuetp

$context = New-AzureStorageContext -StorageAccountName storagequeuetp -StorageAccountKey $keys[0].value

New-AzureStorageQueue -name « tpabc » -Context $context

$Queue = Get-AzureStorageQueue -Name « tpabc » -Context $context

clip_image004

 

Positionnons-nous du côté de l’émetteur des messages, la partie front-end de notre application. En PowerShell, ce n’est pas aussi simple. Faut jouer un peu avec Dot.Net.

$message = New-Object -TypeName Microsoft.WindowsAzure.Storage.Queue.CloudQueuemessage -ArgumentList « Message à stocker dans la queue »

$Queue.cloudqueue.AddMessage($Message)

$Queue = Get-AzureStorageQueue -Name tpabc -Context $context

$Queue

clip_image005

 

En actualisant la variable $Queue, on constate que l’on a bien un message déposé dans la file d’attente. Maintenant, plaçons nous coté Back-End de l’application et dépilons les messages reçus

$InvisibleTimeout = [System.TimeSpan]::FromSeconds(10)

$dequeuemessage = $queue.cloudqueue.getmessage($InvisibleTimeout)

$dequeuemessage

clip_image006

 

Nous n’avons fait que lire ce message. Une fois le message traité, nous devons le supprimer de la queue :

$Queue.CloudQueue.DeleteMEssage($dequeuemessage)

$Queue = Get-AzureStorageQueue -Name tpabc -Context $context

$Queue

clip_image007

 

Constat : le compteur est revenu à 0.

Conclusion, migrer une application dans le Cloud ne la rend pas « Cloud native ». Cela implique bien souvent de la repenser en fonction des différents Design Patterns. Ça sert de venir à mes cours Azure. Que du TP custom avec des vrais morceaux de projets Azure.

Benoits – Simple and secure by design but Business compliant (with disruptive flag enabled)

Découverte d’AD FS Rapid Restore Tool

Avec le Cloud, il y a toujours des passages obligés. Après avoir convaincu les acteurs réticents (DAF, RSI/RSSI), le sujet de l’identité arrive en tête de liste avant même les aspects réseau. Avec en plus le Règlement Général sur la Protection des Données qui pointe le bout de son nez en 2018, autant dire que le sujet identité dans Azure est un sujet Top priorité. Pour un certain nombre de mes clients, cela implique la mise en œuvre d’une infrastructure ADFS (ou la migration) vers une version plus récente (genre Windows Server 2016). C’est pendant l’une de ces migrations que j’ai découvert un outil nommé AD FS Rapid Restore Tool. Au premier abord, j’ai pensé que l’outil était juste un outil de sauvegarde / restauration de configuration ADFS (ce qui est déjà très bien). Une fois installé, cela prend la forme d’un module PowerShell :

Import-Module ‘C:\Program Files (x86)\ADFS Rapid Recreation Tool\ADFSRapidRecreationTool.dll’

Get-Command | where {$_.Source -like « ADFSRapidRecreationTool »}

clip_image001

Si on creuse on peu, on est tout de suite intéressé par certaines fonctionnalités. Normalement, cela devrait vous sauter aux yeux.

clip_image002

En plus, coté mise en œuvre, ça tient en une seule ligne de PowerShell

Backup-ADFS -StorageType “FileSystem” -StoragePath “C:\ADFSBACKUP\” -EncryptionPassword “P@ssw0rd1234” -BackupComment “Clean Install of ADFS (FS)” -BackupDKM

clip_image003

La seule limite, c’est la capacité à exporter la clé privée de votre certificat. La même avec de la bonne volonté, il ne peut pas le faire. Par contre toute la configuration de votre infrastructure ADFS, sa base de données, tout est disponible sous la forme d’un package prêt à l’emploi pour une restauration. C’est bien plus efficace qu’un snapshot ou une sauvegarde du System State.

Là où le process est super intéressant, c’est qu’on peut aussi l’utiliser pour reconfigurer une infrastructure ADFS existante. Dans mon cas, je voulais basculer la base de données depuis des instances Windows Internal Database vers un véritable serveur SQL.

Restore-ADFS -StorageType “FileSystem” -StoragePath “C:\ADFSBACKUP\” -DecryptionPassword “P@ssw0rd1234” -ADFSName “adfs.simplebydesign.fr” -DBConnectionString “data source=fox.adfslab.local;initial catalog=adfsconfiguration;integrated security=true” -GroupServiceAccountIdentifier “ADFSLAB\MSAADFS$”

type c:\users\FOX.ADFSLAB\AppData\Local\ADFSRapidRecreationTool\PostRestore_Instructions01022017-213311.txt

clip_image004

OK, ça ne restaure pas non plus les fournisseurs d’authentification forte tiers (RSA, Gemalto, …). En même temps, je n’en ai pas besoin mon client a commandé l’utilisation de Windows Hello comme mécanisme d’authentification forte à son père noël. La configuration une fois restaurée est immédiatement opérationnelle.

Get-AdfsProperties | select ArtifactDbConnection

clip_image005

Un seul petit bémol à ce niveau, si la collation de votre nouvelle instance SQL n’est pas celle que vous vous attendez mais une version localisée, pensez à personnaliser la chaine de connexion SQL, sinon cela ne fonctionne pas. Pour les « Old School comme moi », avant la migration cela ressemblait à un truc comme cela :

clip_image006

Au passage, il ne faut pas oublier comment cela marche car c’est toujours comme cela qu’on va basculer les serveurs secondaires de la ferme, …

L’outil est compatible Windows Server 2012, Windows 2012 R2, Windows Server 2016, donc tout de suite utilisable pour une migration.

Benoits – Simple and secure by design but Business compliant (with disruptive flag enabled)