Configurer l'antivirus Microsoft Defender pour VDI

Lors de l'utilisation du bureaux virtuels de type clone liés / instant-clone, il est conseillé de configurer Microsoft Defender afin d'améliorer la sécurité et les performances.

Problème 1: Mise à jour
Lors du clonage, la base de signatures peut vite être périmée si le master n'est pas régulièrement mis à jour car Windows Update est généralement désactivé sur les pools Instant-Clones.
Pour résoudre ce problème, il va falloir configurer Microsoft Defender pour qu'il récupère ses mises à jour sur un partage réseau.

Prérequis : Avoir déployer les derniers ADMX pour Windows 10/11


Sur un serveur accessible par les bureaux virtuels, créer un nouveau dossier et le partager :
Utilisateurs authentifiés : Lecture

exemple : création du partage Defender$

Puis créer un sous-dossier nommé :
{00000000-0000-0000-0000-000000000000}

Télécharger le dernier package de définition antivirus (mpam-fe.exe) : https://go.microsoft.com/fwlink/?LinkID=121721&arch=x64

Placer le package dans le dossier {00000000-0000-0000-0000-000000000000} puis extraire le package en ligne de commande :

mpam-fe.exe /X

Dans l'OU des bureaux virtuels, configurer une stratégie de groupe pour : "Définir l'ordre des sources pour le téléchargement des mises à jour des définitions", activer ce paramètres et le définir sur "FileShares"

"Définissez l'emplacement de la veille de sécurité pour les clients VDI", activer ce paramètres et le définir sur \\votre serveur\partage

Désormais, les bureaux virtuels récupèrent le package mis à jour chaque fois chaque fois que le dossier existant est mis à jour avec un nouveau package.

La mise à jour du package peut-être automatisé, voir article Microsoft lien

Problème 2: Scan antivirus

Afin d'éviter les possibles lenteurs au démarrage, il faut désactiver l'analyse après la mise à jour, car par défaut, un scan est automatiquement effectué.

Quant aux scans planifiés, ils sont lancés, par défaut, aléatoirement sur une plage de quatre heures. Il est possible d'activer ce paramètre pour le forcer explicitement.


Script de création de rôle Horizon sur vCenter 8.0

Afin d'accélérer les déploiements et d'éviter les erreurs, j'ai conçu un script Powershell (basé sur un script VMware) dont le but est d'ajouter un rôle dans vCenter pour l'utilisateur vCenter avec Instant-Clones (compte défini dans Horizon).

Ce script est spécifique à vCenter 8.0 mais il peut facilement être adapté à une version antérieure.
Il va créer un rôle nommé "Horizon" avec uniquement les privilèges nécessaires.

Préquis

  • vCenter 8.0+
  • Machine Windows avec VMware PowerCLI
  • Autorisation de lancer des scripts Powershell (Set-ExecutionPolicy)
  • Compte administrateur du vCenter

Utilisation

  • Télécharger le script lien
  • Modifier la variable $viserver avec le fqdn de votre vCenter
  • Exécuter le script

Import-Module VMware.VimAutomation.Core
$Role = "Horizon"

$viserver = "vcenter.domaine.local"

Connect-VIServer -server $viServer
$RoleIds = @()

# Opérations cryptographiques
"Cryptographer.Access", "Cryptographer.Clone", "Cryptographer.Decrypt", 
"Cryptographer.Encrypt", "Cryptographer.ManageKeyServers", "Cryptographer.Migrate", "Cryptographer.RegisterHost", 

# Banque de données
"Datastore.AllocateSpace", "Datastore.Browse", 

# Dossier
"Folder.Create", "Folder.Delete", 

# Global
"Global.DisableMethods", "Global.EnableMethods", "Global.ManageCustomFields", 
"Global.SetCustomField", "Global.VCServer", 

# Hote	
"Host.Config.AdvancedConfig", "Host.Inventory.EditCluster", 

# Reseau
"Network.Assign", 

# Ressource
"Resource.AssignVMToPool", "Resource.HotMigrate", 

# strategies de stockage de machine virtuelle
"StorageProfile.Apply", "StorageProfile.EditPermissions", "StorageProfile.Update", 
"StorageProfile.View", "StorageProfile.ViewPermissions", "System.Anonymous", 

