AZ-800 – Administration de l’infrastructure de base de Windows Server Hybrid

Dernier article avant cette fin d’année 2021, je profite pour vous souhaiter de très bonnes fêtes ????????????????.

Rentrons dans le vif du sujet avec une nouvelle certification Microsoft, Administrateur de Windows Server Hybrid Associé, apparue dans le Poster Microsoft à la rentrée 2021 et disponible depuis début décembre en version BETA.

Pour rappel, cette certification, de niveau Associé, se décompose en deux examens (AZ-800 et AZ-801), comme c’est le cas avec la certification d’Architecte Cloud, de niveau Expert :

Merci à Orin pour cette première introduction????.

Ces deux examens sont donc nécessaires pour obtenir ce nouveau badge. Dans cet article, nous allons de parler uniquement de l’examen AZ-800, dédié à l’administration de Windows Server dans ses fonctionnalités principales. Je referai un second article, début 2022, sur le second examen AZ-801, encore en BETA lui aussi.

Examen AZ-800 : Administration de l’infrastructure de base de Windows Server Hybrid

Avant de parler de mon ressenti personnel, je tenais à vous redonner ici quelques liens utiles pour préparer cet AZ-800 :

Malheureusement à l’heure où ces lignes sont écrites, aucune grande plate-forme de labs ne propose encore de cursus dédié à l’AZ-800. Le mieux est donc de disposer d’une souscription Azure pour faire ses essais in situ.

Et voici une seconde vidéo, dédiée uniquement à l’AZ-800, toujours préparée par Orin.

Chapitres de la certification AZ-800

Comme pour chaque examen, Microsoft détaille avec des pourcentages les différents thèmes abordés. Voici la liste pour cet examen AZ-800 :

  • Chapitre I : Déployer et gérer les services de domaine Active Directory (AD DS) dans des environnements sur site / cloud (30-35 %)
  • Chapitre II : Gestion des serveurs Windows et des charges de travail dans un environnement hybride (10-15%)
  • Chapitre III : Gestion des machines virtuelles et des conteneurs (15-20%)
  • Chapitre IV : Mettre en œuvre et gérer une infrastructure réseau sur site et hybride (15-20%)
  • Chapitre V : Gestion des services de stockage et de fichiers (15-20%)

Chapitre I : Déployer et gérer les services de domaine Active Directory (AD DS) dans des environnements sur site / Cloud

Aucun suspense, la gestion d’un domaine Active Directory est de loin la principale partie sanctionnée par cet examen. Le but ici est de mesurer vos connaissances sur les composantes d’un domaine. Autant dire que la maîtrise de ces derniers est fortement attendue. Pas de mystère ici, la pratique par l’expérience et ou l’apprentissage intensif peut vous sortir de là.

En plus de savoir déployer les multiples rôles serveurs possibles, gardez en tête que une certification de niveau Associé comportent toujours des questions techniques précises :

  • La connaissance des relations forêts / domaines / sites
Les composants logiques AD DS sont des structures que vous utilisez pour mettre en œuvre une conception AD DS adaptée à une organisation.
Les composants physiques dans AD DS sont les objets qui sont tangibles, ou qui décrivent des composants tangibles dans le monde réel.
  • La connaissance des rôles et leurs autorisations agissant sur les forêts / domaines
  • La connaissance des différents types de groupe (Sécurité / Distribution) et leurs impacts au travers des forêts / domaines

Les groupes de sécurité sont utilisés pour attribuer des autorisations à diverses ressources. Les applications de messagerie utilisent généralement des groupes de distribution, qui ne sont pas compatibles avec la sécurité.

  • La connaissance des composants techniques se cachant derrière un domaine, les FSMO.
The 5 FSMO Roles in Active Directory: What They Are and What They Do

La sécurité est un point présent dans toutes les certifications Microsoft. Par exemple ici, l’utilisation groupe de comptes de service managés comme principal de sécurité pour vous être demandé :

Add-KdsRootKey –EffectiveImmediately

D’autre part, cet examen fait aussi la part belle à Azure. Vous vous en doutez donc, attendez-vous à des questions portant sur les outils de synchronisation entre AD et Azure AD : Azure AD Connect / Azure AD Cloud Sync. Vous devez connaître la configuration de ces derniers et les options qu’ils proposent en sus.

Gardez en tête que cette certification porte la mention AZ dans son titre. Les références aux services Azure, Azure AD ou encore Azure AD DS sont hautement probables.

Comment mettre en place une liste de mots de passe bannis.

Sans oublier un autre sujet à maîtriser : nos bonnes amies les GPOs ????

Chapitre II : Gestion des serveurs Windows et des charges de travail dans un environnement hybride

Ayant suivi le chemin d’apprentissage associé à la certification AZ-800, Orin met clairement en avant dans les vidéos de démonstration Windows Admin Center (WAC), l’outil complet de gestion à distance :

Prenez le temps de tester la solution : Installez l’outil sur une machine proxy et d’enrôlez des serveurs dessus :

Qu'est-ce que Windows Admin Center ? | Microsoft Docs
Port 6515 par défaut ????.

On continue ? Qu’est qu’Azure Arc ?

Voilà ici une bien belle question, à laquelle des questions peuvent tomber ????.

Cet examen apporte aussi une approche technique pour les environnements hybride. Il est donc nécessaire de comprendre le bénéfice à utiliser Azure Arc pour intégrer et gérer des machines physiques.

A closer look at Azure Arc enabled servers - Microsoft Tech Community
Gestion possible des updates Windows via un enrôlement Azure Arc.

Chapitre III : Gérer les machines virtuelles et les conteneurs

Ce chapitre n’est pas le plus valorisé de cet examen, mais il aborde des sujets importants (Hyper-V, conteneurs, machines virtuelles sur Azure)

Concernant Hyper-V, j’ai trouvé que le chemin d’apprentissage de l’AZ-800 est assez bien fait :

Ensuite vient la partie des conteneurs sur Windows Server. Beurk ????. Je sais que je ne devrais pas dire ça, mais c’est une partie qui ne m’a jamais encore attiré. Aussi je préfère laisser parler Marc :

Enfin n’oubliez jamais les références directe à Azure. Soyez certain d’avoir des questions portant sur la création et la gestion des machines virtuelles sur Azure. Cela implique aussi tous les composants annexes à celles-ci, telles que les parties réseau ou stockage.

Si vous êtes déjà habitués à la partie IaaS sur Azure, les questions ne devraient pas vous poser de souci ????.

Chapitre IV : Mettre en œuvre et gérer une infrastructure réseau sur site et hybride

Ce chapitre est de poids égal au précédent. La partie DNS est intéressante car c’est encore un service que nous retrouvons aussi bien dans Windows Server que dans Azure :

Par exemple, il est possible de combiner à une architecture on premise, les besoins DNS de machines virtuelles hébergées sur Azure. Dans le cas, il faut toute de suite penser transfert conditionnel pour y arriver :

Les composants DNS sur Azure sont aussi présent dans le cursus de cet examen :

En plus de la partie DNS, prenez le temps de bien vous intéresser au rôle DHCP, disponible sur Windows Server :

D’autres rôles peuvent aussi faire partie des questions. Je pense par exemple à :

Installation d’un proxy d’application Web Azure AD.

Chapitre V : Gérer les services de stockage et de fichiers

Dernier chapitre de l’examen AZ-800, à ne pas négliger ! Le stockage est un élément majeur de toute infrastructure IT, car la data représente LA valeur à conserver, protéger, …

Il faut donc prendre le temps de s’intéresser à certains services, comme :

Conclusion

Pour ma part, cet examen ne fut pas une mince affaire. Comme à chaque fois pour les examens BETA, il faut attendre plusieurs semaines / mois pour avoir nos résultats. Les connaissances acquises ces dernières semaines via le chemin d’apprentissage m’ont beaucoup aidé, mais elles ne compensent pas la manque d’expérience sur des postes tels qu’administrateur système.

Aucun souci si les domaines sont votre quotidien ou si vous avez conservé de beaux restes ! Pensez malgré tout à aussi disposer de connaissances sur Azure pour réussir votre examen. Comme à chaque fois, les vidéos explicatives c’est très bien, mais la pratique est pour moi indispensable.

Windows Server 2022 Download (ISO, VHD, Azure)

Profitez aussi de cette période de fêtes pour souffler un peu et passer du temps avec vos proches. On se retrouve l’année prochaine ????.

Testez MSIX App Attach dans votre AVD

La conteneurisation applicative est accessible sur Azure Virtual Desktop depuis plusieurs mois. L’attachement via MSIX permet de fournir des applications à des machines virtuelles sans aucune installation locale. Cependant, Il est ici différent du format MSIX normal, car celui-ci est spécialement conçu pour AVD. Pour en savoir plus sur MSIX, consultez la page web Présentation de MSIX.

Pourquoi faire de la conteneurisation applicative pour Azure Virtual Desktop ?

Azure Virtual Desktop est principalement conçu pour délivrer une expérience utilisateur commune et partagée. Il arrive fréquemment que certains utilisateurs travaillent sur des applications spécifiques. Dans ce cas, il est possible de leur délivrer cet attendu de plusieurs manières :

  • Gestion de applications requises dans une image OS spécifiquement dédiée
  • Utilisation de solution de type Intune pour un déploiement distribué
  • Approvisionnement d’applications via des solutions tierces (Liquidware Flexapp, Citrix AppLayering)
  • Utilisation d’applications conteneurisées

Dans cet article, nous allons démontrer ensemble la dernière possibilité.

Etape 0 : Rappel des prérequis

Comme pour chaque déploiement réalisé sur ce blog, des prérequis sont nécessaires avant de pouvoir se concentrer sur MSIX AppAttach :

  • Un tenant Microsoft (AAD)
  • Une souscription Azure active
  • Un domaine Active Directory Domain Services (AD DS)
  • Un espace de stockage Azure joint au domaine AD DS
  • Un agent Azure AD Connect installé et synchronisé avec votre Azure AD
  • Un environnement Azure Virtual Desktop (Pool d’hôtes – Groupe d’application – Espace de travail – VMs)
  • Facultatif : un Azure Bastion pour faciliter les connexions RDP

Une fois votre environnement Azure en place, plusieurs étapes sont nécessaires pour arriver à la mise à disposition des applications conteneurisées.

Etape I : Déployer une nouvelle VM Azure Windows 10

Cette nouvelle machine virtuelle vous nous être utile pour créer différents composants nécessaires :

  • Création d’un certificat pour signature des packages MSIX
  • Création du package MSIX
  • Configuration des VMS AVD pour supporter la couche conteneur
  • Création de l’image VHD
  • Dépose de l’image VHD sur le partage de fichier
J’ai ici repris la même image Windows 10 que celle utilisée pour AVD.
Pas besoin d’adresse IP publique dans mon cas grâce à Azure Bastion.

Patientez quelques minutes une fois la création lancée :

Une fois cette VM créée, utilisez Azure Bastion pour vous connecter en RDP sur votre machine virtuelle :

Joignez cette machine virtuelle au domaine AD DS, puis redémarrez-là :

Etape II : Préparation du certificat

Reconnectez à votre VM MSIX via Azure Bastion, puis lancez Windows PowerShell ISE, en mode administrateur :

Exécutez les commandes PowerShell suivantes :

Schtasks /Change /Tn "\Microsoft\Windows\WindowsUpdate\Scheduled Start" /Disable
reg add HKLM\Software\Policies\Microsoft\WindowsStore /v AutoDownload /t REG_DWORD /d 0 /f
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager /v PreInstalledAppsEnabled /t REG_DWORD /d 0 /f
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Debug /v ContentDeliveryAllowedOverride /t REG_DWORD /d 0x2 /f
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
reg add HKLM\Software\Microsoft\RDInfraAgent\MSIXAppAttach /v PackageListCheckIntervalMinutes /t REG_DWORD /d 1 /f

Exécutez la commande PowerShell suivante pour générer un certificat auto-signé sur votre domaine (JLOUDEV), et stockez le dans le dossier Personal des certificats locaux :

New-SelfSignedCertificate -Type Custom -Subject "CN=Jloudev" -KeyUsage DigitalSignature -KeyAlgorithm RSA -KeyLength 2048 -CertStoreLocation "cert:\LocalMachine\My

Exécutez certlm.msc pour ouvrir la console des certificats locaux :

Lancez la commande d’Export sur ce nouveau certificat :

Cliquez sur Suivant :

Sélectionnez l’option Oui, exporter la clé privée, puis cliquez sur Suivant :

Cochez la case Exporter toutes les propriétés étendues, décochez la case Activer la confidentialité des certificats, puis cliquez sur Suivant :

Cochez la case Mot de passe, renseignez les deux champs dessous, puis cliquez sur Suivant :

Créez un nouveau dossier, par exemple celui-ci :

C:\MSIX

Renseignez le chemin de destination, puis cliquez sur Suivant :

Cliquez sur Terminer pour finaliser le processus :

Etape III : Déploiement du certificat sur les machines virtuelles AVD

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour déployer le certificat nouvellement généré dans Trusted People des machines virtuelles AVD :

$avdhosts = 'avd-vm-0','avd-vm-1'
$cleartextPassword = 'Demo!pass123'
$securePassword = ConvertTo-SecureString $cleartextPassword -AsPlainText -Force
$localPath = 'C:\MSIX'
ForEach ($avdhost in $avdhosts){
  $remotePath = "\\$avdhost\C$\MSIX\"
  New-Item -ItemType Directory -Path $remotePath -Force
  Copy-Item -Path "$localPath\jloudev.tk.pfx" -Destination $remotePath -Force
  Invoke-Command -ComputerName $avdhost -ScriptBlock {
     Import-PFXCertificate -CertStoreLocation Cert:\LocalMachine\TrustedPeople -FilePath 'C:\MSIX\jloudev.tk.pfx' -Password $using:securePassword
  } 
}

Un tour rapide grâce à Azure Bastion sur une des machines virtuelles AVD nous confirme la bonne présence du certificat :