# Systeme
"System.Read", "System.View", 

# Machine virtuelle / Configuration
"VirtualMachine.Config.AddExistingDisk", "VirtualMachine.Config.AddNewDisk", "VirtualMachine.Config.AddRemoveDevice", 
"VirtualMachine.Config.AdvancedConfig", "VirtualMachine.Config.Annotation", "VirtualMachine.Config.CPUCount", 
"VirtualMachine.Config.ChangeTracking", "VirtualMachine.Config.DiskExtend", "VirtualMachine.Config.DiskLease", 
"VirtualMachine.Config.EditDevice", "VirtualMachine.Config.HostUSBDevice", "VirtualMachine.Config.ManagedBy", 
"VirtualMachine.Config.Memory", "VirtualMachine.Config.MksControl", "VirtualMachine.Config.QueryFTCompatibility", 
"VirtualMachine.Config.QueryUnownedFiles", "VirtualMachine.Config.RawDevice", "VirtualMachine.Config.ReloadFromPath", 
"VirtualMachine.Config.RemoveDisk", "VirtualMachine.Config.Rename", "VirtualMachine.Config.ResetGuestInfo", 
"VirtualMachine.Config.Resource", "VirtualMachine.Config.Settings", "VirtualMachine.Config.SwapPlacement", 
"VirtualMachine.Config.ToggleForkParent", "VirtualMachine.Config.UpgradeVirtualHardware", "VirtualMachine.Interact.DeviceConnection", 

# Machine virtuelle / Interaction
"VirtualMachine.Interact.PowerOff", "VirtualMachine.Interact.PowerOn", "VirtualMachine.Interact.Reset", 
"VirtualMachine.Interact.SESparseMaintenance", "VirtualMachine.Interact.Suspend", "VirtualMachine.Inventory.Create", 

# Machine virtuelle / Inventaire
"VirtualMachine.Inventory.CreateFromExisting", "VirtualMachine.Inventory.Delete", "VirtualMachine.Inventory.Move", 
"VirtualMachine.Inventory.Register", "VirtualMachine.Inventory.Unregister", 

# Machine virtuelle / Provisionnement
"VirtualMachine.Provisioning.Clone", "VirtualMachine.Provisioning.CloneTemplate", "VirtualMachine.Provisioning.Customize", "VirtualMachine.Provisioning.DiskRandomAccess", 
"VirtualMachine.Provisioning.ReadCustSpecs", "VirtualMachine.Provisioning.DeployTemplate", 

# Machine virtuelle / Gestion des snapshots
"VirtualMachine.State.CreateSnapshot", "VirtualMachine.State.RemoveSnapshot", 
"VirtualMachine.State.RenameSnapshot", "VirtualMachine.State.RevertToSnapshot" |

 Foreach-Object{
    $RoleIds += $_
}
New-VIRole -name $Role -Privilege (Get-VIPrivilege -Server $viserver -id $RoleIds) -Server $viserver

Set-VIRole -Role $Role -AddPrivilege (Get-VIPrivilege -Server $viserver -id $RoleIds) -Server $viserver
  • Ajouter une nouvelle autorisation à la racine du vCenter pour l'utilisateur vCenter avec le rôle Horizon

ℹ️ Il faut parfois se délogger de vSphere Web Client pour voir apparaître le nouveau rôle.

vSphere 8.0 : Stockage basé sur le profil ?

Le compte de service vCenter utilisé par VMware Horizon nécessite un certain nombre de privilèges pour effectuer des opérations sur les clones.

Dans un environnement vSAN ou Virtual Volumes, la documentation indique qu'il faut tous les privilèges du groupe Stockage basé sur le profil (Profile Driven Storage).

Hors en vSphere 8.0, ce groupe de privilèges n'existe plus et est remplacé par le groupe Stratégies de stockage de machine virtuelle (VM storage policies).

En conséquence, il faudra ajouter ces privilèges en lieu et place de ceux spécifiés dans la documentation de VMware Horizon lien

Syslog et événements dans le système de fichiers

Dans la console Horizon, il est possible de configurer une base de données d'événements, mais il est aussi possible de paramétrer un serveur Syslog ou un partage réseau pour y stocker ces informations.
Toutefois, une base de données permet une analyse simplifiée avec des outils de reporting tiers ainsi qu'un affichage direct dans la console Horizon.