Etape IV : Téléchargements de l’application Mozilla Firefox

Dans notre démonstration, nous allons télécharger la dernière version de Mozilla Firefox. Nous prendrons l’installation au format MSI, disponible ici.

Lancez le téléchargement depuis la machine virtuelle MSIX comme ceci :

Copiez le fichier téléchargé dans le dossier C:\MSIX :

Etape V : Préparation avant création

Avant de lancer la création, exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour désactiver le service de recherche de Windows :

$serviceName = 'wsearch'
Set-Service -Name $serviceName -StartupType Disabled
Stop-Service -Name $serviceName

Profitez-en également pour créer cette nouvelle arborescence :

New-Item -ItemType Directory -Path 'C:\MSIX\Firefox' -Force

Exécutez la commande PowerShell suivante pour supprimer le Zone.Identifier des fichiers d’installation téléchargés depuis Internet :

Get-ChildItem -Path 'C:\MSIX' -Recurse -File | Unblock-File

Etape VI : Création du package applicatif

Pour continuer, vous aurez besoin de MSIX Packaging Tool, que vous trouverez dans le Microsoft Store. Lancez le téléchargement de ce dernier, toujours depuis la machine virtuelle MSIX :

Une fois le téléchargement terminé, lancez l’application.

Sur la page d’accueil, sélectionnez Application package afin de lancer la création d’un nouveau paquet :

Vous aurez peut-être besoin de redémarrer la machine pour continuer.

Sur la page suivante, cochez la case Créer le paquet sur cet ordinateur, puis cliquez sur Suivant :

Attendez l’installation du pilote de l’outil de conditionnement MSIX, puis cliquez sur Suivant :

Sélectionnez Parcourir pour accéder au fichier d’installation de Firefox au format MSI :

C:\MSIX\Firefox Setup 95.0.msi

Dans la liste déroulante Préférence de signature, sélectionnez Signer avec un certificat (.pfx).

Recherchez le certificat C:\MSIX\jloudev.tk.pfx, saisissez le mot de passe Demo!pass123, puis cliquez sur Suivant :

Examinez et modifiez si besoin le nom du paquet, vérifiez que le nom de l’éditeur est défini sur CN=JLOUDEV, puis cliquez sur Suivant :

Cela déclenche alors l’installation de Mozilla Firefox de manière encapsulée :

Une fois l’installation terminée, vous retrouvez le message ci-dessous, cliquez sur Suivant :

Cliquez alors sur Suivant.

Lorsque le système vous demande Avez-vous terminé ?, sélectionnez Oui :

Vérifiez dans l’écran ci-dessous qu’aucun service n’est nécessaire, puis cliquez sur Suivant :

Changez le fichier et le dossier de destination :

C:\MSIX\Firefox\Firefox

Une fois la création terminée, cliquez sur Fermer :

Retrouvez les fichiers MSIX et XML suivants dans votre dossier C:\MSIX\Firefox :

Copiez seulement le fichier MSIX dans le dossier racine C:\MSIX :

Etape VII : Installation des fonctionnalités d’Hyperviseur

Maintenant, vous allez activer la fonctionnalité d’Hyperviseur sur l’ensemble des machines virtuelles Azure Virtual Desktop, mais également sur la machine MSIX :

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour commencer l’activation sur les VMs AVD :

$avdhosts = 'avd-vm-0','avd-vm-1'
ForEach ($avdhost in $avdhosts){
  Invoke-Command -ComputerName $avdhost -ScriptBlock {
     Schtasks /Change /Tn "\Microsoft\Windows\WindowsUpdate\Scheduled Start" /Disable
     reg add HKLM\Software\Policies\Microsoft\WindowsStore /v AutoDownload /t REG_DWORD /d 0 /f
     reg add HKCU\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager /v PreInstalledAppsEnabled /t REG_DWORD /d 0 /f
     reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Debug /v ContentDeliveryAllowedOverride /t REG_DWORD /d 0x2 /f
     reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
     reg add HKLM\Software\Microsoft\RDInfraAgent\MSIXAppAttach /v PackageListCheckIntervalMinutes /t REG_DWORD /d 1 /f
     Set-Service -Name wuauserv -StartupType Disabled
  }
}

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour installer Hyper-V et ses outils de gestion sur les VMs AVD :

$avdhosts = 'avd-vm-0','avd-vm-1'
ForEach ($avdhost in $avdhosts){
  Invoke-Command -ComputerName $avdhost -ScriptBlock {
     Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
  }
}

Chaque hôte AVD doit redémarrer pour prendre en compte les modifications : cliquez sur Oui :

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour installer Hyper-V et ses outils de gestion sur la machine virtuelle MSIX :

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

La machine virtuelle MSIX doit elle aussi redémarrer :

Reconnectez-vous sur machine virtuelle MSIX, avec le même compte utilisateur qu’utilisé précédement :

Etape VIII : Créer une image jointe à une application MSIX

Ouvrez Microsoft Edge et rendez-vous sur la page suivante pour télécharger msixmgr.zip.

Dans l’Explorateur de fichiers, accédez au dossier Téléchargements, ouvrez le fichier compressé et copiez le dossier x64 dans le dossier C:\MSIX :

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour créer le fichier VHD qui servira d’image jointe de l’application MSIX :

New-Item -ItemType Directory -Path 'C:\MSIX\MSIXVhds' -Force
New-VHD -SizeBytes 256MB -Path 'C:\MSIX\MSIXVhds\Firefox.vhd' -Dynamic -Confirm:$false

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell IS, en mode administrateur , pour monter le fichier VHD nouvellement créé :

$vhdObject = Mount-VHD -Path 'C:\MSIX\MSIXVhds\Firefox.vhd' -Passthru

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour créer une nouvelle partition, la formater, et lui attribuer la première lettre de lecteur disponible :

$disk = Initialize-Disk -Passthru -Number $vhdObject.Number
$partition = New-Partition -AssignDriveLetter -UseMaximumSize -DiskNumber $disk.Number
Format-Volume -FileSystem NTFS -Confirm:$false -DriveLetter $partition.DriveLetter -Force

Cliquez sur Annuler pour ne pas formater à nouveau ce disque :

Le nouveau disque image est déjà présent dans l’explorateur de fichiers :

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour créer une structure de dossier qui hébergera les fichiers MSIX :

$appName = 'Firefox'
New-Item -ItemType Directory -Path "$($partition.DriveLetter):\Apps" -Force
Set-Location -Path 'C:\MSIX'
.\x64\msixmgr.exe -Unpack -packagePath .\$appName.msix -destination "$($partition.DriveLetter):\Apps" -applyacls

Constatez la présences des fichiers dans le nouveau disque :

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour démonter le fichier VHD qui servira d’image MSIX :

Dismount-VHD -Path "C:\MSIX\MSIXVhds\$appName.vhd" -Confirm:$false

Etape IX : Configurer le groupe Active Directory contenant les hôtes AVD

Retournez sur votre contrôleur de domaine via Azure Bastion :

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour créer un groupe AD DS qui sera synchronisé avec Azure AD :

$ouPath = "OU=AVD-Devices,DC=jloudev,DC=tk"
New-ADGroup -Name 'avd-hosts' -GroupScope 'Global' -GroupCategory Security -Path $ouPath

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour ajouter les machines virtuelles AVD en tant que membres du groupe que vous avez créé à l’étape précédente :

Get-ADGroup -Identity 'avd-hosts' | Add-AdGroupMember -Members 'avd-vm-0$','avd-vm-1$'

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour redémarrer les VMs AVD :

$hosts = (Get-ADGroup -Identity 'avd-hosts' | Get-ADGroupMember | Select-Object Name).Name
$hosts | Restart-Computer

Ce nouveau groupe doit faire partie des synchronisations vers Azure AD. Pour cela, vérifiez dans votre configuration Azure AD Connect que cette OU est bien synchronisée :

Contrôlez après 30 minutes que le nouveau groupe remonte bien dans Azure AD :

Pour que les machines virtuelles Azure Virtual Desktop remontent bien dans ce groupe, il est nécessaire de reconfigurer également Azure AD Connect.

Retournez dans ce dernier pour activer la fonctionnalité Hybrid Azure AD Join :

Une fois les identifiants d’administrateur global renseignés, choisissez l’option ci-dessous :

Cochez la case pour remonter les machines Windows 10 et ultérieures :

Renseignez un compte Enterprise Administrator :

Une fois la configuration d’Azure AD Connect terminée :

  • Redémarrez les machines virtuelles AVD
  • Utilisez Azure Bastion pour vous connecter sur chaque VM AVD avec le compte avdadmin1@jloudev.tk
  • Retournez sur votre contrôleur de domaine via Azure Bastion (ou sur la machine virtuelle sur laquelle est installé Azure AD Connect), puis saisissez la commande PowerShell suivante en mode administrateur :
Start-ADSyncSyncCycle -PolicyType Initial

Attendez quelques minutes et contrôler la présence des machines virtuelles AVD dans le groupe AD sur Azure AD :

Etape X : Ajout des droits pour les VMs AVD sur le compte de stockage

Afin de mettre à disposition l’application packagée, nous allons créer un nouveau partage de fichier sur le compte de stockage existant.

Retournez sur votre portail Azure et rendez-vous sur le compte de stockage utilisé pour FSLogix :

Cliquez sur ce nouveau partage de fichier pour rajouter les 3 droits d’accès suivants :

OptionValeur
RôleStorage File Data SMB Share Elevated Contributor
Assign access toGroup
Selectavd-admins
OptionValeur
Rôle Storage File Data SMB Share Elevated Contributor
Assign access toGroup
Selectavd-hosts
OptionValeur
Rôle Storage File Data SMB Share Reader
Assign access toGroup
Selectavd-group

Une fois les droits en place, retournez sur votre machine virtuelle MSIX avec le compte avdadmin1 via Azure Bastion, pour connecter ce nouveau partage de fichier grâce à la commande suivante :

$connectTestResult = Test-NetConnection -ComputerName jlosto.file.core.windows.net -Port 445
if ($connectTestResult.TcpTestSucceeded) {
    # Mount the drive
    New-PSDrive -Name Z -PSProvider FileSystem -Root "\\jlosto.file.core.windows.net\msixvhds" -Persist
} else {
    Write-Error -Message "Unable to reach the Azure storage account via port 445. Check to make sure your organization or ISP is not blocking port 445, or use Azure P2S VPN, Azure S2S VPN, or Express Route to tunnel SMB traffic over a different port."
}

Exécutez les commandes suivantes via le programme CMD pour accorder les permissions NTFS requises :

icacls Z:\ /grant JLOUDEV\avd-hosts:(OI)(CI)(RX) /T
icacls Z:\ /grant JLOUDEV\avd-group:(OI)(CI)(RX) /T
icacls Z:\ /grant JLOUDEV\avd-admins:(OI)(CI)(F) /T

Exécutez le script PowerShell suivant depuis votre fenêtre Windows PowerShell ISE, en mode administrateur, pour recopier le fichier VHD vers le partage de fichiers Azure :

New-Item -ItemType Directory -Path 'Z:\packages' 
Copy-Item -Path 'C:\MSIX\MSIXVhds\Firefox.vhd' -Destination 'Z:\packages' -Force

Un contrôle dans l’explorateur de fichier nous permet de vérifier la bonne présence de ce dernier :

Etape XI : Ajout de l’application MSIX sur l’environnement Azure Virtual Desktop

On arrive presque au bout ! Il ne nous reste maintenant qu’à rajouter notre application MSIX sur notre pool d’hôtes Azure Virtual Desktop. Pour cela, retournez sur votre portail Azure et cherchez votre pool d’hôtes, cliquez sur MSIX packages, puis sur Ajouter :

Saisissez le chemin suivant pour chercher le package nouvellement généré :

\\jlosto.file.core.windows.net\msixvhds\packages\Firefox.vhd

Renseignez les champs ci-dessous de la façon suivante, puis cliquez sur Ajoutez :

Vérifiez la bonne présence de votre application dans l’écran des applications :

Rendez-vous maintenant dans la section groupe d’applications, puis cliquez sur Ajouter :

Renseignez un nom à votre groupe d’applications, puis cliquez sur Suivant :

Sur le second onglet, cliquez sur Ajouter des applications :

Renseignez les champs ci-dessous, puis cliquez sur Sauvegarder et passez à l’onglet suivant :

Ajoutez votre groupe d’utilisateurs AVD puis passez sur l’onglet suivant :

Reprenez votre espace de travail existant puis validez les derniers onglets pour lancer la création :

Quelques minutes plus tard, la création se termine :

Etape XII : Test du package MSIX

Pour cela rien de plus simple, ouvrez l’application Remote Desktop. Voici le lien vers la page Microsoft si vous avez besoin de la télécharger :

Une fois installée, cliquez sur Souscrire :

Renseignez les identifiants d’un utilisateur présent dans votre groupe d’utilisateurs AVD :

Décochez la case et cliquez sur Non :

Constatez la présence de l’icône de bureau à distance et du nouvel icône pour Firefox :

Cliquez sur Firefox et renseignez le mot de passe de l’utilisateur AVD :

Firefox s’ouvre bien comme une application publiée sur votre poste local !!!

Le petit icône spécial dans la barre des tâches vous montre bien qu’il s’agit d’une application publiée et non locale :

Conclusion

Félicitations ! Vous avez réussi votre premier package applicatif via MSIX sur votre environnement Azure Virtual Desktop. On ne va pas se mentir, les premières opérations de mise en place demandent de la vigilance. Mais à force de pratiquer, les choses deviennent plus simples. Nul doute que tout cela peut vous faire gagner un temp considérable dans la mise à jour des applications dans de larges environnements Azure Virtual Desktop.

Comme toujours, faites part de vos remarques dans les commentaires ????

Associez FSLogix avec Azure AD

Microsoft vient tout juste de l’annoncer en préview : vous pouvez maintenant gérer les identités d’un partage de fichiers Azure PaaS directement avec Azure AD !