Syslog

Quand un serveur Syslog est paramétré, les informations de la base d'événements sont envoyées avec le protocole UDP sous forme de message et sont consignées dans le Syslog.

Les messages dans le Syslog reflètent ceux de la base d'événements.
Selon l'éditeur, des notifications et des alarmes peuvent être générées.


Evénements dans le système de fichiers

Les Evénements dans le système de fichiers reflètent également ceux de la base d'événements et sont stockés par défaut au format Syslog dans le dossier "C:\ProgramData\VMware\VDM\events".
Un maximum de 300MB est conservé localement.
Ce répertoire peut être déplacé vers un partage réseau pour conserver une quantité supérieure de logs.

Exemple de logs sur un partage CIFS :

Il est possible de configurer cette fonction avec la commande vdmadmin :

vdmadmin -I -eventSyslog -enable -path \\srv\share -user domain\user -password password 

Configurer PostgreSQL pour Horizon

Cet article explique comment configurer une base de données PostgreSQL sous Windows pour stocker les événements de VMware Horizon.
PostgreSQL a l'avantage d’être gratuit et Open-Source.

Prérequis :
- Une machine Windows Server 2016 ou 2019 (2 vCPU, 6 Go RAM)
- Package d'installation PostgreSQL lien
- Port TCP 5432 ouvert vers Windows Server depuis le Connection Server

Etape 1
Installer PostgreSQL sur la machine Windows Server en suivant ce tutoriel :
https://stacklima.com/installer-postgresql-sur-windows/

Etape 2
Se connecter sur la console de Windows Server et lancer pgAdmin

Créer un Master Password

Se connecter au serveur PostgreSQL avec le mot de passe défini lors de installation

Créer un nouvel utilisateur

Nommer le horizon et lui affecter le privilège Can login

Créer une nouvelle base de données

Nommer la base de données : horizon_events
Mettre l'utilisateur horizon en tant que Owner

Ouvrir l'explorateur sur Windows Server
Editer le fichier C:\Program Files\PostgreSQL\15\data\pg_hba.conf

Trouver la section #IPv4 local connections
Ajouter la ligne suivante où xxx.xxx.xxx.xxx correspond à l'adresse IP du Connection Server

host    all     all    xxx.xxx.xxx.xxx/32        scram-sha-256

Dans Horizon Console> Paramètres> Configuration d'événements
Entrer les informations du serveur et de la base de données

Si tout est bien paramétré, un nouvel événement sera enregistré

Améliorer les performances des VMs vGPU

Il est possible d'améliorer les performances des bureaux virtuels utilisant un vGPU en configurant deux paramètres dans ESXi et Horizon Connection Server afin d'utiliser le mode Max Performance.

Ce mode doit etre activé uniquement si un seul profil vGPU est utilisé dans le pod Horizon.

Etape 1 : Configurer la Stratégie d'attribution de GPU

Etape 2 : Activer le mode Max Performance

  • Se connecter sur la console du Connection Server
  • Ouvrir Modification ADSI
  • Ajouter une nouvelle connexion
  • Se connecter à DC=vdi, DC=vmware, DC=int sur localhost:389
  • Développer OU=Properties et sélectionner OU=VirtualCenter
  • Sur le CN, faire un clic droit, Propriétés,
  • Modifier l'attribut pae-NameValuePair et ajouter la valeur suivante :
    vc-maxperfsinglegpuprofile=1

MàJ : Nvidia vGPU Software 15.1

Voici les nouveautés apportées par cette version :

  • Support de VMware Horizon 2212 (8.8)
  • Support de Windows 10 2022 Update (22H2) comme guest OS
  • Support de GPU System Processor (GSP) pour les déploiements NVIDIA vGPU avec les GPUs basés sur Ada Lovelace architecture
  • Options de l'API NVML et de la commande nvidia-smi pour obtenir des informations sur le comportement du scheduling "time-sliced" des vGPU
  • Support de NVIDIA Virtual Applications (vApps) sur les OS Linux
  • Divers bug résolus
  • Support des GPUs suivants :
    • NVIDIA L40
    • NVIDIA RTX 6000 Ada

⚠️ Rappel : La branche 15.x n'est pas compatible avec le serveur de licence "Legacy"