C’est une excellente nouvelle, attendue depuis plusieurs mois par de nombreux utilisateurs d’Azure Virtual Desktop, notamment pour mettre en place des solutions comme FSLogix, déjà utilisée pour la gestion des profils utilisateurs, sans serveur AD DS. Par contre, il y a encore une petite mauvaise nouvelle :

Cette fonctionnalité nécessite actuellement que les utilisateurs aient des identités hybrides, gérées dans Active Directory.

Documentation Microsoft

Quel est donc l’intérêt ?

Cette contrainte d’avoir un environnement hybride, qui sous-entend donc la présence d’un domaine AD, n’est pas forcément une mauvaise chose. Il s’agit ici d’une avancée technique intermédiaire. Nul doute que ce prérequis ne sera plus nécessaire à moyen terme.

Dans cet article, nous allons donc tester cette nouvelle fonctionnalité. Le but de tester cette préview de gestion des tickets Kerberos par Azure AD est de mesurer les avancées Microsoft. Vous pouvez suivre la documentation leur officielle ici.

Etape 0 : Rappel des prérequis

Comme vous allez travailler avec des tickets Kerberos spécifiques à Azure AD, il est obligatoire que les postes ayant accès au partage de fichiers PaaS disposent de l’un des OS suivants :

  • Windows 11 Enterprise mono ou multisession
  • Windows 10 Enterprise mono ou multisession, en version 2004 ou ultérieure avec la mise à jour KB5007253
  • Windows Server, version 2022 avec la dernière mise à jour KB5007254

Dans mon cas, j’ai utilisé l’environnement suivant :

  • une VM Windows Server 2022 pour jouer le contrôleur de domaine
  • Une environnement AVD composé de VMs en Windows 11 Enterprise multisession

Comme annoncé avant, les postes en accès au partage de fichier doivent donc être joints à Azure AD ou en mode hybride (Active Directory + Azure AD). Néanmoins, les utilisateurs doivent être « hybrides », il est donc nécessaire de passer par Azure AD Connect pour y arriver. Le choix du domaine managé Azure AD DS n’est donc pas possible ici :

  • Azure Active Directory Domain Services (Azure AD DS) : Azure AD DS fournit des services de domaine managé avec un sous-ensemble de fonctionnalités AD DS traditionnelles, comme la jonction de domaine, la stratégie de groupe, le protocole LDAP et l’authentification Kerberos/NTLM.
  • Active Directory Domain Services (AD DS) : serveur LDAP (Lightweight Directory Access Protocol) qui fournit des fonctionnalités clés telles que l’identité et l’authentification, la gestion des objets, la stratégie de groupe et les approbations.

Au final, les prérequis sont donc les suivants :

  • Un tenant Microsoft (Azure AD)
  • Des licences comprenant Windows 10 Entreprise pour vos utilisateurs AVD
  • Une souscription Azure active avec le rôle de propriétaire :
  • Un domaine Active Directory Domain Services (AD DS) :
  • Des utilisateurs AVD présents dans AD DS et synchronisés avec Azure AD :
  • Un environnement Azure Virtual Desktop déployé et lié à votre domaine AD DS :
  • Des machines virtuelles AVD jointes é la fois à votre AD DS et enrôlées dans votre Azure AD :

Une fois cela en place, déroulez les prochaines étapes d’installation depuis votre contrôleur de domaine.

Etape I : Création d’un nouveau compte de stockage

Sur votre portail Azure, commencez par créer votre nouveau compte de stockage :

Une fois créé, stockez l’ID de la souscription Azure, le nom du groupe de ressources et le nom du compte de stockage dans les variables suivantes :

$resourceGroupName = "<MyResourceGroup>"
$storageAccountName = "<MyStorageAccount>"
$Subscription = "<MySubscriptionID>"

Etape II : Configuration de l’authentification Azure AD

Vous allez utiliser plusieurs nouvelles fonctionnalités, il est donc préférable de réinstaller des modules PowerShell sur votre poste. Ouvrez PowerShell ISE en mode administrateur et lancez la commande suivante :

Install-Module -Name Az.Storage -AllowClobber
Install-Module -Name AzureAD -AllowClobber

Validez les messages d’avertissement si besoin :

L’activation de l’authentification via Azure AD passe elle aussi par une commande PowerShell :

Connect-AzAccount
$ApiVersion = '2021-04-01'

$Uri = ('https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Storage/storageAccounts/{2}?api-version={3}' -f $Subscription, $ResourceGroupName, $StorageAccountName, $ApiVersion);

$json = 
   @{properties=@{azureFilesIdentityBasedAuthentication=@{directoryServiceOptions="AADKERB"}}};
$json = $json | ConvertTo-Json -Depth 99

$token = $(Get-AzAccessToken).Token
$headers = @{ Authorization="Bearer $token" }

try {
    Invoke-RestMethod -Uri $Uri -ContentType 'application/json' -Method PATCH -Headers $Headers -Body $json;
} catch {
    Write-Host $_.Exception.ToString()
    Write-Error -Message "Caught exception setting Storage Account directoryServiceOptions=AADKERB: $_" -ErrorAction Stop
}

Le lancement du script PowerShell vous demandera de vous authentifier en utilisant un compte propriétaire de la souscription Azure :

Le lancement réussi du script devrait vous donner le résultat suivant :

Constatez l’activation de la fonctionnalité en préview, directement sur le compte de stockage :

Il ne reste en plus qu’à générer une nouvelle clef pour le protocole Kerberos :

Set-azcontext -Subscription $Subscription
New-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName -KeyName kerb1 -ErrorAction Stop

Cette clef n’est pas contre pas visible sur le portail Azure.

Etape III : Création d’une identité principal de service

L’activation des droits d’Azure AD sur le compte de stockage n’est pas encore possible via le portail Azure. Commencez par générer un mot de passe, basé sur la nouvelle clef Kerberos de votre compte stockage, et stocker le dans une variable grâce à la commande PowerShell suivante :

$kerbKey1 = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName -ListKerbKey | Where-Object { $_.KeyName -like "kerb1" }
$aadPasswordBuffer = [System.Linq.Enumerable]::Take([System.Convert]::FromBase64String($kerbKey1.Value), 32);
$password = "kk:" + [System.Convert]::ToBase64String($aadPasswordBuffer);

Lors d’une étape précédente, vous vous êtes déjà connecté à Azure. Connectez-vous maintenant à Azure AD :

Connect-AzureAD
$azureAdTenantDetail = Get-AzureADTenantDetail;
$azureAdTenantId = $azureAdTenantDetail.ObjectId
$azureAdPrimaryDomain = ($azureAdTenantDetail.VerifiedDomains | Where-Object {$_._Default -eq $true}).Name

Utilisez ici un compte administrateur global du tenant :

Préparer la génération du principal de sécurité :

$servicePrincipalNames = New-Object string[] 3
$servicePrincipalNames[0] = 'HTTP/{0}.file.core.windows.net' -f $storageAccountName
$servicePrincipalNames[1] = 'CIFS/{0}.file.core.windows.net' -f $storageAccountName
$servicePrincipalNames[2] = 'HOST/{0}.file.core.windows.net' -f $storageAccountName

Créez et chargez dans une variable les éléments nécessaires à la future Enregistrement d’applications :

$application = New-AzureADApplication -DisplayName $storageAccountName -IdentifierUris $servicePrincipalNames -GroupMembershipClaims "All";

Générez alors le principal de sécurité :

$servicePrincipal = New-AzureADServicePrincipal -AccountEnabled $true -AppId $application.AppId -ServicePrincipalType "Application";

Configurez le mot de passe stocké précédement pour celui-ci :

$Token = ([Microsoft.Open.Azure.AD.CommonLibrary.AzureSession]::AccessTokens['AccessToken']).AccessToken
$apiVersion = '1.6'
$Uri = ('https://graph.windows.net/{0}/{1}/{2}?api-version={3}' -f $azureAdPrimaryDomain, 'servicePrincipals', $servicePrincipal.ObjectId, $apiVersion)
$json = @'
{
  "passwordCredentials": [
  {
    "customKeyIdentifier": null,
    "endDate": "<STORAGEACCOUNTENDDATE>",
    "value": "<STORAGEACCOUNTPASSWORD>",
    "startDate": "<STORAGEACCOUNTSTARTDATE>"
  }]
}
'@
$now = [DateTime]::UtcNow
$json = $json -replace "<STORAGEACCOUNTSTARTDATE>", $now.AddDays(-1).ToString("s")
  $json = $json -replace "<STORAGEACCOUNTENDDATE>", $now.AddMonths(12).ToString("s")
$json = $json -replace "<STORAGEACCOUNTPASSWORD>", $password
$Headers = @{'authorization' = "Bearer $($Token)"}
try {
  Invoke-RestMethod -Uri $Uri -ContentType 'application/json' -Method Patch -Headers $Headers -Body $json 
  Write-Host "Success: Password is set for $storageAccountName"
} catch {
  Write-Host $_.Exception.ToString()
  Write-Host "StatusCode: " $_.Exception.Response.StatusCode.value
  Write-Host "StatusDescription: " $_.Exception.Response.StatusDescription
}

Etape IV : Définir les autorisations API sur l’application nouvellement créée

Comme indiqué dans la documentation Microsoft, la suite du processus peut se faire dans le portail Azure. Ouvrez votre portail Azure Active Directory :


Dans vos Enregistrement d’applications, cliquez sur Toutes les applications, puis enfin sélectionnez l’application dont le nom correspond à votre compte de stockage :

Dans les autorisations API dans le volet de gauche, ajoutez une autorisation comme ceci :

Sélectionnez Microsoft Graph, puis choisissez délégation des permissions :

Dans la section OpenID, sélectionnez Profile :

Descendez plus bas dans la liste pour retrouver la section User. Cochez alors User.Read et cliquez sur Ajouter :

Une fois sur retourné sur l’écran des permissions, cliquez ci-dessous pour ajouter le consentement global à tout votre tenant :

Constatez la bonne application de celui-ci grâce au statut à droite :

Etape V : Création du partage de fichier

Retournez sur votre compte de stockage pour créer un nouveau partage de fichier comme ceci :

Etape VI : Jointure du partage de fichier Azure au domaine Active Directory

Pour l’instant, le partage de fichier Azure nécessite encore l’attribution de droits RBAC aux utilisateurs Azure Virtual desktop. Dans votre cas cette fonctionnalité nécessite d’activer l’authentification AD DS sur le compte de stockage.

Commencez par télécharger sur GitHub la version la plus récente du module PowerShell AzFilesHybrid.zip :

Décompressez les fichiers sur le disque C sur une VM, jointe à votre domaine :

Démarrez Windows PowerShell ISE en tant qu’administrateur et exécutez ce qui suit pour supprimer le flux de données alternatif Zone.Identifier, qui a une valeur de 3, indiquant qu’il a été téléchargé à partir d’Internet :

Get-ChildItem -Path C:\AzFilesHybrid -File -Recurse | Unblock-File

Toujours en PowerShell, connectez-vous à Azure :

Connect-AzAccount

Lancez alors le script suivant en modifiant les paramètres, selon votre configuration :

.\CopyToPSPath.ps1
Import-Module -Name AzFilesHybrid
Join-AzStorageAccountForAuth `
  -ResourceGroupName 'aadjoin-rg' `
  -StorageAccountName 'jloaadjoin2' `
  -DomainAccountType 'ComputerAccount' `
  -OrganizationalUnitDistinguishedName 'OU=AVDJOIN-Devices,DC=jloudev,DC=ml'

Constatez le retour de commande suivant :

Vous pouvez aussi contrôler la bonne activation sur le compte de stockage :

Restez sur votre compte de stockage pour assigner le rôle Storage File Data SMB Share Contributor à votre utilisateurs Azure Virtual Desktop :

Dans notre démonstration, nous allons seulement autoriser le groupe d’utilisateurs Azure Virtual Desktop.

Etape VII : Attribution des autorisations

Pour empêcher les utilisateurs d’accéder aux profils utilisateurs d’autres utilisateurs, vous devez également attribuer des autorisations au niveau du répertoire.

Le système que vous utilisez pour configurer les permissions doit répondre aux exigences suivantes :

  • La poste a une version de Windows répond aux exigences des systèmes d’exploitation des prérequis
  • Le poste doit être joint à Azure AD ou à Hybrid Azure AD à Azure AD
  • Le poste est relié au contrôleur de domaine

Installez ou importez si besoin sur le poste le module PowerShell ActiveDirectory. Dans mon cas, je n’ai pas eu à faire cette opération car j’ai tout exécuté depuis mon contrôleur de domaine :

Import-module ActiveDirectory

Azure AD ne prenant pas actuellement en charge la configuration des listes de contrôle d’accès dans Shell, il doit s’appuyer sur Active Directory. Pour configurer Shell sur votre compte de stockage, exécutez la commande suivante dans PowerShell ISE en tant qu’administrateur :

function Set-StorageAccountAadKerberosADProperties {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true, Position=0)]
        [string]$ResourceGroupName,

        [Parameter(Mandatory=$true, Position=1)]
        [string]$StorageAccountName,

        [Parameter(Mandatory=$false, Position=2)]
        [string]$Domain
    )  

    $AzContext = Get-AzContext;
    if ($null -eq $AzContext) {
        Write-Error "No Azure context found.  Please run Connect-AzAccount and then retry." -ErrorAction Stop;
    }

    $AdModule = Get-Module ActiveDirectory;
     if ($null -eq $AdModule) {
        Write-Error "Please install and/or import the ActiveDirectory PowerShell module." -ErrorAction Stop;
    }	

    if ([System.String]::IsNullOrEmpty($Domain)) {
        $domainInformation = Get-ADDomain
        $Domain = $domainInformation.DnsRoot
    } else {
        $domainInformation = Get-ADDomain -Server $Domain
    }

    $domainGuid = $domainInformation.ObjectGUID.ToString()
    $domainName = $domainInformation.DnsRoot
    $domainSid = $domainInformation.DomainSID.Value
    $forestName = $domainInformation.Forest
    $netBiosDomainName = $domainInformation.DnsRoot
    $azureStorageSid = $domainSid + "-123454321";

    Write-Verbose "Setting AD properties on $StorageAccountName in $ResourceGroupName : `
        EnableActiveDirectoryDomainServicesForFile=$true, ActiveDirectoryDomainName=$domainName, `
        ActiveDirectoryNetBiosDomainName=$netBiosDomainName, ActiveDirectoryForestName=$($domainInformation.Forest) `
        ActiveDirectoryDomainGuid=$domainGuid, ActiveDirectoryDomainSid=$domainSid, `
        ActiveDirectoryAzureStorageSid=$azureStorageSid"

    $Subscription =  $AzContext.Subscription.Id;
    $ApiVersion = '2021-04-01'

    $Uri = ('https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Storage/storageAccounts/{2}?api-version={3}' `
        -f $Subscription, $ResourceGroupName, $StorageAccountName, $ApiVersion);

    $json=
        @{
            properties=
                @{azureFilesIdentityBasedAuthentication=
                    @{directoryServiceOptions="AADKERB";
                        activeDirectoryProperties=@{domainName="$($domainName)";
                                                    netBiosDomainName="$($netBiosDomainName)";
                                                    forestName="$($forestName)";
                                                    domainGuid="$($domainGuid)";
                                                    domainSid="$($domainSid)";
                                                    azureStorageSid="$($azureStorageSid)"}
                                                    }
                    }
        };  

    $json = $json | ConvertTo-Json -Depth 99

    $token = $(Get-AzAccessToken).Token
    $headers = @{ Authorization="Bearer $token" }

    try {
        Invoke-RestMethod -Uri $Uri -ContentType 'application/json' -Method PATCH -Headers $Headers -Body $json
    } catch {
        Write-Host $_.Exception.ToString()
        Write-Host "Error setting Storage Account AD properties.  StatusCode:" $_.Exception.Response.StatusCode.value__ 
        Write-Host "Error setting Storage Account AD properties.  StatusDescription:" $_.Exception.Response.StatusDescription
        Write-Error -Message "Caught exception setting Storage Account AD properties: $_" -ErrorAction Stop
    }
}

Lancez alors la fonction précédente grâce à cette commande :

Connect-AzAccount
Set-StorageAccountAadKerberosADProperties -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName

Cette commande fait alors rebasculer le statut Active Directory sur compte de stockage comme ceci :

Etape VIII : Création de la GPO

Toujours sur votre contrôleur de domaine, ouvrez le gestionnaire des polices :

Sous votre OU des postes AVD, créez une nouvelle police et éditez là :

Activer la police suivante :

Administrative Templates\System\Kerberos\Allow retrieving the Azure AD Kerberos Ticket Granting Ticket during logon

Ajoutez également une règle de registre sur cette même police :

reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters /v CloudKerberosTicketRetrievalEnabled /t REG_DWORD /d 1

Redémarrez les VMs Azure Virtual Desktop pour la bonne prise en compte de la GPO :

Connectez-vous à une session Azure Virtual Desktop grâce à Windows Remote Desktop :

Utilisez un compte utilisateur d’AVD.

Une fois la session AVD ouverte, ouvrez une ligne de commande et tapez le code suivant :

dsregcmd /RefreshPrt

Verrouillez votre session AVD, puis déverrouillez-là :

Saisissez les deux lignes de commande suivantes :

klist purge
klist get krbtgt

Constatez la présence de :

krbtgt/KERBEROS.MICROSOFTONLINE.COM @ KERBEROS.MICROSOFTONLINE.COM

Lancez enfin la commande net use pour monter le lecteur réseau et vérifiez le bon fonctionnement :

net use Z: \\jloaadjoin2.file.core.windows.net\avdfileshare
Il arrive par moment que la commande échoue la première fois.

On retrouve bien le disque réseau dans l’explorateur Windows :

En retournant sur les tickets Kerberos, un nouveau CIFS a fait son apparition :

Etape IX : Configuration de FSLogix

Une fois l’architecture en place, on peut combiner cette dernière pour la gestion des profils utilisateurs via FSLogix. Pour cela, il nous faut rajouter la configuration FSLogix et une règle de registre en plus pour Azure AD.

#Variables
$storageAccountName = "jloaadjoin2"
$filesharename = "avdfileshare"

#Create Directories
$LabFilesDirectory = "C:\LabFiles"

if(!(Test-path -Path "$LabFilesDirectory")){
New-Item -Path $LabFilesDirectory -ItemType Directory |Out-Null
}
if(!(Test-path -Path "$LabFilesDirectory\FSLogix")){
New-Item -Path "$LabFilesDirectory\FSLogix" -ItemType Directory |Out-Null
}

 #Download FSLogix Installation bundle
  if(!(Test-path -Path "$LabFilesDirectory\FSLogix_Apps_Installation.zip")){
       Invoke-WebRequest -Uri "https://experienceazure.blob.core.windows.net/templates/wvd/FSLogix_Apps_Installation.zip" -OutFile     "$LabFilesDirectory\FSLogix_Apps_Installation.zip"

 #Extract the downloaded FSLogix bundle
 function Expand-ZIPFile($file, $destination){
     $shell = new-object -com shell.application
     $zip = $shell.NameSpace($file)
     foreach($item in $zip.items()){
     $shell.Namespace($destination).copyhere($item)
     }
 }

 Expand-ZIPFile -File "$LabFilesDirectory\FSLogix_Apps_Installation.zip" -Destination "$LabFilesDirectory\FSLogix"

}
   #Install FSLogix
   if(!(Get-WmiObject -Class Win32_Product | where vendor -eq "FSLogix, Inc." | select Name, Version)){
       $pathvargs = {C:\LabFiles\FSLogix\x64\Release\FSLogixAppsSetup.exe /quiet /install }
       Invoke-Command -ScriptBlock $pathvargs
   }
   #Create registry key 'Profiles' under 'HKLM:\SOFTWARE\FSLogix'
   $registryPath = "HKLM:\SOFTWARE\FSLogix\Profiles"
   if(!(Test-path $registryPath)){
       New-Item -Path $registryPath -Force | Out-Null
   }

   #Add registry values to enable FSLogix profiles, add VHD Locations, Delete local profile and FlipFlop Directory name
   New-ItemProperty -Path $registryPath -Name "VHDLocations" -Value "\\$storageAccountName.file.core.windows.net\$filesharename" -PropertyType String -Force | Out-Null
   New-ItemProperty -Path $registryPath -Name "Enabled" -Value 1 -PropertyType DWord -Force | Out-Null
   New-ItemProperty -Path $registryPath -Name "DeleteLocalProfileWhenVHDShouldApply" -Value 1 -PropertyType DWord -Force | Out-Null
   New-ItemProperty -Path $registryPath -Name "FlipFlopProfileDirectoryName" -Value 1 -PropertyType DWord -Force | Out-Null
    
    reg add HKLM\Software\Policies\Microsoft\AzureADAccount /v LoadCredKeyFromProfile /t REG_DWORD /d 1

   #Display script completion in console
Write-Host "Script Executed successfully"

L’ouverture d’une nouvelle session utilisateurs d’AVD vous affiche bien la mention FSLogix :

Un tour dans le partage de fichier du compte de stockage montre bien la présence du dossier du profil utilisateur géré par FSLogix :

Conclusion

La gestion des tickets Kerberos par Azure AD est une belle avancée. Bien évidemment, le processus de prise en charge complète d’un compte de stockage de manière native n’est pas encore là, mais nous y sommes en bonne voie ???? Comme à chaque fois, n’hésitez pas à utiliser les commentaires pour exprimer de vos retours ????

WordPress sur Azure

Une fois n’est pas coutume, je vais vous parler d’Azure ????????

J’ai commencé ce blog il y a maintenant plusieurs mois, et je prends toujours du plaisir à écrire des articles sur Azure. Depuis quelques semaines, je rencontre des problèmes de performances rendant l’accès au site très variable, surtout en matinée. OVH n’a pu résoudre mon souci malgré mon changement de formule. ????

J’ai donc décidé de franchir le pas en rapatriant mon blog sur Azure. Si vous souhaitez aussi créer des ressources Azure sans forcément dépenser un centime, sachez que plusieurs méthodes sont possibles.

Dans mon cas, le statut MCT m’apporte un grand nombre d’avantages de la part de Microsoft, dont justement des crédits Azure, directement disponibles sur la page Visual Studio :

Etape I : Création des ressources Azure

Une fois l’activation des crédits Azure sur un tenant nouveau ou existant, commencez la création de votre site WordPress directement depuis le portail Azure :

Une recherche de WordPress vous affiche un grand nombre de résultats. Il est en effet possible de mettre en place un site web via différents types de service Azure (IaaS, PaaS, …) :

Dans cet article, nous allons nous intéresser au service Azure App Service. Celui-ci crée, déploie et met à l’échelle rapidement des applications Web, mobiles et API de niveau entreprise s’exécutant sur n’importe quelle plate-forme.

Voici une démo assez complète du service :

Merci Adam ????.

Choisissez donc l’article édité par WordPress :

La création des ressources Azure via ce template WordPress est assez simple et rapide et peu de champs sont à remplir :

  • Souscription Azure : « ligne de crédit » utilisée pour positionner la ressource
  • Groupe de ressources : conteneur logique pour l’organiser les ressources
  • Région : Localisation physique de vos données
  • Nom de l’instance : nom de l’application web, mais aussi URL de base du site créé WordPress créé par Azure

Une fois les champs validés, la synthèse avant création est affichée sur le dernier onglet :

Lancez la création des ressources Azure en cliquant sur Créer.

Moins de 10 minutes plus tard, Azure a fini. Cliquez ici pour afficher votre application web :

Vous retrouvez à droite l’URL de votre site web. Cliquez dessus pour ouvrir un nouvel onglet :

Les habitués reconnaitront tout de suite la page d’installation de WordPress. Finalement, quelques clics seulement suffisent pour installer WordPress sur Azure :

On a déjà terminé la lecture de cet article ? Pas encore ????

En faisant un tour sur le groupe de ressources, voici ce que le template a créé pour vous :

Les deux premiers sont des éléments de base pour faire fonctionner une application web sur Azure. Le template WordPress a donc aussi créé une base MySQL Database, pour y stocker le contenu de votre site.

C’est assez logique, MySQL est un des choix possibles pour faire fonctionner WordPress. Voici d’ailleurs un exemple des tables contenues dans WordPress :

En ouvrant la ressource MySQL Database, on peut y voir que la configuration attribuée par défaut via ce template n’est pas des moins chères !

Un tour dans les modèles de prix nous permet d’avoir une meilleure idée de son coût mensuel :

Evidemment, la baisse du nombre de cœurs pour MySQL n’ira pas en dessous de 2. De plus il est impossible de repasser sur une édition Basique ????:

Un petite tour nous permet alors de nous faire une idée du coût de l’ensemble :

  • App Service Plan : P1V2 (Windows) : 35.09 € / mois
  • MySQL : 4 vCore / 100GB (General Purpose) : 263.63 € / mois

Dans mon cas, le besoin n’est pas encore présent pour justifier une telle architecture. Mais comment faire pour partir sur des SKUs MySQL plus petits ?

Pour cela, nans allons réutiliser le template déployé juste avant, le modifier et le relancer pour un nouveau déploiement Azure.

Etape II : Suppression des ressources Azure

Retournez sur le groupe de ressources et cliquez ici :

Cet écran vous affiche l’historique des précédents déploiements passés, réussis ou échoués :

Avant d’en relancer un nouveau, supprimez les ressources existantes créées par ce template WordPress. Validez la suppression des ressources Azure comme ceci :

Note : relancer un template sur des ressources existantes ne posent pas de souci en soi. Les ressources existantes sont alors « modifiées » selon le nouveau template.

Etape III : Relancez le déploiement du template

Une fois les ressources Azure supprimées, retournez sur l’écran précédent et cliquez sur le déploiement :

Cliquez sur Redéployer :

Vous retrouvez alors ici toutes les informations SKUs des ressources créées :

Dans mon cas, je n’ai modifié que les informations de la base de données MySQL. Pour cela, j’ai donc rectifié les valeurs suivantes :

  • vmName : B_Gen5_1
  • serverEdition : Basic
  • vCores : 1

Voici donc le bas de page de ma configuration :

Cliquez pour valider le template et lancer le déploiement :

Quelques minutes plus tard, vous retrouvez toutes les ressources Azure dont toujours une base de données MySQL, mais avec un SKU bien moins cher ???? :

Etape IV : Configuration WordPress

Retournez alors sur votre application web afin de terminer l’installation de WordPress. Choisissez la langue qui vous convient puis cliquez sur Continuer :

Terminez en renseignant les derniers champs pour finaliser l’installation :

Une fois authentifié avec votre nouveau compte administrateur, vous voici sur votre console d’administration WordPress :

Etape V : Ajout d’un nom de domaine personnalisé

Toujours en rapport avec Azure, il me parait important d’ajouter un nom de domaine personnalisé et de sécuriser les connexions. Pour cela, retournez sur votre application web Azure, puis cliquez ici :

Vous ne pouvez acheter des domaines directement depuis Azure. Des sites comme GoDaddy ou encore Domain.com proposent ce type de service. Pour ma part, j’utilise régulièrement le site Freenom pour acheter des domaines gratuits dans le but de tests.

Une fois le domaine acheté, pensez à ajouter le domaine sur votre application web Azure pour ensuite ajoutez les enregistrements DNS nécessaires :

Les informations ci-dessus sont nécessaires pour configurer les enregistrements DNS sur mon nouveau domaine. Quelques minutes d’attente et une validation plus tard, le nouveau domaine passe au vert. Finalisez l’ajout de ce dernier :

Etape VI : Ajout d’un certificat TLS

Ce nouveau domaine ne dispose pas encore de certificat TLS comme l’indique la copie d’écran ci-dessous. Cliquez sur les paramétrages TLS/SSL pour corriger cela :