Suppression des logs du master

Lors de l'optimisation de la VM master Horizon avec VMware OSOT, les fichiers de logs de l'agent Horizon dans le dossier C:\ProgramData\VMware\VDM\logs ne sont pas supprimés.
Cela peut être gênant lors du debugging des bureaux virtuels ou du template interne car ces fichiers peuvent vite devenir volumineux.

Pour supprimer l'ensemble des logs, le script suivant doit être lancé en Powershell sur le master avant son extinction.

<# Arrêt des process Horizon #>
net stop tsdrvdisvc
net stop WSNM
net stop vmware_print_redir_service
net stop vmwrxgservice
net stop Spooler
net stop v4v_agent
net stop VMBlast
net stop hzMonService
net stop vmware-viewcomposer-ga
net stop ftscansvchv
net stop ftnlsv3hv
net stop vmwsprrdpsrv
taskkill /IM "scanner.exe" /F
taskkill /IM "vmwareviewclipboard.exe" /F
taskkill /IM "WSSM.exe" /F
taskkill /IM "vmwsprrdp.exe" /F

<# Suppression des fichiers de logs #>
Remove-Item C:\ProgramData\VMware\VDM\logs\* -Force -ErrorAction SilentlyContinue -Recurse
Remove-Item 'C:\ProgramData\VMware\VMware Blast\*' -Force -ErrorAction SilentlyContinue -Recurse

Script PowerShell disponible ici lien

Automatiser l'installation des VMware Tools

Le master Microsoft Windows utilisé par VMware Horizon nécessite l'installation des VMware Tools de manière personnalisée afin d'optimiser l'image.

Lors de l'installation, il est recommandé de supprimer les composants suivants:

  • Assistance VMware Carbon Black
  • Fournisseur de temps VMware
  • Pilote d'introspection de fichier NSX
  • Pilote d'introspection de réseau NSX
  • Détection des services
  • Dossiers partagés
  • Support de services VSS

Pour installer VMware Tools en ligne de commande de manière automatique, sans prise en charge de VMware NSX, sans reboot automatique et avec retour graphique :

setup64.exe /s /v" /qb REBOOT=R ADDLOCAL=ALL REMOVE=VmwTimeProvider,FileIntrospection,NetworkIntrospection,ServiceDiscovery,Hgfs,VSS,CBHelper

La commande est sur une seule ligne


Pour installer VMware Tools en ligne de commande de manière automatique, avec prise en charge de VMware NSX, sans reboot automatique et avec retour graphique :

setup64.exe /s /v" /qb REBOOT=R ADDLOCAL=ALL REMOVE=VmwTimeProvider,ServiceDiscovery,Hgfs,VSS,CBHelper

La commande est sur une seule ligne


 ⚠️ Windows 10 : VMware Tools 10.1.0 minimum
 ⚠️ Windows 11 : VMware Tools 10.3.5 minimum

MàJ : Horizon 2212

Cette mise à jour est une version ESB (Extended Service Branch info)

Principales nouveautés :

  • Horizon Published Apps on Demand (nécessite App Volumes 2212)
  • Support des clés de licences MAK avec Instant-Clone
  • Support des pools vTPM Instant-Clone en provisioning mode B (sans VM Parent)
  • Sélection de l'OU Active Directory lors de la création d'un pool automatique full clone
  • Optimisation intelligente avec Blast Optimizer
  • Amélioration des performances GPU sur les machines physiques en Windows Server 2022
  • Paramétrage réseau des pool Instant-Clone basé sur le master et non plus sur le snapshot
  • Support de 500 VM par ESXi dans les environnements non vSAN
  • Support de IPv6 sur Cloud Pod Architecture
  • Agent Linux : 8 nouvelles versions de Linux supportées dont Debian (7 retirées)
  • Support de PostgreSQL 13.8, 14.5 et 15.0
  • Persistence de l'affichage des colonnes masquées/affichées dans la console Horizon
  • Création de CSR et import de certificat depuis la console Horizon

⬆️ L'upgrade vers la 2212 est possible depuis Horizon 7.13 ou 2206 minimum.
⚠️ VMware Tools 10.3.23/24/25 ne sont pas supportés par Horizon 2212.

Page 6 of 12