Cliquez alors sur la seconde section, puis sur Créer un certificat managé et choisissez le domaine ajouté puis cliquez sur Créer :

Ce processus prend plusieurs minutes. Une fois terminé, retournez dans vos Domaines personnalisés, puis cliquez ici :

Sélectionnez les éléments dans la liste pour les associer entre eux. Le choix du type pourra se faire selon cet article Microsoft. Cliquez ici pour valider le lien :

Votre nouveau domaine gère bien maintenant la sécurité TLS. Profitez-en alors pour activer cette option :

Autant rester sur le sujet TLS/SSL en activant aussi cette exigence sur votre base de données MySQL :

En retournant sur l’application web, on remarque que l’URL présente sur la page principale reprend maintenant le domaine personnalisé avec le protocole HTTPS. Une fois sur votre site, consultez les détails du certificat généré par GeoTrust :

Etape VI : Activation d’Azure Backup

Toujours dans la configuration, profitez-en pour activer la sauvegarde via Azure Backup :

La sauvegarde de vos données va alors se faire sur une compte de stockage Blob :

Vous pouvez le créer directement ici si nécessaire en cliquant ici. Le nom de celui-ci doit être unique sur Azure :

Sélectionnez ce nouveau compte de stockage pour créer après coup un nouveau conteneur, puis validez :

Définissez votre police de sauvegarde, puis validez là :

Vous pouvez cliquer dès à présent ici pour effectuer votre première sauvegarde manuelle. Les autres suivront automatiquement, en fonction de votre police de sauvegarde :

Allez dans le compte de stockage pour constater l’apparition des fichiers de sauvegarde :

L’architecture est maintenant en place, il ne vous reste plus qu’à utiliser votre console WordPress ????

Conclusion

Cette mise en œuvre d’un site WordPress sur Azure n’est pas des plus compliquée. Microsoft vous simplifie grandement le travail. D’autres articles vont suivre sur le sujet car je souhaite aussi aborder la migration des données ou encore l’optimisation de l’architecture et la mise en place d’autres métriques.

Microsoft Ignite : Novembre 2021

Microsoft Ignite est une conférence annuelle organisée par Microsoft pour les développeurs et les professionnels de l’informatique. Pour la seconde fois en 2021, cette nouvelle édition a commencé aujourd’hui, et se tiendra jusqu’au 04 novembre.

Rappel des points importants

Voici une courte liste, mais pratique, des liens utiles pour ne rien louper de cet événement :

Cloud Skill Challenge

Comme à chaque fois, Microsoft propose à tous de passer des challenges techniques, dans le but d’obtenir des vouchers pour des certifications Microsoft gratuitement. Voici le lien pour s’inscrire et le second lien vers la page des règles officielles.

Liste assez longue et variée des challenges disponibles :

  • Teams Admin Challenge
  • Teams Voice Engineer Challenge
  • Desktop and Device Management Challenge
  • Dynamics 365 Sales Consultant Challenge
  • Power Platform Developer Challenge
  • Azure Admin Challenge
  • Azure Developer Challenge
  • Azure Database Admin Challenge
  • Windows Server Hybrid Admin Challenge
  • Dynamics 365 Supply Chain Management Challenge
  • Security Operations Analyst Challenge
  • Identity + Information Protection Challenge

Pour recevoir ce voucher gratuit :

  • Finir au moins un challenge durant la fenêtre suivante : du 2 au 30 novembre 2021
  • Utiliser une adresse mail valide pour recevoir le voucher. Idéalement votre adresse mail utilisée pour votre compte Microsoft Learn

Des restrictions sont bien sûr présentes :

  • Vous ne pouvez prétendre qu’à une seule offre par personne, quel que soit le nombre de défis relevés
  • La date d’expiration de cette offre d’examen ne peut en aucun cas être prolongée
  • Cette offre d’examen ne peut pas être remboursée ou échangée contre de l’argent, un crédit ou un remboursement
  • Cette offre d’examen n’est pas transférable et est nulle si vous la modifiez, la révisez ou la transférez de quelque façon que ce soit

Une fois le voucher reçu, vous ne pourrez l’utiliser que les pour les examens suivants :

  • MS-700 : Gestion de Microsoft Teams
  • MS-720 : Ingénieur vocal Microsoft Teams
  • MD-100 : Windows 10
  • MD-101 : Gestion des ordinateurs de bureau modernes
  • MB-210 : Microsoft Dynamics 365 Sales
  • PL-400 : Développeur Microsoft Power Platform
  • AZ-104 : Administrateur Microsoft Azure
  • AZ-204 : Développement de solutions pour Microsoft Azure
  • DP-300 : Administration de bases de données relationnelles sur Microsoft Azure
  • AZ-800 : Administration de l’infrastructure de base de Windows Server Hybrid
  • AZ-801 : Configuration des services avancés de Windows Server Hybrid
  • MB-330 : Microsoft Dynamics 365 Supply Chain Management (gestion de la chaîne d’approvisionnement)
  • SC-200 : Analyste des opérations de sécurité Microsoft
  • SC-300 : Administrateur des identités et des accès Microsoft
  • SC-400 : Administrateur de la protection des informations Microsoft

Profitez bien pour enrichir vos connaissances et prenez le temps de suivre quelques lives ????????

Bon event à tous !

Haute disponibilité Azure en Suisse

La haute disponibilité consiste à éliminer les points de défaillance, ce qui implique donc de mettre en place de la redondance. En contrepartie, la reprise après sinistre prend le relais là où la haute disponibilité a échoué. Ce second sujet avait déjà été abordé dans l’article Mettre en place un Disaster Recovery sur Suisse Ouest.

Dans cet article, je souhaite vous parler des zones de disponibilité, déjà présentes dans plusieurs régions Azure, permettant de simplifier les architectures demandant une haute disponibilité. Avant d’aller plus loin, voici un rappel de plusieurs définitions Azure :

Assurer la continuité des activités et la récupération d'urgence à l'aide  des régions jumelées Azure | Microsoft Docs
Schéma expliquant l’architecture locale d’Azure.

Qu’est-ce qu’une zone géographique ?

Une zone géographique Azure désigne une zone du monde contenant au moins une région Azure. Les zones géographiques définissent un marché discret, qui contient généralement deux régions ou plus qui préservent la résidence des données et les limites de conformité.

Source : Microsoft doc

Qu’est-ce qu’une région Azure ?

En termes simples, une région Azure est un ensemble de centres de données reliés par un réseau dédié à faible latence. Combien de datacenters une région contient-elle ? Eh bien, nous n’avons pas de nombre fixe. Il varie. Il existe des régions de différentes tailles. Une région peut être composée d’un seul ou de plusieurs centres de données. Le fait est qu’une région Azure est un groupe d’un ou plusieurs centres de données Azure.

Source : pragimtech.com

Qu’est-ce qu’une zone de disponibilité ?

Les zones de disponibilité sont des emplacements physiquement séparés au sein de chaque région Azure qui tolèrent les défaillances locales. Les défaillances sont aussi bien des défaillances logicielles et matérielles que des événements de type tremblements de terre, inondations et incendies. La tolérance aux défaillances est obtenue grâce à la redondance et à l’isolation logique des services Azure. Pour garantir la résilience, au moins trois zones de disponibilité distinctes sont présentes dans toutes les régions qui ont des zones de disponibilité.

Source : Microsoft docs
Azure est composé de plus de 200 centres de données physiques, organisés en régions et liés par l’un des plus grands réseaux interconnectés du monde.

Comment faire de la haute disponibilité sur Azure ?

Sur Azure, la redondance des services est possible grâce à la multiplication des centres de données à travers le monde. Pour les données stockées sur le Cloud, elles sont systématiquement copiées au minimum 3 fois (Il ne s’agit pas ici des sauvegardes utilisateurs).

Certains services Azure apporte donc une haute disponibilité en étant réparti sur plusieurs régions, zones de disponibilité ou même groupes de disponibilité. A ne pas confondre avec d’autres services (ex. Azure AD) fonctionnant de manière globale ou régionale (ex. réseaux virtuels), où la haut disponibilité est automatiquement assurée par Microsoft. Un lien par service est disponible ici.

Peut-on faire de la haute disponibilité avec de la récupération d’urgence ?

Deux sujets connexes, mais souvent confondus, entrent en jeu dans l’architecture des systèmes qui atténuent les risques de défaillance : la haute disponibilité (HA) et la reprise après sinistre (DR) :

  • La haute disponibilité consiste à éliminer les points de défaillance uniques
  • La reprise après sinistre est le processus consistant à remettre un système dans un état opérationnel lorsqu’il est rendu inopérant

La vidéo ci-dessous vous permet de bien comprendre les différents scénarios possibles pour envisager une récupération d’urgence sur Azure en fonction de deux objectifs très précis :

Objectif de temps de rétablissement (RTO) : durée maximale pendant laquelle un système peut être hors service avant d’être rétabli dans un état opérationnel. Pour certains systèmes, cet objectif de temps de récupération peut être mesuré en heures, voire en jours, mais pour les systèmes plus critiques, les objectifs de temps de récupération sont généralement mesurés en secondes.

Objectif de point de récupération (RPO) : quantité de perte de données, mesurée en temps, qui est tolérable en cas de catastrophe. Pour certains systèmes, la perte d’une journée de données peut être acceptable, tandis que pour d’autres, elle peut se limiter à quelques minutes ou secondes.

Les durées RTO et RPO ont de grand impacts sur la manière dont les plans de reprise après sinistre sont mis en œuvre :

Merci à John pour cette vidéo ????.

Et la Suisse dans tout ça ?

Actuellement : Annoncées en 2019 , deux régions Azure fonctionnent en mode jumelé sur le territoire helvétique :

  • Suisse Nord (Région de Zurich)
  • Suisse Ouest (Région de Genève)

Qu’est-ce qu’une paire de régions Azure ?

Une paire régionale est constituée de deux régions au sein de la même zone géographique. Azure sérialise les mises à jour de plateforme (maintenance planifiée) à travers les paires régionales, garantissant ainsi qu’une seule région de chaque paire est mise à jour à la fois. Si une panne touche plusieurs régions, au moins l’une des régions de chaque paire est prioritaire pour la récupération.

Source : Microsoft Doc
Microsoft Suisse - Nouvelles régions disponibles en 2019 | 3T | TTT

La région Suisse Ouest n’a pas vocation à être accessible à tous les scénarios. Comme l’indique la copie d’écran ci-dessous, la région est encore restreinte aux scénarios de récupération d’urgence :

Comment s’y prendre ?

Dans la configuration actuelle sur Suisse, il est malgré tout possible de faire la haute disponibilité via du multi régions. Les schémas ci-dessous montrent plusieurs architectures Azure, dont un AKS à haute disponibilité grâce au mode actif/actif :

https://docs.microsoft.com/fr-ch/azure/architecture/reference-architectures/n-tier/multi-region-sql-server

Et si je souhaite malgré tout envisager une récupération d’urgence ?

Certains services, comme Azure Site Recovery, apportent des solutions de réplications des données et des ressources. Par exemple, le lien suivant donne la marche à suivre pour activer cette fonctionnalité sur une machine virtuelle Azure.

Cette solution est efficace mais présentes quelques désavantages :

  • Cela n’est pas une solution HA, mais un DR
  • Le fonctionnement d’un DR est généralement Actif / Passif
  • La réplication des données est asynchrone
  • Le coût Azure en sera probablement supérieur (services + transfert des données)

Avant fin 2021 : Microsoft a profité de l’Ignite 2021, organisé en mars dernier, pour nous annoncer l’arrivée des zones de disponibilité (availability zones) pour l’ensemble des zones géographiques Azure :

La bonne nouvelle annoncée pour la Suisse est, selon Microsoft, toujours dans les cartons de 2021. On s’attend à ce que les zones de disponibilités pour Suisse Nord arrivent pour cette fin d’année.

Une fois ces zones ouvertes au public, nous pourrons alors déployer des services Azure sur ces dernières et ainsi accroître certaines SLAs :

Azure Availability Zones - First Look | Nicholas Romyn's Blog
Exemple d’architecture

Pour illustrer mon propos, voici en détail les SLA en vigueur pour les machines virtuelles Azure :

Pour toutes les machines virtuelles dont deux ou plusieurs instances sont déployées dans deux ou plusieurs zones de disponibilité de la même région Azure, nous garantissons que la connectivité de la machine virtuelle à au moins une instance sera assurée au moins 99,99 % du temps.


Pour toutes les machines virtuelles dont deux instances ou plus sont déployées dans le même set de disponibilité ou dans le même groupe d’hôtes dédiés, nous garantissons que vous aurez la connectivité de la machine virtuelle à au moins une instance au moins 99,95 % du temps.


Pour toute machine virtuelle à instance unique utilisant des disques SSD Premium ou Ultra Disk pour tous les disques du système d’exploitation et les disques de données, nous garantissons une connectivité de la machine virtuelle d’au moins 99,9 %.


Pour toute machine virtuelle à instance unique utilisant des disques gérés SSD standard pour les disques du système d’exploitation et les disques de données, nous garantissons une connectivité de la machine virtuelle d’au moins 99,5 %.


Pour toute machine virtuelle à instance unique utilisant des disques gérés HDD standard pour les disques du système d’exploitation et les disques de données, nous garantissons une connectivité de la machine virtuelle d’au moins 95 %.

Source : Azure doc

Conclusion

Les zones de disponibilités sur Suisse apporteront donc plusieurs bénéfices directs :

  • Augmentation de la résilience des applications et la disponibilité prises en charge par le contrat SLA (ex. 99,99 % pour les machines virtuelles)
  • Simplification des schémas d’architecture à haute disponibilité
  • Respect d’exigences réglementaires et de conformité pour les applications critiques.
  • Non compromission de la résidence des donnée

Je manquerai donc pas de revenir vers vous dès la disponibilité du service ????

Faites de l’autoscale sur Azure Virtual Desktop

Microsoft continue d’apporter des fonctionnalités directement intégrées à Azure Virtual Desktop. Après le démarrage machines des virtuelles à la demande ou encore leur intégration directe avec Azure AD sans domaine AD, Microsoft permet encore une fois d’optimiser l’architecture AVD en l’adaptant à la demande.

Cela est toujours bienvenu pour l’optimisation des coûts.

Encore en préversion, vous pouvez déjà tester cette fonctionnalité depuis plusieurs jours en suivant la documentation Microsoft. Dans cet article, je vais mettre en place cette fonctionnalité étape par étape. Nous allons voir ensemble son impact sur un environnement AVD.

La fonction de mise à l’échelle automatique (ou plan d’autoscaling) vous permet de mettre en route des machines virtuelles (VM) Azure Virtual Desktop, en modulant à la hausse ou à la baisse leur nombre.

Cela permet d’optimiser les coûts de déploiement en fonction de vos besoins. Vous pouvez établir un plan d’autoscaling basé sur :

  • Créneaux horaires
  • Jours de la semaine
  • Plafond du nombre de sessions utilisateurs

Etape 0 : Rappel des prérequis

Cette fonctionnalité AVD nécessite de disposer d’un environnement Azure Virtual Desktop déjà en place. Voici donc la liste des composants déjà présents sur mon tenant Azure :

  • Domaine Active Directory Domain Services (AD DS)
  • Pool d’hôtes Azure Virtual Desktop
  • Espace de travail AVD
  • Groupe d’applications AVD
  • 5 machines virtuelles D4s_v4, déjà jointes à AVD

Point important : Il est nécessaire de définir un nombre maximal de sessions utilisateurs par VM dans la configuration de votre pool d’hôtes :

L’algorithme du pool d’hôtes n’a pas d’importance car le plan d’autoscaling dispose de sa propre option.

Etape I : Création d’un nouveau rôle RBAC

Comme l’indique la documentation Microsoft, il est nécessaire de créer un nouveau rôle RBAC pour assurer la gestion automatique des VMs.

Besoin d’en savoir un peu plus sur les rôles Azure ? Voici une vidéo en français qui devrait vous aider :

Merci à Seyfallah pour cette explication très claire ????.

Vous pouvez suivre la création du rôle personnalisé via cette aide Microsoft, ou en répétant les étapes suivantes :Copiez le code JSON suivant et enregistrez le dans un fichier (ex. AVD-custom-role.json) sur votre PC :

{
 "properties": {
 "roleName": "Autoscale",
 "description": "Friendly description.",
 "assignableScopes": [
 "/subscriptions/<SubscriptionID>"
 ],
  "permissions": [
   {
   "actions": [
"Microsoft.Insights/eventtypes/values/read",
"Microsoft.Compute/virtualMachines/deallocate/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/read",
"Microsoft.DesktopVirtualization/hostpools/read",
"Microsoft.DesktopVirtualization/hostpools/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/read",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/delete",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read",                   "Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/sendMessage/action",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read"
],
  "notActions": [],
  "dataActions": [],
  "notDataActions": []
  }
 ]
}
}
  • Positionnez-vous au niveau de votre souscription Azure et cliquez sur le bouton d’Ajout d’un rôle personnalisé :
  • Selectionnez la fonction JSON et cherchez votre fichier précédement créé, puis cliquez sur Suivant :
  • Contrôlez la bonne présence des permissions suivantes, puis cliquez sur Suivant :
"Microsoft.Compute/virtualMachines/deallocate/action", 
"Microsoft.Compute/virtualMachines/restart/action", 
"Microsoft.Compute/virtualMachines/powerOff/action", 
"Microsoft.Compute/virtualMachines/start/action", 
"Microsoft.Compute/virtualMachines/read",
"Microsoft.DesktopVirtualization/hostpools/read",
"Microsoft.DesktopVirtualization/hostpools/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/read",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/write",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/delete",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/sendMessage/action",
"Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read",
  • Supprimez le permiètre par défaut :
  • Cliquez ici pour ajouter un nouveau périmètre :
  • Selectionnez le type Souscription puis choisissez celle voulue, puis cliquez sur Suivant :
  • Contrôlez cet onglet et cliquez sur Suivant :
  • Lancez la création de votre rôle personnalisé :

Etape II : Création d’un nouveau rôle RBAC

Une fois le nouveau rôle créé, il ne nous reste qu’à assigner le service Azure Virtual Desktop à celui-ci. Cela s’effectue directement sur le périmètre, qu’on souhaite lui assigner.

  • Cherchez donc ici la Souscription Azure de votre AVD puis cliquez ici :
  • Utilisez la barre de recherche pour retrouver plus facilement votre rôle personnalisé :
  • Cliquez ici pour ajouter le service Azure Virtual Desktop :
  • Utilisez encore une fois la barre de recherche pour retrouver le service AVD sous son ancien nom et Sélectionnez-le :
  • Cliquez sur Suivant :
  • Lancez l’Assignation du rôle :
  • Vérifiez la présence de l’assignation d’AVD sur la souscription, puis cliquez sur le rôle :
  • Vous retrouvez ici toutes les permissions nécessaire à la fonctionnalité d’Autoscale :
Microsoft.Compute/virtualMachines/deallocate/action
Microsoft.Compute/virtualMachines/restart/action
Microsoft.Compute/virtualMachines/powerOff/action
Microsoft.Compute/virtualMachines/start/action
Microsoft.Compute/virtualMachines/read
Microsoft.DesktopVirtualization/hostpools/read
Microsoft.DesktopVirtualization/hostpools/write
Microsoft.DesktopVirtualization/hostpools/sessionhosts/read
Microsoft.DesktopVirtualization/hostpools/sessionhosts/write
Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/delete
Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/sendMessage/action
Microsoft.DesktopVirtualization/hostpools/sessionhosts/usersessions/read

Etape III : Création du plan d’autoscaling

La création d’un plan d’autoscaling AVD apporte les avantages / restrictions suivants :

  • Le plan d’autoscaling est utilisable pour un ou plusieurs environnement Azure Virtual Desktop, à la condition que ces derniers nécessitent une gestion horaire identique
  • Ne pas associer le plan d’autoscaling avec d’autres solutions tierces de gestion des ressources Azure
  • Il n’est pas possible d’associer plusieurs plans d’autoscaling sur un seul environnement AVD
  • Le plan d’autoscaling est dépendant d’un seul fuseau horaire
  • Le plan d’autoscaling est configurable sur plusieurs périodes distinctes
  • Le plan d’autoscaling est opérationnel dès sa configuration terminée
  • Le plan d’autoscaling ne tient pas compte du « Drain mode » activé sur les VMs si aucun TAG n’est pas renseigné
  • Le plan d’autoscaling n’est pas en interaction avec la méthode de répartition des utilisateurs configuré sur votre pool d’hôtes

La création du plan d’autoscaling se fait directement sur la page d’Azure Virtual Desktop :

  • Cliquez ici pour démarrer sa création :
  • Remplissez le premier onglet avec vos informations de base puis cliquez sur Suivant :
Le champ dédié au TAG exclu permet de « sortir » des VMs du plan d’autoscaling.

L’onglet suivant vous permet de définir quand le plan d’autoscaling s’active pour suivre les besoins de montée / descente en puissance tout au long de la journée.

Dans chaque phase de la planification, autoscale n’éteint les machines virtuelles que lorsqu’un hôte de session n’a plus de sessions actives.

Les valeurs par défaut qui s’affichent lorsque vous créez une planification sont les valeurs suggérées pour les jours de la semaine, mais vous pouvez les modifier selon vos besoins.

  • Cliquez comme ceci pour ajouter votre première période :
  • Choisissez un Nom, sélectionnez les Jours adéquats puis cliquez sur Suivant :

L’onglet de charge reprend le fuseau horaire du premier onglet et vous demande de renseigner les champs et de cliquer sur Suivant :

  • Heure de début : Sélectionnez une heure dans le menu déroulant pour commencer à préparer les VM pour les heures de charge
  • Algorithme d’équilibrage de charge : Microsoft recommande de choisir l’algorithme Breadth-first. Cela répartira les utilisateurs sur les VM existantes afin de maintenir des temps d’accès rapides
  • Pourcentage minimum de VM hôtes : Entrez ici le pourcentage d’hôtes de session que vous souhaitez conserver au minimum pendant les heures de montée et de pointe. Par exemple, si vous choisissez 10 % et que votre pool d’hôtes compte 10 hôtes de session, plan d’autoscaling gardera une hôte de session disponible pour les prochaines connexions utilisateur
  • Seuil de capacité : Saisissez ici le pourcentage d’utilisation du pool d’hôtes qui déclenchera le début des phases de charge et de pic. Par exemple, si vous choisissez 60 % pour un pool d’hôtes pouvant gérer 10 sessions à l’instant T, le plan d’autoscaling n’activera des hôtes supplémentaires que lorsque le pool d’hôtes dépassera 6 sessions

L’onglet de pic de charge reprend aussi le fuseau horaire du premier onglet et vous demande de renseigner les champs puis de cliquer sur Suivant :

  • Heure de début : Entrez une heure correspondante au moment où votre taux d’utilisation est le plus élevé pendant la journée. Cette heure sera également l’heure de fin de votre phase de charge
  • Equilibrage de charge : Sélectionnez Breadth-first ou Depth-first. Le premier distribue les nouvelles sessions utilisateur sur toutes les sessions disponibles dans le pool d’hôtes. Le second distribue les nouvelles sessions à l’ôte de session disponible ayant le plus grand nombre de connexions et n’ayant pas encore atteint sa limite de session.
  • Seuil de capacité : Valeur non modifiable

L’onglet de décharge vous demande de renseigner les mêmes champs que pour ceux des périodes de charge et de pic :

  • Heure de début
  • Equilibrage de charge
  • Pourcentage minimum d’hôtes (%)
  • Seuil de capacité (%)
  • Forcer la déconnexion des utilisateurs

Pour finir, l’onglet heures creuses vous demande de renseigner les mêmes champs suivants :

  • Heure de début
  • Equilibrage de charge
  • Seuil de capacité
  • Cliquez sur Ajouter une fois ce premier planning terminé :

Il est possible d’ajouter une second planning si besoin, mais uniquement sur les autres jours restants :

  • Sélectionnez-le ou les pools d’hôtes concernés et cliquez sur Suivant :
  • Renseignez les TAGs et lancez la Création :
  • Consultez la ressource Azure créée et dédiée au plan d’autoscaling d’Azure Virtual Desktop :

Etape IV : Test de la solution

Avant que mon script soit validé et en place, j’ai pris le soin d’éteindre l’ensemble des VMs (5) de mon pool d’hôtes AVD. Voici donc mon environnement de test :

  • Limite d’utilisateurs AVD par VM : 2 utilisateurs
  • Nombre de VMs AVD : 5 VMs
  • Nombre total de sessions AVD disponibles : 20 sessions, soit 4 par VM
  • Période A : Hors période du plan d’autoscaling
  • Période B : Charge : Algorithme : Breadth-first / Min : 25 % / Max : 60 %
  • Période C : Pic : Algorithme : Depth-first / Max : 60 %
  • Période D : Décharge : Algorithme : Depth-first / Min : 10 % / Max : 90 %
  • Période E : Creux : Algorithme : Depth-first / Max : 90 %

Période A – Hors période :

Seule une machine virtuelle s’allume après la validation du script car celui-ci est directement opérationnel :

Période B – Période de charge :

Nous entrons dans la période de charge de mon environnement Azure Virtual Desktop. Ayant paramétré le Pourcentage minimum de VM hôtes à 25% et disposant de 5 VMs AVD , une seconde VM s’allume automatiquement allumée à l’entrée dans cette phase :

25% x 5 (max nbr VMs) = 1 VM

Sans attendre la période de pic, je décide alors de connecter un premier utilisateur AVD, sachant que mon Seuil de capacité est de 60% et que le nombre d’utilisateurs AVD par VM est de 4.

De façon assez logique, aucune machine nouvelle virtuelle ne s’allume. Cela fait sens car deux VMs sont déjà opérationnelles. Je décide donc de connecter un second utilisateur. Même constat au niveau de VMs, toujours à cause de la règle des 60 % :

La répartition des utilisateurs se fait bien selon l’algorithme Breadth-first.

Je connecte donc un 3ème utilisateur AVD et ne constate toujours aucun allumage d’une nouvelle machine virtuelle. En effet la règle des 60 % se calcule sur le nombre de sessions possibles en fonction des hôtes allumées. Ici donc :

60% x 4 (max nbr users) x 2 (VMs allumées) = 4.8 sessions utilisateurs

Je décide donc de continuer mon test et de rajouter un quatrième utilisateur. Toujours le même constat :

On finit avec la connexion du 5ème utilisateur. Cette fois-ci, cet ajout provoquera bien le démarrage d’une nouvelle et 3ème machine virtuelle AVD :

Curieusement, la connexion du 6ème utilisateur se ne retrouve pas sur cette nouvelle machine virtuelle sans utilisateur, mais bien sur la seconde, en contradiction avec l’algorithme de la période de charge :

Afin de tester toutes les caractéristiques de la période de charge, je décide de déconnecter l’ensemble des utilisateurs AVD. Aucune VM ne s’éteindra malgré 0 utilisateur connecté sur AVD :

Période C – Période de pic :

Nous quittons la période de charge pour entrer dans la période de pic d’AVD. Le but ici est de constater le changement d’algorithme Depth-first agissant sur la répartition des utilisateurs.

Aucune session utilisateur AVD n’est ouverte, 2 VMs restent allumées, même sans utilisateur :

Je connecte alors 4 utilisateurs AVD et je ne constate aucun démarrage de machines virtuelles AVD. L’assignation des utilisateurs se fait bien en Depth-first :

On continue avec la connexion du 5ème utilisateur. Cette fois-ci, cet ajout provoquera bien le démarrage d’une nouvelle et 3ème machine virtuelle AVD :

En effet la règle des 60 % se calcule sur le nombre de sessions possibles en fonction des hôtes allumées. Ici donc :

60% x 4 (max nbr users) x 2 (VM allumée) = 4.8 sessions utilisateurs

Je décide de finir en connectant un 6ème utilisateur. L’algorithme Depth-first continue de bien s’appliquer bien comme précédement :

Au final, la période de pic se distingue de la période de charge par la présence systématique d’une machine virtuelle « d’avance », vide d’utilisateurs pour encaisser leur arrivée massive.

D’ailleurs, la déconnexion de l’ensemble des utilisateurs AVD nous ramène à deux machines virtuelles allumées :

Période D : Période de décharge :

Nous continuons l’analyse du plan d’autoscaling avec la période de décharge de mon environnement AVD. Aucune session AVD n’est active à ce moment précis. Comme la période de charge, seule une seule VM reste allumée :

Comme à chaque période, je connecte alors 3 utilisateurs AVD et je ne constate aucun démarrage de machines virtuelles AVD. L’assignation des utilisateurs se fait toujours en Depth-first :

Quand je connecte le 4ème utilisateur, je constate bien le démarrage d’une seconde machine virtuelle :

En effet la règle des 90 % se calcule sur le nombre de sessions possibles en fonction des hôtes allumées. Ici donc :

90% x 4 (max nbr users) x 1 (VM allumée) = 3.6 sessions utilisateurs

Dès que je connecte les utilisateurs 5, 6 et 7, aucune nouvelle machine virtuelle ne s’allume :

Dès que j’arrive à l’utilisateur 8, les choses changent :

Cela s’explique encore par la règle des 90% ci-dessous :

90% x 4 (max nbr users) x 2 (VMs allumées) = 7.2 sessions utilisateurs

A noter que l’inactivité des utilisateurs AVD provoque le message d’alerte suivant :

Ce chrono et le message indiqué ici est paramétré dans le plan d’autoscaling.

D’ailleurs, la déconnexion de l’ensemble des utilisateurs AVD nous ramène à une machine virtuelle allumée :

Période E : Période de creux :

Nous sommes maintenant dans la dernière période, appelée aussi période creuse. Le but de celle-ci est de fonctionner en économie maximale. Notre point de départ est donc une seule session AVD d’ouverte et donc une seule machine virtuelle reste active :

On recommence donc par connecter 3 utilisateurs Azure Virtual Desktop. Aucune autre machine virtuelle ne s’allume :

90% x 4 (max nbr users) x 1 (VM allumée) = 3.6 sessions utilisateurs

De ce fait, la connexion du 4ème utilisateur ajoute une seconde machine virtuelle :

On continue par connecter les utilisateurs 5, 6 et 7. Aucun changement au niveau du nombre de VMs :

En effet et comme pour le cas du 4ème utilisateur, la règle des 90% qui s’applique ici n’est réalisée que si le nombre d’utilisateurs connectés dépasse l’entier supérieur :

90% x 4 (max nbr users) x 2 (VMs allumées) = 7.2 sessions utilisateurs

La connexion du 8ème utilisateur vérifie et valide cette théorie :

Pour finir la déconnexion de tous les utilisateurs entraîne l’arrêt des machines virtuelles AVD allumées, sauf une :

Fonctionnalités et annexes

Modification

Le plan d’autoscaling est pleinement modifiable après sa création en cliquant ici :

Désactivation

Si votre pool d’hôtes a besoin de repasser en fonctionnement manuel, rien de plus simple par la désactivation temporaire du plan d’autoscaling :

Sauvegarde des logs

Comme un grand nombre de ressources Azure, vous pouvez sauvegarder les logs pour une analyse plus fine :

Dans mon cas, je fais le choix d’utiliser Log Analytics Workspace :

Erreur rencontrées

Au fil de mes différents tests, j’ai reçu une ou deux fois des messages d’erreur lors de la connexion d’un nouvel utilisateur sur une machine virtuelle fraîchement démarrée.

Un nouvel essai de connexion a résolu le souci à chaque fois.

Conclusion

Disons-le tout de suite, cette fonctionnalité était déjà disponible depuis plusieurs mois via une la solution script proposée par Microsoft et basée sur Azure Logic Apps.

La nouvelle solution choisie par Microsoft d’intégrer une fonctionnalité d’autoscaling dans Azure Virtual Desktop est riche de sens et est plus que bienvenue. Pour ma part je trouve qu’elle remplace la fonctionnalité Démarrage des VMs à la demande, déjà existante mais qui ne permettait pas de tenir des plannings de charges et de décharges.

Malgré tout, le plan d’autoscaling manque encore de clarté sur son fonctionnement dans le besoin de démarrage de machines virtuelles. Je me suis en effet retrouvé à plusieurs reprises avec plusieurs VMs allumées malgré qu’elles soient vides d’utilisateurs.

Pour finir, un aperçu graphique du mode et des indices de charges actuels aurait été apprécié.

Nerdio s’occupe de votre AVD

Azure Virtual Desktop est en évolution constante, de part Microsoft (Azure AD, Intune, Teams, FSLogix,…) mais aussi par des solutions tierces comme celle proposée par Nerdio.

C’est ici que Nerdio intervient. Nerdio Manager est une solution disponible sur la marketplace d’Azure, qui va vous simplifier la gestion de votre environnement AVD. Voici une vidéo sur le sujet part le CEO de Nerdio, Vadim Vladimirskiy :

La nombre de vidéos disponibles concernant AVD sur leur chaîne Youtube est impressionnant !

Le portail Azure apporte en effet une grande facilité de déploiement d’un environnement Azure Virtual Desktop. Mais tout cela devient assez lourd quand on doit manager la solution durant toute sa période d’exploitation.

Alors imaginez avec plusieurs centaines d’utilisateurs sur plusieurs pools d’hôtes …

Comme vous allez le voir une fois en place, Nerdio propose de simplifier et d’automatiser les opérations courantes sur l’environnement AVD. On pourra gérer les images OS, les cycles de mise à jour, optimiser les ressources Azure selon les besoins et les pics de charge, et bien d’autres encore…

Dans ce premier article sur Nerdio, nous allons nous occuper ici de l’installation de la solution sur votre environnement Azure.

Etape 0 : Rappel des prérequis

Comme pour tout déploiement dans Azure, des prérequis sont nécessaires :

  • Un tenant Microsoft (AAD)
  • Des licences comprenant Windows 10 Entreprise pour vos utilisateurs AVD
  • Une souscription Azure active
  • Un domaine Active Directory Domain Services (AD DS)
  • Un espace de stockage sur Azure pour les profils utilisateurs via FSLogix, provenant d’un serveur de fichiers ou d’un compte de stockage Azure + partage de fichier

Si un des points listés est absent de votre environnement, pas de panique, Vadim vous explique tout ici :

Au final, Nerdio se focalise avant tout sur les composants Azure Virtual Desktop, afin de pouvoir l’intégrer sans difficulté dans un grand nombre d’environnements existants.

Etape I : Déploiement de la solution

Tout commence donc depuis la marketplace. Avant de pouvoir jouer avec Nerdio, il faut en effet commencer à déployer les premières ressources Azure.

Cliquez ci-dessous pour créer votre Nerdio :

Tapez Nerdio dans la barre de recherche et sélectionnez Nerdio Manager for Enterprise :

Créez un nouveau groupe de ressources et choisissez la localisation qui vous convient :

Une fois la validation passée, lancez la création :

Une fois le déploiement terminé, cliquez sur Outputs pour récupérer l’URL de votre application web Nerdio :

En effet, le groupe de ressources créé par Nerdio a généré plusieurs ressources dont une application web :

Ouvrez cette URL dans un nouvel onglet de votre navigateur Internet :

Comme indiqué sur cette page web, vous avez déjà déployé les composants nécessaires à Nerdio. Maintenant, Nerdio va avoir besoin de s’installer.

Pour cela, suivez les indications en ouvrant Azure Cloud Shell avec un compte disposant du rôle d’administrateur global de votre tenant, mais aussi d’un rôle de propriétaire sur la souscription Azure :

Qu’est-ce qu’Azure Cloud Shell ?

Azure Cloud Shell est un interpréteur de commandes interactif, authentifié et accessible par navigateur qui permet de gérer les ressources Azure. Il vous donne la possibilité de choisir l’expérience d’interpréteur de commandes la plus adaptée à votre façon de travailler, qu’il s’agisse de Bash ou de PowerShell.

Source : Microsoft

Lors de l’ouverture de ce nouvel onglet, Azure Cloud Shell vous demandera éventuellement de créer ou de rattacher à un compte de stockage + partage de fichier pour stocker les logs :

Azure Cloud Shell - Storage - Chapter 2 | RidiCurious.com

Azure Cloud Shell va vous permettre d’exécuter des commandes en PowerShell ou en Azure CLI. Restez en PowerShell et coller le script donné sur la page web Nerdio :

Script correctement terminé après plusieurs minutes.

Une fois le script terminé, vous pouvez retourner sur la page web Nerdio et rafraîchir. Si vous n’avez pas conservé cette page, pas de panique ! Vous pouvez la retrouver comme ceci :

Retournez sur le groupe de ressources créé par l’application Nerdio, puis cliquez sur le service d’application :

Copiez l’URL de l’application :

Collez l’URL dans un nouvel onglet de votre navigateur :

Pour que Nerdio puisse fonctionner, vous allez devoir le configurer sur votre environnement actuel. Voici, étape par étape, les points à paramétrer :

Les informations du tenant et de la souscription Azure sont déjà renseignés et donc non modifiable :

Ensuite, enregistrez votre application auprès des serveurs Nerdio :

Un environnement Azure Virtual Desktop nécessite aussi un contrôleur de domaine dans la majorité des scénarios. Une gestion via Nerdio n’échappe pas à cette règle et demande alors le réseau virtuel où se trouve l’AD et FSLogix :

Le menu déroulant propose automatiquement les ressources Azure se trouvant dans la même souscription que Nerdio. Cliquez sur OK pour continuer la configuration :

Nerdio vous demande de spécifier un groupe de ressources pour Azure Virtual Desktop. Il propose par défaut le même que celui utilisé pour son installation, mais reste modifiable :

Un conseil, créez un groupe de ressources dissocié pour les ressources AVD afin de gagner en clarté. Retournez alors sur votre premier onglet (Portail Azure) pour créer le groupe de ressources AVD.

Une fois créé, revenez sur la page de configuration.

Cliquez sur le groupe de ressources et changez-le par votre nouveau groupe, puis cliquez sur OK :

Le paramètre suivant concerne Active Directory. Nerdio a besoin de connaître plusieurs paramètres pour connecter les machines virtuelles AVD au domaine :

  • Directory : Choisissez selon votre annuaire entre Active Directory ou Azure AD DS
  • AD Domain : Spécifiez le domaine Active Directory au format FQDN pour les machines virtuelles hôtes de session à rejoindre
  • AD Username : Spécifiez un utilisateur admin au format FQDN avec l’autorisation de créer des objets « ordinateurs« 
  • AD Password : Mot de passe du compte admin
  • Organisation Unit : Spécifiez l’unité d’organisation (OU) au format DN où toutes les machines virtuelles hôtes de session seront créées par défaut

Une fois les champs renseignés, cliquez sur OK :

Le compte de stockage est utilisé pour stocker les profils via FSLogix. Ce dernier doit exister au préalable, comme pour le partage de fichier, qui doit être joint au domaine AD renseigné plus haut :

Plusieurs options possibles sur cet écran :

  • Vous pouvez passer la configuration du compte de stockage pour y revenir plus tard si nécessaire
  • Vous pouvez activer la fonction Cloud Cache de FSLogix. Cela permet de conserver sur le profil utilisateur sur plusieurs compte de stockage Azure, hébergés dans différentes régions pour augmenter sa résiliance.

Cliquez sur OK une fois les champs renseignés :

Le portail de gestion Nerdio offre aussi la possibilité de gérer des machines Windows 365. Cela s’avère pratique pour centraliser la gestion des bureaux à distance dans une seule console.

Pour cela, vous devez autoriser l’application Nerdio sur votre environnement. Cliquez sur OK si vous êtes d’accord :

Enfin, choisissez le modèle de gestion AVD au sein de Nerdio. Prenez ici Spring 2020 Update -ARM (GA) et cliquez sur Done :

Avant de pouvoir laisser Nerdio procéder, il faut lui donner un consentement de l’administrateur global. Cliquez sur le lien donné dans le nom du domaine :

Saisissez les identifiants appropriés pour vous identifier :

La liste d’autorisations est assez longue. Prenez le temps de la regarder et acceptez si vous êtes d’accord :

Un message d’information apparaît alors pour vous confirmer le succès de l’opération :

Fermez l’onglet et retournez sur l’onglet de configuration Nerdio pour cocher la case et cliquez sur OK :

Le processus vous emmène alors directement sur le portail de management Nerdio :

Vous allez maintenant pouvoir créer votre premier environnement Azure Virtual Desktop. Nerdio dispose d’un grand nombre de personnalisations. Nous ne ferons que les opérations de base dans ce premier article. D’autres articles suivront pour des sujets précis.

Etape II : Création d’un environnement Azure Virtual Desktop

Vous voilà sur votre portail de gestion Nerdio. Indispensable dans toute structure AVD, l’espace de travail est un composant créé par Nerdio. Cliquez sur Workspaces, puis Add Workspace :

Renseignez les options de votre espace de travail et cliquez sur OK :

Chaque tâche Nerdio est visible dans l’historique, très précis avec ses statuts actualisés automatiquement :

Faites un tour dans votre portail Azure pour constater la création de la première ressource :

Cliquez votre espace de travail Nerdio pour le configurer :

Cliquez sur Static host pools dans le sous-menu à gauche, puis sur Add static host pool :

Renseignez les champs de votre pool d’hôtes AVD et cliquez sur OK. Voici mes options :

  • Desktop Experience : vous permet de choisir entre un environnement mono-utilisateur ou multi-utilisateurs
  • Répertoire : reprend par défaut l’AD DS ou l’Azure AD DS renseigné pendant la configuration Nerdio
  • FSLogix : reprend par défaut le compte de stockage utilisé pour FSLogix renseigné
  • Initial host count : nombre initial de machine virtuelles AVD créées avec le pool d’hôtes
  • Name Préfix : préfixe du nom utilisé pour la création des machines virtuelles AVD
  • Desktop image : propose une liste d’images Windows 10/11 disponibles sur Azure, mais aussi des images personnalisées et créées dans le menu Desktop image de Nerdio
  • VM size : offre plusieurs choix de puissance pour les VMs AVD
  • OS Disk : Taille et puissance du disque OS installé sur chaque VM AVD
  • Resource group : groupe de ressources Azure pour la création des VMs AVD et du pool d’hôtes
  • Quick assign : Annuaire des groupes et des utilisateurs d’Azure AD

Une fois la création du pool d’hôtes lancée, vous pouvez suivre toutes les étapes grâce au système de tâches Nerdio :

Après que toutes les tâches sont terminées, ouvrez un portail Azure pour constater les créations dans le groupe de ressources AVD :

Cliquez sur le pool d’hôtes créé par Nerdio et constatez la présence de VMs disponibles aux utilisateurs AVD :

Pour tester la solution, ouvrez un navigateur en mode privé pour vous rendre sur la page d’accueil AVD :

aka.ms/wvdarmweb

Utilisez les identifiants d’un utilisateur faisant parti du groupe AVD assigné lors de la création sur Nerdio et cliquez sur OK :

Recherchez le bon espace de travail créé par Nerdio et cliquez sur l’icône RDP :

Saisissez une nouvelle fois le mot de passe de l’utilisateur AVD et cliquez sur Submit :

Vous voilà enfin sur votre bureau Windows 11 !

Faites un tour sur votre compte de stockage FSLogix via votre portail Azure :

Cliquez sur le partage de fichiers correspond à celui renseigné dans la configuration Nerdio :

Constatez la présence d’un dossier créé par FSLogix pour le stockage du profil utilisateur au format VHDX :

Etape III : Suppression de l’environnement de test AVD

Dans le cadre d’un environnement de test, vous pouvez également supprimer très facilement les composants Azure créés par Nerdio.

Commencez par les machines virtuelles AVD :

Continuez par le pool d’hôtes :

Et finissez par supprimer l’espace de travail :

Conclusion

Au final la mise en place d’un environnement de test pour Azure Virtual Desktop via Nerdio a été très simple et très facile. Plusieurs remarques à ce sujet :

  • Nerdio ne vous dispense pas de mettre en place les prérequis propres à un environnement AVD
  • Le présent article ne montre pas toutes les fonctionnalités très utiles et présentes dans la console Nerdio. Plusieurs articles suivront par la suite

Quel est le coût de Nerdio ?

La société propose plusieurs modèles de licence après le premier mois d’essai gratuit :

Nerdio for Managed Service Providers (MSPs)

Nerdio manager for Enterprise :

A cela s’ajoute aussi le coût des ressources Azure déployées par Nerdio, dont voici les estimations au bout de quelques jours :

En conclusion, la solution s’avère assez prometteuse sur la gestion des environnements d’Azure Virtual Desktop par un grand nombre d’automatismes ou de customisations, à travers un seul et unique portail.

Comme à chaque fois Dean Ceola, de la Cloud Academy, a également fait une très bonne vidéo juste ici :

Enfin et comme toujours, pensez à partager votre propre expérience dans les commentaires ????

Azure : Baisse des prix sur Suisse

Bonne nouvelle pour le Cloud en Suisse, les prix baisses sur Azure en octobre !!!

A partir d’un 1er octobre 2021, une baisse des prix est appliquée sur la consommation Azure dans les 2 régions Suisse. La vérification peut simplement se faire grâce à l’outil d’estimation des coûts de Microsoft : Azure Pricing Calculator.

Lancées en 2019, les régions Azure Suisse Nord et Suisse Ouest étaient plus chères que leurs homologues en Europe. L’écart entre ces régions tend maintenant à diminuer. Beaucoup de projets d’hébergement repose en effet sur une demande de stockage des données sur le territoire helvétique.

Voici quelques exemples pour vous donner une idée de la baisse des prix sur des architectures Azure :

Quote A : Architecture Pay As You Go

L’architecture est hébergée sur Suisse Nord et comporte les éléments suivants :

  • 1 Domaine managé Azure AD DS
  • 1 Serveur Application
  • 1 Serveur Azure Virtual Desktop
  • 1 Compte de stockage pour gestion des profils FSLogix
  • 1 Coffre de sauvegarde pour la machine virtuelle et le compte de stockage
  • 1 Accès VPN + Bande passante

Au final, l’architecture ci-dessus, refaite en octobre 2021, est 10% moins chère que celle créée en septembre 2021. La vérification est facile à faire si vous utilisez la fonction partager dans le calculateur Azure et que vous conservez les liens HTML générés le mois précédent :

Quote B : Architecture Azure Virtual Desktop (Pay As You Go)

Ce second exemple est dédié à une architecture plus conséquente, utilisée pour un environnement Azure Virtual Desktop d’environ 180 utilisateurs et avec un mode de facturation en Pay As You Go :

  • 2 Machines virtuelles pour le contrôleur de domaine AD
  • 6 Machines virtuelles Azure Virtual Desktop
  • 1 Compte de stockage pour gestion des profils FSLogix
  • 1 Coffre de sauvegarde pour les AD et le compte de stockage
  • 1 Accès VPN + Bande passante

La baisse de prix reste aux alentours des 12%, proche de l’architecture A. L’impact sera plus fort compte tenu du nombre de machines virtuelles employées dans cette seconde quote.

Quote C : Architecture Azure Virtual Desktop (Instances réservées)

Dernier exemple, on reprend l’architecture Azure Virtual Desktop utilisée pour les 180 utilisateurs et on optimise les coûts avec l’achat d’instances réservées pour les machines virtuelles. Petite rappel de ce qu’est une instance réservée sur Azure :

Si vous utilisez les ressources d’une façon systématique adaptée aux réservations, l’achat d’une réservation vous offre l’opportunité de réduire vos coûts. Par exemple, si vous exécutez en permanence des instances d’un service sans réservation, vous êtes facturé au tarif du paiement à l’utilisation. Quand vous achetez une réservation, vous bénéficiez immédiatement de la remise sur réservation. Les ressources ne sont plus facturées au tarif du paiement à l’utilisation.

Source : Microsoft
Ce graphique montre l’impact financier en couplant l’optimisation des machines virtuelles grâce à Azure Hybrid Benefit et les instances réservées.

Voici d’ailleurs le lien expliquant le bénéfice financier à s’engager sur des instances réservées de 1 ou 3 ans. La liste des composants Azure ne change donc entre la quote B et C, simplement l’ajout d’instances réservées 3 années pour l’ensemble des machines virtuelles :

  • 2 Machines virtuelles pour le contrôleur de domaine AD
  • 6 Machines virtuelles Azure Virtual Desktop
  • 1 Compte de stockage pour gestion des profils FSLogix
  • 1 Coffre de sauvegarde pour les AD et le compte de stockage
  • 1 Accès VPN + Bande passante

La baisse de prix sera alors beaucoup plus faible ici (2%) car les machines virtuelles représentent le gros de la quote et que les instances réservées font déjà un gros rabais dessus.

Conclusion

Les baisses de prix sont toujours des bonnes nouvelles. On ne peut que s’en réjouir sur Suisse, car ces deux régions sur considérées comme premium par Microsoft. Quelques analyses faites entre septembre et octobre me permettent enfin de constater les baisses de prix les plus fortes sur :

  • Machine virtuelle non réservées
  • Sauvegarde de machine virtuelles
  • Sauvegarde de partage de fichiers d’un compte de stockage
  • Disques managés pour VM

Par ailleurs, je n’ai vu par contre aucune baisse de prix pour la partie réseau (VPN ou encore bande passante). Enfin et comme toujours, pensez à partager votre expérience sur les quotes Azure dans les commentaires ????

Windows 11 + AVD + Azure AD

Je vous avais déjà parlé il a quelque temps de la jointure possible entre des machines virtuelles Azure Virtual Desktop et Azure AD ici. Cela offre la possibilité de se passer d’un Active Directory pour environnement AVD et permet d’envisager certains projets avec une architecture 100% Cloud.

Avec l’arrivée prochaine de Windows 11, il me paraissait intéressant de tester cette combinaison avec le nouvel OS de Microsoft.

Point important : Comme précédemment, nous sommes toujours dans l’attente d’une prise en charge de FSLogix dans ce scénario. L’utilisation d’un partage de fichier nécessite une authentification SMB, non possible pour l’instant via la seule gestion des identités Azure AD.

Rappel des prérequis

Comme pour tout déploiement dans Azure, des prérequis sont nécessaires :

  • Un tenant Microsoft
  • Une souscription Azure
  • Un réseau virtuel
  • Des licences pour les utilisateurs AVD, comprenant Azure Virtual Desktop

La liste est donc beaucoup plus courte qu’avec un domaine classique ????.

Déploiement de la solution

Une fois votre réseau virtuel en place, la création de l’ensemble pourra se faire directement depuis Azure Virtual Desktop. Dans le cadre d’un environnement de production, la création d’une image en amont reste l’étape indispensable pour installer les applications nécessaires à vos utilisateurs !

Sur le portail Azure, recherchez Azure Virtual Desktop dans la barre de recherche et sélectionnez Azure Virtual Desktop dans les suggestions :

Sur l’écran d’Azure Virtual Desktop, choisissez Créer un Pool d’hôtes :

Renseignez les informations de base sur votre pool d’hôtes puis cliquez sur Suivant : Machines virtuelles :

Renseignez les principales caractéristiques de vos machines virtuelles AVD :

L’image de Windows 11 n’est pas forcément proposée dans la liste. Il vous faudra alors la chercher dans la marketplace Azure :

Renseignez les informations réseaux :

Prenez le temps de considérer les options concernant le domaine à joindre :

  • Type de domaine à joindre : Choisissez Azure Active Directory
  • Intune : il est également possible d’automatiser l’enrôlement des machines virtuelles AVD dans Intune. Cela permet de configurer ces dernières, qu’elles soient dédiées ou partagées entre utilisateurs

Il est toujours demandé de créer un compte administrateur local :

Cliquez sur Suivant et créez un nouvel espace de travail :

Enfin lancez la création quand Azure a validé votre configuration :

Environ 10-15 minutes plus tard, le déploiement doit se finir sur une note positive :

Contrôlez quelques minutes après la bonne disponibilité des machines virtuelles dans le pool d’hôtes AVD :

Pensez à assigner le groupe d’utilisateurs AVD sur l’application créée par le pool d’hôtes :

Pour que la connexion RDP avec l’identité utilisateur Azure AD se fasse bien, il est nécessaire d’ajouter un argument spécifique. La gestion des propriétés RDP se fait directement sur le pool d’hôtes d’AVD :

Afin d’autoriser les utilisateurs à se connecter aux machines virtuelles, l’attribution des rôles RBAC est nécessaire. Pour rappel, ces rôles sont différents de ceux dans Azure AD, puisqu’ils sont affectés au ressources d’Azure. Dans notre AVD, l’affectation de deux rôles RBAC est nécessaires et se fait directement sur le groupe de ressources AVD :

  • Virtual Machine Administrator Login : Groupe d’utilisateurs ayant les droits d’administrateur local sur les machines virtuelles AVD
  • Virtual Machine User Login : Affecter le rôle Virtual Machine User Login au même groupe d’utilisateurs que celui utilisé pour le groupe d’application AVD

Il ne reste plus qu’à tester la solution avec un utilisateur AVD. Cela se fait en téléchargeant le client Windows Remote Desktop PC dédié à Azure Virtual Desktop (téléchargeable ici), ou via l’accès web multi-plateformes (accessible ). J’ai choisi dans mon cas Windows Remote Desktop :

Une seconde demande d’authentification est affichée pour accéder à la machine virtuelle via le protocole RDP :

Une fois le mot de passe saisi, l’ouverture d’une fenêtre RDP donne l’accès au bureau Windows 11 d’AVD. A noter que la jointure AVD apporte également le Seamless Sign on, rendant l’expérience utilisateur encore plus agréable :

Regardez en détail cette jointure avec Azure AD grâce à la commande :

dsregcmd /status

Vérifiez que les machines virtuelles Windows 11 Azure Virtual Desktop sont bien présentes dans la section Devices d’Azure AD. Cet ajout est réalisé lors de la jointure des machines virtuelles à Azure AD :

Vérifiez, si vous avez coché Intune, que vous retrouvez bien mes machines virtuelles dans la console :

Si vous rencontrez des erreurs lors du déploiement, Microsoft met à votre disposition cette page d’aide. Voici une des erreurs possibles :

Erreur de mot de passe de l’ouverture de la session RDP : “The logon attempt failed”

Si vous rencontrez une erreur indiquant que la tentative de connexion a échoué à l’invite des informations d’identification de sécurité Windows, vérifiez les éléments suivants :

  • Vous êtes sur un appareil qui est joint à Azure AD ou à Azure AD hybride au même locataire Azure AD que l’hôte de session OU
  • Vous êtes sur un appareil exécutant Windows 10 2004 ou version ultérieure qui est Azure AD enregistré auprès du même locataire Azure AD que l’hôte de session
  • Le protocole PKU2U est activé à la fois sur le PC local et sur l’hôte de session

La dernière hypothèse est fortement probable dans ce cas. Il faut donc penser à vérifier cette option sur la machine locale ET sur la machine virtuelle AVD, grâce à la commande secpol.msc :

Conclusion

Windows 11 s’intègre de plus en plus dans l’environnement Azure. Azure Virtual Desktop va grandement bénéficier de ce nouvel OS pour accroitre son utilité dans les solutions de bureau à distance. Comme pour Windows 10, on attend toujours la prise en charge de la solution FSLogix dans ce scénario de jointure avec Azure AD.

Comme à chaque fois, pensez également à partager dans les commentaires vos propres expériences sur Azure Virtual Desktop ????