[{"content":"ℹ️ À savoir · En bref\nAnsible est un outil open source (Red Hat) qui automatise la configuration de serveurs et d'applications. On décrit l'état voulu en YAML ; Ansible se connecte en SSH (Linux) ou WinRM/SSH (Windows), applique ce qui manque, et ne touche à rien si tout est déjà conforme.\nTrois mots à retenir : agentless (rien à installer sur les cibles), push (c'est le nœud de contrôle qui pousse), idempotent (rejouer = même résultat).\nObjectifs de la fiche Comprendre l'architecture et le vocabulaire Ansible.Écrire un inventaire et un playbook idempotent.Utiliser variables, templates, handlers et rôles.Exécuter sans risque (--check --diff, --limit) et éviter les pièges classiques. Le vocabulaire en 1 tableau TermeCe que c'estExempleNœud de contrôleLa machine où Ansible est installé et d'où partent les exécutions.Poste admin Linux, WSL, conteneurNœud géréUne cible configurée par Ansible. Aucun agent permanent.vda-ubuntu01, srv-sf01InventaireLa liste des cibles, rangées en groupes, avec leurs variables.inventory/hosts.ymlModuleL'unité de travail : une action idempotente avec des paramètres.ansible.builtin.aptTaskUn appel de module, avec un nom lisible.« Installer sssd »PlayAssocie un groupe d'hôtes à une liste de tâches.hosts: vda_linuxPlaybookFichier YAML contenant un ou plusieurs plays.site.ymlHandlerTâche déclenchée seulement si une autre tâche a changé quelque chose.Redémarrer un serviceRôlePaquet réutilisable de tâches, templates, variables, handlers.rôle linux_vdaCollectionDistribution de modules/rôles/plugins par éditeur (FQCN).ansible.windows, microsoft.adFactsInfos collectées automatiquement sur la cible au début du play.ansible_distribution Architecture : comment ça s\u0026rsquo;exécute Le nœud de contrôle pousse les modules vers les cibles via SSH ou WinRM À chaque tâche, Ansible copie un petit module sur la cible, l'exécute, récupère un résultat JSON puis nettoie. Le statut retourné est l'un de :\nStatutSignificationCouleur consoleokL'état était déjà conforme, rien n'a été modifié.vertchangedAnsible a modifié la cible pour la rendre conforme.jaunefailedLa tâche a échoué : l'hôte sort du play.rougeskippedTâche ignorée (condition when fausse, mode check…).cyanunreachableConnexion impossible (SSH, DNS, identifiants).rouge L\u0026rsquo;inventaire Il décrit qui est géré. Format YAML (ou INI), statique ou dynamique (plugins Azure, vSphere, etc. qui interrogent l'API à chaque exécution).\ninventory/hosts.yml\nall: children: vda_linux: hosts: vda-ubuntu01: vda-ubuntu02: vars: ansible_user: ansible storefront: hosts: srv-sf01: ansible_host: 10.0.10.21 vars: ansible_connection: winrm ansible_winrm_transport: kerberos ansible_port: 5986 💡 Astuce\nSors les variables de l'inventaire : un dossier group_vars/vda_linux.yml et host_vars/srv-sf01.yml à côté de l'inventaire sont chargés automatiquement. Vérifie le résultat avec ansible-inventory -i inventory --graph --vars.\nAnatomie d\u0026rsquo;un playbook Playbook → plays → (rôles) → tasks → modules ; les handlers sont notifiés playbooks/vda_linux.yml\n--- - name: Configurer les VDA Linux hosts: vda_linux become: true # sudo vars: ad_domain: corp.local tasks: - name: Installer sssd, realmd et Kerberos ansible.builtin.apt: name: [sssd, realmd, krb5-user] state: present # état voulu, pas une action update_cache: true - name: Déployer sssd.conf depuis un template Jinja2 ansible.builtin.template: src: sssd.conf.j2 dest: /etc/sssd/sssd.conf owner: root mode: \u0026#34;0600\u0026#34; notify: Redémarrer sssd # seulement si le fichier change handlers: - name: Redémarrer sssd ansible.builtin.service: name: sssd state: restarted ℹ️ À savoir · Le concept clé\nIdempotence : state: present décrit un résultat, pas une commande. 1re exécution → changed, 2e exécution → ok partout, changed=0.\nC'est le test de qualité n°1 d'un playbook : le rejouer deux fois de suite et vérifier qu'il n'y a plus de changement.\nVariables, templates et précédence Les variables s'écrivent \u0026#123;\u0026#123; ma_variable }} (moteur Jinja2), dans les tâches comme dans les templates .j2. Quand la même variable est définie à plusieurs endroits, la plus « proche » de l'exécution gagne :\nPrioritéSource (version simplifiée)Usage recommandé1 — la plus faibleRôle : defaults/main.ymlValeurs par défaut, faites pour être surchargées2Inventaire : group_vars/all, puis group_vars/\u0026lt;groupe\u0026gt;Paramètres d'environnement / de groupe3Inventaire : host_vars/\u0026lt;hôte\u0026gt;Exceptions propres à une machine4Facts collectésLecture seule : OS, IP, mémoire…5Play : vars:, vars_files:Constantes du playbook6Rôle : vars/main.ymlConstantes internes du rôle (rarement surchargées)7set_fact / registerValeurs calculées pendant l'exécution8 — la plus forteLigne de commande : -e var=valeurForçage ponctuel ; gagne toujours ⚠️ Piège\nUne valeur YAML qui commence par \u0026#123;\u0026#123; doit être entre guillemets : dest: \"\u0026#123;\u0026#123; base_dir }}/app.conf\". Sans guillemets, YAML l'interprète comme un dictionnaire et le playbook ne se charge pas.\nRôles et collections Un rôle est une arborescence normalisée que l'on réutilise d'un projet à l'autre ; on le crée avec ansible-galaxy role init linux_vda.\nstructure d'un rôle\nroles/linux_vda/ ├── defaults/main.yml # variables par défaut (priorité basse) ├── vars/main.yml # constantes du rôle ├── tasks/main.yml # point d\u0026#39;entrée des tâches ├── handlers/main.yml # handlers ├── templates/sssd.conf.j2 ├── files/ # fichiers copiés tels quels └── meta/main.yml # dépendances, plateformes Les collections apportent les modules hors cœur. On les déclare dans collections/requirements.yml puis ansible-galaxy collection install -r collections/requirements.yml. Toujours appeler un module par son FQCN (ansible.windows.win_feature plutôt que win_feature).\nCibles Windows : les différences SujetLinuxWindowsTransportSSH (port 22)WinRM HTTPS 5986 (ou HTTP 5985), ou OpenSSHPrérequis ciblePython 3PowerShell 5.1+ / .NETAuthentificationClé SSHKerberos (recommandé en domaine), NTLM, CredSSP, certificatÉlévationbecome_method: sudobecome_method: runasModulesansible.builtin.*ansible.windows.*, community.windows.*, microsoft.ad.* Commandes essentielles CommandeÀ quoi ça sertansible all -m ansible.builtin.pingTester la connexion + Python sur les Linuxansible storefront -m ansible.windows.win_pingIdem côté Windowsansible-inventory -i inventory --graphVisualiser groupes et hôtesansible-playbook site.yml --syntax-checkValider la syntaxe sans rien exécuteransible-playbook site.yml --check --diffSimulation : montre ce qui changerait (dry run)ansible-playbook site.yml --limit vda-ubuntu01Restreindre à un hôte / groupeansible-playbook site.yml --tags sssdN'exécuter que les tâches étiquetéesansible-playbook site.yml -e env=prdPasser une variable (priorité maximale)ansible-vault encrypt_string 'S3cret' --name pwdChiffrer un secret à coller dans un fichier de varsansible-doc ansible.builtin.templateDocumentation hors-ligne d'un moduleansible-lintVérifier les bonnes pratiques Pièges classiques SymptômeCauseParadeLa tâche est « changed » à chaque exécutioncommand / shell n'ont aucune notion d'étatModule dédié ; sinon creates:, changed_when:Mot de passe visible dans Git ou les logsSecret en clair dans les varsansible-vault + no_log: true sur la tâche« conflicting action statements » / erreur YAMLIndentation ou \u0026#123;\u0026#123; }} non quotéGuillemets, éditeur YAML, ansible-lintLe handler ne s'est pas exécutéUne tâche a échoué avant la fin du play--force-handlers ou meta: flush_handlers--check « rate » des tâchesLes modules command/shell sont ignorés en checkcheck_mode: false si la commande est sans effetModule introuvableCollection non installée ou nom court ambiguFQCN + requirements.yml 🔷 En contexte Citrix\nGold image Linux VDA : paquets, jonction AD via sssd/realmd, variables de ctxsetup.sh, puis MCS clone l'image : Ansible rend la préparation reproductible.\nGold image Windows : rôles et fonctionnalités, clés de registre, optimisations, installation silencieuse du VDA.\nInfra : configuration homogène des StoreFront, Cloud Connectors (prérequis OS), sauvegardes de config.\nCombo classique : Terraform crée les VM / le catalogue, Ansible configure l'intérieur (voir fiche TF-01).\nÀ retenir Agentless, push, SSH/WinRM : seul le nœud de contrôle a Ansible.On décrit un état ; un bon playbook rejoué donne changed=0.Inventaire = qui · Playbook = quoi · Rôle = comment le réutiliser.--check --diff et --limit avant toute exécution en production.Secrets dans ansible-vault, modules appelés par leur FQCN. Auto-évaluation Q1. Pourquoi dit-on qu'Ansible est « agentless » ?→ Il n'y a aucun service permanent sur les cibles : le module est copié et exécuté via SSH/WinRM, puis supprimé.\nQ2. Quelle est la différence entre une task et un handler ?→ Une task s'exécute toujours (sauf condition) ; un handler ne s'exécute qu'une fois, en fin de play, et seulement s'il a été notifié par une task « changed ».\nQ3. Une variable port vaut 80 dans defaults/ du rôle, 8080 dans group_vars/web, et on lance -e port=9000. Quelle valeur ?→ 9000 : les extra vars (-e) ont toujours la priorité la plus haute.\nQ4. Comment vérifier ce qu'un playbook va modifier sans rien changer ?→ ansible-playbook site.yml --check --diff (en gardant en tête que command/shell sont ignorés).\nPour aller plus loin Documentation officielle AnsiblePrécédence des variables (référence complète)Ansible sur WindowsAnsible Galaxy (rôles et collections)ansible-lint ","permalink":"https://melior.guru/fiches/ans-01/","summary":"Fiche d\u0026rsquo;apprentissage Ansible : architecture agentless, inventaire, playbook, modules, variables, handlers, rôles, collections, commandes et pièges.","title":"Ansible — Les fondamentaux : inventaire, playbooks, rôles"},{"content":"ℹ️ À savoir · En bref\nUn rôle regroupe tout ce qu'il faut pour une fonction (installer un VDA, configurer StoreFront). Une collection est le format de distribution moderne : elle embarque des rôles, des modules, des plugins et des playbooks, versionnés ensemble sous un nom namespace.collection.\nObjectif : passer de playbooks copiés-collés à une bibliothèque interne versionnée et testée, installée partout de la même façon.\nObjectifs de la fiche Écrire des rôles robustes : contrat d'entrée validé, valeurs par défaut, handlers.Choisir entre import_role et include_role.Créer, construire et publier une collection.Installer ses dépendances de façon reproductible et tester ses rôles. Un rôle bien conçu ÉlémentBonne pratiquedefaults/main.ymlToutes les variables que l'utilisateur peut changer, préfixées par le nom du rôle (vda_version, vda_controllers)vars/main.ymlConstantes internes uniquement (chemins, noms de paquets par OS)meta/argument_specs.ymlContrat d'entrée : types, valeurs autorisées, variables obligatoires — validé automatiquement avant le rôletasks/main.ymlCourt : il inclut des fichiers par étape (install.yml, configure.yml)handlers/main.ymlRedémarrages de services ; listen pour qu'un même événement déclenche plusieurs handlersmeta/main.ymlPlateformes supportées et dépendances (à limiter)README.mdVariables, exemple d'appel, prérequis contrat d'entrée\n# roles/citrix_vda/meta/argument_specs.yml argument_specs: main: short_description: Installe le VDA Citrix sur Windows options: vda_version: type: str required: true description: Version de l\u0026#39;installeur, ex. \u0026#34;2507\u0026#34; vda_controllers: type: list elements: str required: true vda_mode: type: str choices: [masterimage, persistent] default: masterimage 💡 Astuce\nAvec argument_specs, une variable manquante ou mal typée arrête le play avant la première tâche, avec un message clair. C'est la documentation et le garde-fou du rôle en un seul fichier.\nimport_role ou include_role ? import_role / roles:include_roleMomentStatique : résolu au chargement du playbookDynamique : résolu à l'exécutionConditions whenAppliquées à chaque tâche du rôleAppliquées une fois à l'inclusionBouclesImpossiblePossible (loop)TagsHérités par les tâches, visibles dans --list-tasksIl faut apply: \u0026#123; tags: … } pour les propagerUsage typiqueRôles toujours exécutésRôle choisi selon une variable, ou répété Les collections Structure d'une collection : métadonnées, rôles, plugins et playbooks galaxy.yml\n# galaxy.yml namespace: contoso name: citrix version: 1.2.0 readme: README.md authors: [Alice \u0026lt;alice@contoso.com\u0026gt;] description: Rôles et modules pour Citrix CVAD / DaaS dependencies: ansible.windows: \u0026#34;\u0026gt;=2.0.0\u0026#34; microsoft.ad: \u0026#34;\u0026gt;=1.0.0\u0026#34; repository: https://git.contoso.com/infra/contoso.citrix On appelle tout par son FQCN : contoso.citrix.vda_windows pour un rôle, contoso.citrix.mon_module pour un module.meta/runtime.yml déclare la version minimale d'ansible-core (requires_ansible) et les redirections de modules renommés.Les collections s'installent dans collections/ansible_collections/ (chemin réglable par collections_path dans ansible.cfg). Construire, publier, consommer Du développement à l'installation : Galaxy, Automation Hub privé ou simple dépôt Git requirements.yml\n# collections/requirements.yml collections: - name: ansible.windows version: \u0026#34;\u0026gt;=2.5.0,\u0026lt;3.0.0\u0026#34; - name: microsoft.ad version: \u0026#34;1.9.0\u0026#34; - name: https://git.contoso.com/infra/contoso.citrix.git type: git version: v1.2.0 # tag, branche ou commit roles: - name: geerlingguy.docker # rôle « standalone » depuis Galaxy version: \u0026#34;7.4.1\u0026#34; CommandeÀ quoi ça sertansible-galaxy collection init contoso.citrixCréer le squelette d'une collectionansible-galaxy role init roles/storefrontCréer le squelette d'un rôleansible-galaxy collection buildProduire l'archive contoso-citrix-1.2.0.tar.gzansible-galaxy collection publish *.tar.gz --server hubPublier sur Galaxy ou sur un Automation Hub privéansible-galaxy install -r requirements.ymlInstaller rôles et collections listésansible-galaxy collection listVoir les collections installées et leurs versions ⚠️ Piège\nSans version figée dans requirements.yml, deux personnes (ou la CI et AWX) n'exécutent pas le même code. Fixe les versions, comme le lock file en Terraform.\nTester ses rôles OutilCe qu'il vérifieansible-lintBonnes pratiques : FQCN, idempotence, noms de tâches, modules dépréciés ; profils de sévérité (production)MoleculeCycle complet sur une machine jetable : create → converge → idempotence → verify → destroyansible-testTests de collection : sanity (qualité du code), unit et integration pour les modules--check --diffSimulation sur un environnement réel avant exécution Molecule\nmolecule init scenario default # driver docker/podman via le paquet molecule-plugins molecule test # crée, applique, rejoue (idempotence), vérifie, détruit molecule converge # applique seulement (boucle de développement rapide) molecule login # se connecter à l\u0026#39;instance de test ℹ️ À savoir\nPour des rôles Windows (VDA, StoreFront), Molecule passe par le driver delegated avec une VM de test (Azure, vSphere) créée et détruite par le scénario, car les conteneurs Windows ne conviennent pas.\nPièges classiques SymptômeCauseParadeUn rôle s'exécute deux foisDépendance déclarée dans meta + appel expliciteLimiter les dépendances meta ; allow_duplicates: false par défautVariable du rôle ignoréeDéfinie dans vars/ (priorité haute) au lieu de defaults/Variables réglables dans defaults/Tags sans effet sur include_roleLes tags ne se propagent pas aux tâches inclusesapply: \u0026#123; tags: [...] } ou import_roleModule introuvable dans AWXCollection absente de l'environnement d'exécutionrequirements.yml dans le projet ou EE personnalisé (ANS-04)Collisions de noms de variablesVariables non préfixées partagées entre rôlesPréfixer par le nom du rôle 🔷 En contexte Citrix\nUne collection contoso.citrix regrouperait tes rôles vda_windows, vda_linux, storefront, cloud_connector_prereqs et seal_image (ANS-03), avec un playbook build_image.yml prêt à l'emploi.\nVersionnée et taguée, elle devient livrable chez tes clients : mêmes rôles, seules les variables (group_vars) changent d'un environnement à l'autre.\nÀ retenir Variables réglables dans defaults/, contrat dans meta/argument_specs.yml.import_role statique, include_role dynamique (boucles, conditions à l'exécution).Collection = rôles + modules + plugins versionnés, appelés par FQCN.requirements.yml avec versions figées, pour la CI comme pour AWX.Molecule pour tester l'idempotence, ansible-lint pour la qualité. Auto-évaluation Q1. Où placer une variable que l'utilisateur du rôle doit pouvoir modifier ?→ Dans defaults/main.yml (priorité la plus basse), idéalement documentée dans meta/argument_specs.yml.\nQ2. Tu veux appliquer un rôle pour chaque élément d'une liste. import_role ou include_role ?→ include_role : seul l'appel dynamique accepte loop.\nQ3. Comment installer une collection interne hébergée sur Git à une version précise ?→ Dans requirements.yml : name: \u0026lt;url\u0026gt;.git, type: git, version: v1.2.0, puis ansible-galaxy install -r requirements.yml.\nQ4. Que vérifie la séquence molecule test en plus de l'exécution du rôle ?→ L'idempotence (second passage sans changement) et les vérifications du scénario, sur une instance détruite à la fin.\nPour aller plus loin Rôles (documentation Ansible)Développer une collectionInstaller des collections et requirements.ymlMoleculeansible-lint ","permalink":"https://melior.guru/fiches/ans-02/","summary":"Fiche d\u0026rsquo;apprentissage Ansible : rôles avancés (contrat d\u0026rsquo;entrée, dépendances, import vs include, handlers), collections (structure, galaxy.yml, FQCN), distribution via Galaxy, Automation Hub ou Git, requirements.yml, tests avec Molecule et ansible-lint.","title":"Ansible — Rôles avancés, collections et Ansible Galaxy"},{"content":"ℹ️ À savoir · En bref\nAnsible gère Windows sans agent, en WinRM (historique) ou en SSH (support officiel depuis ansible-core 2.18, OpenSSH ≥ 7.9 donc Windows Server 2022 et plus). Les modules Windows sont écrits en PowerShell et vivent dans les collections ansible.windows, community.windows et microsoft.ad.\nCôté Citrix, l'usage phare est la construction reproductible des images maîtres (VDA Windows et Linux) avant de les livrer à MCS, puis la configuration homogène de StoreFront.\nObjectifs de la fiche Connecter Ansible à des serveurs Windows du domaine (Kerberos) et éviter le piège du double saut.Connaître les modules Windows indispensables.Construire une image VDA de bout en bout, redémarrages compris.Automatiser StoreFront et les VDA Linux avec la même logique. Se connecter aux cibles Windows ConnexionCôté nœud de contrôleQuand la choisirWinRM (HTTPS 5986)pip install pywinrm[kerberos] + client KerberosLe standard en domaine ; ansible_winrm_transport: kerberosPSRPpip install pypsrp[kerberos]Même port que WinRM, souvent plus rapide pour les gros transfertsSSH (OpenSSH Windows)Rien de plus qu'SSHWindows Server 2022+, clé SSH ; attention au double saut inventaire Windows\n# group_vars/windows.yml ansible_connection: winrm ansible_port: 5986 ansible_winrm_transport: kerberos ansible_winrm_server_cert_validation: validate # certificat de l\u0026#39;AD CS ansible_user: svc-ansible@CORP.LOCAL # royaume Kerberos en MAJUSCULES ansible_password: \u0026#34;{{ vault_svc_ansible_password }}\u0026#34; ⚠️ Piège\nDouble saut : depuis la session distante, le compte ne peut pas accéder à un partage réseau (\\\\srv\\sources) avec Kerberos simple ou une clé SSH. Solutions : copier les sources en local (win_copy, win_get_url), activer la délégation Kerberos (ansible_winrm_kerberos_delegation: true), ou become sur la tâche concernée.\nKerberos échoue si l'horloge du nœud de contrôle dérive de plus de 5 minutes, ou si on cible une adresse IP au lieu du FQDN.\nLes modules Windows indispensables ModuleUsageansible.windows.win_featureRôles et fonctionnalités (RDS, .NET…)ansible.windows.win_packageInstaller un MSI / EXE silencieux, idempotent via product_id ou creates_pathansible.windows.win_command / win_shellLancer un exécutable ou du PowerShell brut (creates / removes pour l'idempotence)ansible.windows.win_powershellScript PowerShell avec contrôle de l'état : $Ansible.Changed, $Ansible.Failedansible.windows.win_regeditClés et valeurs de registreansible.windows.win_serviceDémarrage, arrêt, type de démarrageansible.windows.win_updatesMises à jour Windows, avec redémarrages intégrés (reboot: true)ansible.windows.win_rebootRedémarrer et attendre le retour de la machinemicrosoft.ad.membershipJoindre ou retirer une machine du domainecommunity.windows.win_scheduled_taskTâches planifiées Construire une image VDA Terraform crée la VM, Ansible la prépare, MCS diffuse le snapshot playbooks/vda_image.yml\n- name: Préparer l\u0026#39;image maître VDA hosts: vda_master roles: - role: windows_base # fonctionnalités, langue, registre - role: windows_updates # ansible.windows.win_updates + reboot - role: apps # win_package pour chaque application - role: citrix_vda # voir ci-dessous - role: seal # optimisation, nettoyage, arrêt Installer le VDA, redémarrages compris L'installeur VDA peut demander un redémarrage au milieu de l'installation. Il faut alors redémarrer puis le relancer sans paramètre depuis %ProgramData%\\Citrix\\XenDesktopSetup, jusqu'à ce que le fichier d'état disparaisse.\nCodes retour : 0 ou 8 = terminé (redémarrage requis), 3 = redémarrer puis relancer roles/citrix_vda/tasks/main.yml\n- name: Copier l\u0026#39;installeur en local (évite le double saut) ansible.windows.win_copy: src: files/VDAServerSetup.exe dest: C:\\Install\\VDAServerSetup.exe - name: Installer le VDA (premier passage) ansible.windows.win_command: \u0026gt;- C:\\Install\\VDAServerSetup.exe /quiet /noreboot /components VDA /controllers \u0026#34;{{ vda_controllers | join(\u0026#39; \u0026#39;) }}\u0026#34; /enable_hdx_ports /enable_hdx_udp_ports /enable_real_time_transport /masterimage args: creates: C:\\Program Files\\Citrix\\Virtual Desktop Agent\\BrokerAgent.exe # VDA déjà présent register: vda failed_when: vda.rc is defined and vda.rc not in [0, 3, 8] - name: Redémarrer ansible.windows.win_reboot: when: vda.rc is defined and vda.rc in [0, 3, 8] - name: Reprendre l\u0026#39;installation tant que le fichier d\u0026#39;état existe ansible.windows.win_command: C:\\ProgramData\\Citrix\\XenDesktopSetup\\XenDesktopVdaSetup.exe args: removes: C:\\ProgramData\\Citrix\\XenDesktopSetup\\CitrixVirtualDesktopAgent.xml register: vda_resume failed_when: vda_resume.rc is defined and vda_resume.rc not in [0, 3, 8] # puis win_reboot, et rejouer cette tâche tant que le code vaut 3 💡 Astuce\n/controllers reçoit tes Cloud Connectors (DaaS) ou tes DDC (on-prem). Pour une image MCS, on peut aussi laisser MCS gérer l'enregistrement et omettre la liste.\nGarde la version du VDA dans une variable (vda_version) et l'installeur dans un dépôt d'artefacts : changer de version devient une modification de variable, comme le snapshot dans TF-04.\nOptimiser et sceller l\u0026rsquo;image Citrix Optimizer : CtxOptimizerEngine.ps1 en mode Execute avec le modèle correspondant à ton OS, lancé via win_powershell.Désactiver les mises à jour automatiques, vider les journaux et fichiers temporaires, arrêter les services inutiles.Antivirus : déposer le script d'intégration VDI de Defender for Endpoint sans intégrer l'image elle-même (voir M365-DEF-01).Dernière tâche : arrêt propre de la VM (win_shell: shutdown /s /t 5), puis snapshot côté hyperviseur. StoreFront en PowerShell StoreFront se configure avec ses modules PowerShell Citrix.StoreFront*. Le module win_powershell permet de rester idempotent : on lit l'état, on ne modifie que si besoin, et on le signale avec $Ansible.Changed.\nroles/storefront/tasks/main.yml\n- name: Sauvegarder la configuration StoreFront ansible.windows.win_powershell: script: | Get-Module -ListAvailable Citrix.StoreFront* | Import-Module Export-STFConfiguration -TargetFolder \u0026#39;D:\\Backup\\StoreFront\u0026#39; ` -ZipFileName \u0026#34;sf-{{ ansible_date_time.date }}\u0026#34; -NoEncryption $Ansible.Changed = $true - name: Exemple de motif idempotent ansible.windows.win_powershell: script: | $actuel = (Get-ItemProperty \u0026#39;HKLM:\\SOFTWARE\\Exemple\u0026#39; -Name Valeur -ErrorAction SilentlyContinue).Valeur if ($actuel -ne 1) { New-Item \u0026#39;HKLM:\\SOFTWARE\\Exemple\u0026#39; -Force | Out-Null Set-ItemProperty \u0026#39;HKLM:\\SOFTWARE\\Exemple\u0026#39; -Name Valeur -Value 1 $Ansible.Changed = $true } else { $Ansible.Changed = $false } ℹ️ À savoir\nPour un groupe de serveurs StoreFront, la configuration se fait sur le serveur principal puis se propage au groupe ; l'export / import (Export-STFConfiguration / Import-STFConfiguration) sert à sauvegarder ou cloner un environnement de recette.\nEt les VDA Linux ? Même logique, modules ansible.builtin : paquets, jonction AD (sssd / realmd, voir ANS-01), installation du paquet VDA.VDA autonome : ctxsetup.sh en mode silencieux, piloté par des variables d'environnement CTX_XDL_* (liste des DDC, intégration AD, démarrage des services…).Image MCS : on renseigne /etc/xdl/mcs/mcs.conf (template Jinja2) puis on lance deploymcs.sh ; pas de jonction AD de l'image, c'est MCS qui joint les clones. Pièges classiques SymptômeCauseParade« Access denied » sur un partage pendant l'installationDouble sautSources copiées en local, délégation Kerberos ou becomeLe playbook perd la machine pendant l'installationRedémarrage déclenché par l'installeur lui-mêmeToujours /noreboot, puis win_reboot piloté par Ansiblewin_updates interminableBeaucoup de mises à jour cumuléesPartir d'une image récente, reboot: true, timeout généreuxInstalleur bloqué sans erreurIl attend une interaction en session systèmeVérifier les options silencieuses, tester avec PsExec -s« changed » à chaque passagewin_command / win_shell sans garde-foucreates / removes, product_id, ou $Ansible.Changed 🔷 En contexte Citrix\nChaîne complète : TF-01 (VM maître) → ANS-03 (préparation de l'image) → snapshot → TF-04 (catalogue MCS). Le tout peut tourner dans un pipeline CI/CD (ANS-04, TF-03).\nCommence par automatiser un rôle à la fois sur ton image actuelle (par exemple l'installation du VDA), puis remplace progressivement les étapes manuelles.\nÀ retenir WinRM + Kerberos en domaine ; SSH supporté officiellement depuis ansible-core 2.18 (Windows Server 2022+).Double saut : sources en local, délégation Kerberos ou become.Installeur VDA : /noreboot, codes 0 / 8 terminé, 3 = redémarrer puis relancer sans paramètre.win_powershell + $Ansible.Changed pour garder l'idempotence en PowerShell.Linux VDA MCS : mcs.conf + deploymcs.sh, pas de jonction AD de l'image. Auto-évaluation Q1. Pourquoi une tâche qui lit \\\\srv\\sources\\setup.exe échoue-t-elle alors que le compte a les droits ?→ C'est le double saut : la session distante n'a pas d'identifiants réutilisables pour un second serveur. Copier en local, déléguer Kerberos ou utiliser become.\nQ2. L'installeur VDA renvoie 3. Que fait le playbook ?→ Il redémarre la machine puis relance XenDesktopVdaSetup.exe sans paramètre depuis %ProgramData%\\Citrix\\XenDesktopSetup, jusqu'à obtenir 0 ou 8 et la disparition du fichier d'état.\nQ3. Comment rendre idempotente une tâche win_powershell ?→ Lire l'état actuel, ne modifier que s'il diffère, et positionner $Ansible.Changed en conséquence.\nQ4. Pour une image Linux VDA destinée à MCS, quel fichier configures-tu ?→ /etc/xdl/mcs/mcs.conf, puis deploymcs.sh ; MCS joint ensuite les clones au domaine.\nPour aller plus loin Gérer Windows avec AnsibleWindows et SSH (Ansible)Collection ansible.windowsCitrix : installer les VDA en ligne de commande / SCCMCitrix Optimizer ","permalink":"https://melior.guru/fiches/ans-03/","summary":"Fiche d\u0026rsquo;apprentissage Ansible pour Windows et Citrix : connexion WinRM / PSRP / SSH, Kerberos et double saut, modules Windows, construction d\u0026rsquo;une image VDA (mises à jour, applications, installation du VDA avec redémarrages, optimisation), StoreFront en PowerShell, Linux VDA, pièges.","title":"Ansible — Windows et Citrix : images VDA, StoreFront"},{"content":"ℹ️ À savoir · En bref\nLancer ansible-playbook depuis son poste ne passe pas à l'échelle : pas de traçabilité, secrets dispersés, droits flous. AWX (projet open source) et Ansible Automation Platform (offre Red Hat, dont le cœur est l'*automation controller*, ex-Tower) centralisent l'exécution : interface web, API, droits, journal de chaque exécution.\nLes playbooks restent dans Git ; la plateforme les exécute dans des environnements d'exécution (conteneurs) reproductibles.\nObjectifs de la fiche Comprendre les objets d'AWX / AAP et comment ils s'assemblent.Construire un environnement d'exécution avec ses collections.Exposer un playbook en libre-service (survey) avec les bons droits.Brancher Ansible dans une chaîne CI/CD. AWX ou Ansible Automation Platform ? AWXAnsible Automation PlatformNatureProjet communautaire, amont (upstream)Produit Red Hat supportéInstallationAWX Operator sur KubernetesInstalleur conteneurisé, RPM ou OpenShiftCycle de vieVersions fréquentes, pas de supportVersions stabilisées, support, certificationsComposants en plus—Private Automation Hub, Event-Driven Ansible, automation mesh, collections certifiéesPour quiLab, PME, apprentissageProduction en entreprise Les objets et leur assemblage Un modèle de tâche assemble projet, inventaire, identifiants et environnement d'exécution ObjetRôleOrganisation / équipesCloisonnement et droits : qui voit, modifie ou lance quoiProjetPointe vers un dépôt Git (branche ou tag) ; synchronisé avant exécutionInventaireStatique, issu d'un fichier du projet, ou dynamique (Azure, vCenter, AD…) rafraîchi automatiquementIdentifiants (credentials)Comptes machine, Vault, cloud, Git : chiffrés en base, injectés au lancement, jamais affichésEnvironnement d'exécution (EE)Image conteneur avec ansible-core, Python et les collections nécessairesModèle de tâche (job template)Playbook + inventaire + identifiants + EE + options (limit, tags, verbosité, survey)WorkflowEnchaînement de modèles avec branches succès / échec et étapes d'approbationPlanification / webhookLancement à heure fixe, ou à chaque push Git Environnements d\u0026rsquo;exécution Fini le « ça marche sur mon poste » : on décrit l'image, ansible-builder la construit, et la même image sert en local (ansible-navigator) et dans AWX.\nexecution-environment.yml\n# execution-environment.yml version: 3 images: base_image: name: quay.io/ansible/awx-ee:latest # ou une image de base Red Hat dependencies: galaxy: requirements.yml # ansible.windows, microsoft.ad, contoso.citrix… python: requirements.txt # pywinrm[kerberos], pypsrp… system: bindep.txt # krb5-devel, gcc… additional_build_steps: append_final: - COPY krb5.conf /etc/krb5.conf commandes\nansible-builder build -t registry.contoso.com/ee-citrix:1.0 # construire l\u0026#39;image podman push registry.contoso.com/ee-citrix:1.0 # la publier ansible-navigator run site.yml --eei registry.contoso.com/ee-citrix:1.0 -i inventory # exécuter en local dans le même EE 💡 Astuce\nPour Windows en Kerberos, l'EE doit contenir pywinrm[kerberos] (ou pypsrp) et la configuration Kerberos du domaine : c'est la cause n°1 des échecs « ça marchait en ligne de commande » (voir ANS-03).\nLibre-service : surveys et droits Un survey affiche un petit formulaire au lancement (liste de choix, texte, nombre) et transmet les réponses comme extra_vars.Exemple : un modèle « Ajouter des VDA au catalogue » demande le catalogue et le nombre de machines, puis lance le playbook ou le Terraform correspondant.Les droits (RBAC) séparent qui modifie un modèle (admin) de qui peut seulement l'exécuter (support N1).Les identifiants sont utilisables sans être visibles : le support lance la tâche sans jamais connaître le mot de passe du compte de service. Déclencher depuis l\u0026rsquo;extérieur déclenchement\n# CLI awx (paquet awxkit) — même logique pour l\u0026#39;API REST export CONTROLLER_HOST=https://awx.contoso.com export CONTROLLER_OAUTH_TOKEN=\u0026lt;jeton\u0026gt; # depuis le coffre du pipeline awx job_templates launch \u0026#34;Construire image VDA\u0026#34; \\ --extra_vars \u0026#39;{\u0026#34;vda_version\u0026#34;: \u0026#34;2507\u0026#34;}\u0026#39; --monitor # Ou en Ansible, avec la collection awx.awx (ou ansible.controller pour AAP) - name: Lancer la construction d\u0026#39;image awx.awx.job_launch: job_template: \u0026#34;Construire image VDA\u0026#34; extra_vars: { vda_version: \u0026#34;2507\u0026#34; } wait: true ℹ️ À savoir\nLa configuration d'AWX elle-même (projets, modèles, droits) peut être décrite en code avec la collection awx.awx / ansible.controller : on versionne la plateforme comme le reste.\nLe pipeline CI/CD Contrôles automatiques à chaque pull request, puis exécution par AWX après fusion pipeline (exemple GitHub Actions)\n# .github/workflows/ansible.yml (même principe dans Azure DevOps ou GitLab) name: ansible-ci on: [pull_request] jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: pip install ansible-core ansible-lint - run: ansible-galaxy install -r collections/requirements.yml - run: ansible-lint --profile production molecule: needs: lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: pip install ansible-core molecule molecule-plugins[docker] - run: molecule test Pièges classiques SymptômeCauseParade« couldn't resolve module » dans AWXCollection absente de l'EEcollections/requirements.yml dans le projet ou EE personnaliséÉchec Kerberos uniquement dans AWXkrb5.conf / bibliothèques absents de l'EELes ajouter à l'EE, tester avec ansible-navigatorL'exécution utilise un vieux playbookProjet non synchronisé« Mettre à jour à l'exécution » ou webhook GitSecret visible dans la sortieVariable affichée par debug ou erreurno_log: true, identifiants AWX plutôt que variablesInventaire dynamique incompletFiltres ou droits du compte cloudVérifier la source et ses filtres, synchroniser manuellement 🔷 En contexte Citrix\nWorkflow type : Terraform crée la VM maître → AWX lance le rôle d'image (ANS-03) → approbation → Terraform met à jour le catalogue MCS (TF-04). Une seule action pour un nouveau mois de patchs.\nLibre-service pour le support : redémarrer un VDA bloqué, vider un profil, mettre un serveur en maintenance, sans droits d'administration directs.\nÀ retenir AWX = amont communautaire ; AAP = produit Red Hat avec Hub, EDA et support.Modèle de tâche = projet + inventaire + identifiants + environnement d'exécution.ansible-builder construit l'EE, ansible-navigator l'utilise en local.Surveys + RBAC = libre-service sans exposer les secrets.CI : ansible-lint puis Molecule à chaque PR ; AWX exécute après fusion. Auto-évaluation Q1. Quelle différence entre AWX et Ansible Automation Platform ?→ AWX est le projet communautaire non supporté ; AAP est le produit Red Hat supporté, qui ajoute Automation Hub privé, Event-Driven Ansible, automation mesh et collections certifiées.\nQ2. Un playbook marche en local mais échoue dans AWX sur un module manquant. Pourquoi ?→ La collection n'est pas dans l'environnement d'exécution : l'ajouter via requirements.yml du projet ou construire un EE avec ansible-builder.\nQ3. Comment permettre au support de lancer une action sans connaître le mot de passe du compte de service ?→ Créer un identifiant AWX attaché au modèle de tâche et donner au support le seul droit d'exécution sur ce modèle.\nQ4. Quels contrôles placer dans la CI d'un dépôt de rôles ?→ ansible-lint (profil production), puis Molecule (exécution, idempotence, vérifications) à chaque pull request.\nPour aller plus loin AWX (GitHub)Red Hat Ansible Automation Platformansible-builderansible-navigatorCollection awx.awx ","permalink":"https://melior.guru/fiches/ans-04/","summary":"Fiche d\u0026rsquo;apprentissage AWX / Ansible Automation Platform : objets (organisation, projet, inventaire, identifiants, environnement d\u0026rsquo;exécution, modèle de tâche, workflow), ansible-builder et ansible-navigator, déclenchement par API, pipeline CI/CD avec ansible-lint et Molecule.","title":"Ansible — AWX / Ansible Automation Platform et CI/CD"},{"content":"ℹ️ À savoir · En bref\nTerraform (HashiCorp) est un outil d'Infrastructure as Code déclaratif : on décrit en HCL l'infrastructure voulue (VM, réseaux, groupes Entra, catalogues Citrix…), Terraform compare avec l'existant puis appelle les API pour combler l'écart.\nIl mémorise ce qu'il gère dans un fichier d'état (*state*). Sans state, pas de Terraform : c'est la pièce à protéger.\nLicence BSL depuis la v1.6 (2023) ; OpenTofu est le fork open source compatible (commande tofu).\nObjectifs de la fiche Maîtriser le cycle init → plan → apply et savoir lire un plan.Comprendre providers, ressources, data sources, variables et outputs.Savoir pourquoi et comment stocker le state à distance.Structurer du code réutilisable (modules, for_each) et éviter les erreurs courantes. Le vocabulaire en 1 tableau Bloc / termeRôleExempleproviderPlugin qui traduit le HCL en appels API d'une plateforme.hashicorp/azurermresourceUn objet géré (créé / modifié / détruit) par Terraform.azurerm_resource_groupdataLecture d'un objet existant non géré par ce code.data.azurerm_subnetvariableParamètre d'entrée, typé et validable.var.envlocalsValeurs calculées internes (évite la répétition).local.tagsoutputValeur exposée après apply (ou à un module parent).ID d'un réseaumoduleDossier de .tf réutilisable, appelé avec des variables.module \"vnet\"stateCorrespondance code ↔ objets réels (IDs, attributs).terraform.tfstatebackendOù est stocké le state (+ verrouillage).Blob Azure, S3, HCP Le workflow Écrire → init → plan → apply ; le state fait le lien entre code et réalité ÉtapeCe qui se passeBon réflexeterraform initTélécharge providers et modules, configure le backend, crée .terraform.lock.hcl.À relancer après tout changement de provider/backend.terraform fmt / validateFormatage canonique ; contrôle syntaxique et de cohérence.Dans un hook pre-commit ou la CI.terraform planRafraîchit l'état réel, calcule les différences, n'écrit rien.-out=tfplan pour figer ce qui sera appliqué.terraform applyExécute le plan (graphe parallélisé), met à jour le state.apply tfplan = exactement le plan relu.terraform destroyDétruit tout ce que gère cette configuration.Réservé au lab ; prevent_destroy en prod. Lire un plan sans se tromper SymboleActionRisque+create : nouvelle ressourceFaible~update in-place : modification sans recréationFaible à moyen-/+replace : destruction puis recréation (« forces replacement »)ÉLEVÉ : perte de données / d'IP / de VM-destroy : suppressionÉLEVÉ\u0026lt;=read : lecture d'une data source pendant l'applyAucun ⚠️ Piège\nLe plan affiche en bas Plan: 2 to add, 1 to change, 1 to destroy. Lis toujours la ligne « to destroy » et cherche # forces replacement : un simple renommage de ressource peut déclencher la recréation d'une VM.\nArchitecture Le cœur Terraform construit un graphe ; chaque provider parle à son API ; le state est partagé via un backend Un exemple complet commenté versions.tf / providers.tf\nterraform { required_version = \u0026#34;\u0026gt;= 1.6\u0026#34; required_providers { azurerm = { source = \u0026#34;hashicorp/azurerm\u0026#34; version = \u0026#34;~\u0026gt; 4.0\u0026#34; # accepte 4.x, refuse 5.0 } } backend \u0026#34;azurerm\u0026#34; { # state distant + verrou (lease) resource_group_name = \u0026#34;rg-tfstate\u0026#34; storage_account_name = \u0026#34;sttfstatecontoso\u0026#34; container_name = \u0026#34;tfstate\u0026#34; key = \u0026#34;lab-citrix.tfstate\u0026#34; } } provider \u0026#34;azurerm\u0026#34; { features {} subscription_id = var.subscription_id # obligatoire en v4 } main.tf\nlocals { tags = { owner = \u0026#34;alice\u0026#34;, managed_by = \u0026#34;terraform\u0026#34;, env = var.env } } resource \u0026#34;azurerm_resource_group\u0026#34; \u0026#34;citrix\u0026#34; { name = \u0026#34;rg-${var.env}-citrix\u0026#34; location = var.location tags = local.tags } resource \u0026#34;azurerm_virtual_network\u0026#34; \u0026#34;vnet\u0026#34; { name = \u0026#34;vnet-${var.env}-citrix\u0026#34; address_space = [\u0026#34;10.20.0.0/16\u0026#34;] location = azurerm_resource_group.citrix.location # référence resource_group_name = azurerm_resource_group.citrix.name # = dépendance implicite } resource \u0026#34;azurerm_subnet\u0026#34; \u0026#34;snet\u0026#34; { for_each = { vda = \u0026#34;10.20.1.0/24\u0026#34;, infra = \u0026#34;10.20.2.0/24\u0026#34; } name = \u0026#34;snet-${each.key}\u0026#34; resource_group_name = azurerm_resource_group.citrix.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = [each.value] } variables.tf / outputs.tf\nvariable \u0026#34;env\u0026#34; { type = string description = \u0026#34;Environnement cible\u0026#34; validation { condition = contains([\u0026#34;dev\u0026#34;, \u0026#34;prd\u0026#34;], var.env) error_message = \u0026#34;env doit valoir dev ou prd.\u0026#34; } } variable \u0026#34;location\u0026#34; { type = string default = \u0026#34;francecentral\u0026#34; } variable \u0026#34;subscription_id\u0026#34; { type = string } output \u0026#34;subnet_ids\u0026#34; { value = { for k, s in azurerm_subnet.snet : k =\u0026gt; s.id } } ℹ️ À savoir · Comment Terraform ordonne le travail\nDépendances implicites : dès qu'une ressource référence l'attribut d'une autre (azurerm_resource_group.citrix.name), Terraform sait qu'il doit créer la seconde d'abord. depends_on n'est utile que pour une dépendance invisible dans le code.\nLes valeurs des variables viennent d'un fichier *.tfvars, de -var, ou de variables d'environnement TF_VAR_nom.\nLe state : la pièce critique Il contient les IDs réels et tous les attributs, secrets compris, en clair → à protéger comme un coffre.Stocké à distance (Blob Azure, S3, HCP Terraform) pour être partagé, versionné et verrouillé : deux apply simultanés sont refusés.Jamais dans Git, jamais modifié à la main. On le manipule avec les commandes terraform state ….Drift : une modification faite dans le portail hors Terraform apparaît au prochain plan, qui proposera de la défaire. BesoinSolutionReprendre sous Terraform une ressource créée à la mainBloc import \u0026#123; to = … id = … } puis plan (ou terraform import)Renommer une ressource sans la recréerBloc moved \u0026#123; from = … to = … }Ne plus gérer une ressource sans la détruireBloc removed \u0026#123; from = … } ou terraform state rmLister / inspecter ce qui est géréterraform state list, terraform state show \u0026lt;adresse\u0026gt; Méta-arguments à connaître Méta-argumentUsageRemarquecountN copies identiquesIndexé 0..N : supprimer un élément décale les suivantsfor_eachUne instance par clé d'une map / d'un setPréféré : clés stables, pas de recréation en cascadedepends_onForcer un ordre invisible dans le codeÀ utiliser avec parcimonielifecycleprevent_destroy, ignore_changes, create_before_destroyProtège la prod, tolère des champs gérés ailleursproviderChoisir un alias de provider (autre souscription / région)provider = azurerm.hub Modules Un module est simplement un dossier de fichiers .tf. On l'appelle depuis la racine en lui passant des variables, et on récupère ses outputs :\nappel d'un module\nmodule \u0026#34;vnet_citrix\u0026#34; { source = \u0026#34;./modules/vnet\u0026#34; # ou registre : \u0026#34;Azure/avm-res-network-virtualnetwork/azurerm\u0026#34; env = var.env cidr = \u0026#34;10.20.0.0/16\u0026#34; } # ailleurs, dans une ressource : utilisation d\u0026#39;un output du module # subnet_id = module.vnet_citrix.subnet_ids[\u0026#34;vda\u0026#34;] Terraform ou Ansible ? CritèreTerraformAnsibleRôle principalProvisionner l'infrastructure (cycle de vie des objets)Configurer l'intérieur des machinesApprocheDéclaratif, graphe calculéDéclaratif par module, exécution séquentielleMémoireState : sait ce qu'il a créé, peut détruirePas d'état : vérifie à chaque passageLangageHCLYAML + Jinja2Destruction propreNative (destroy)À écrire soi-même (state: absent) Ils sont complémentaires : Terraform crée VM, réseaux et objets Citrix, puis Ansible configure les OS (voir ANS-01).\nCommandes essentielles CommandeÀ quoi ça sertterraform init -upgradeInitialiser / mettre à jour les providers dans les contraintesterraform fmt -recursiveFormater tout le projetterraform validateVérifier la configurationterraform plan -out=tfplanCalculer et enregistrer le planterraform apply tfplanAppliquer exactement le plan enregistréterraform plan -destroyPrévisualiser une destructionterraform output -jsonLire les sorties (scripts, CI)terraform state list / showInspecter le stateterraform consoleTester une expression HCL en interactifterraform providers lock -platform=windows_amd64 -platform=linux_amd64Figer les empreintes multi-OS dans le lock file Pièges classiques SymptômeCauseParade« Error acquiring the state lock »Un autre apply tourne, ou un run a plantéAttendre ; sinon terraform force-unlock \u0026lt;ID\u0026gt; en connaissance de causeRessources recréées après suppression d'un élément de listecount : les index se décalentfor_each sur une mapLe plan veut annuler un changement fait dans le portailDriftReporter le changement dans le code, ou ignore_changesComportement différent sur un autre posteVersion de provider non figéeContrainte ~\u0026gt; + commiter .terraform.lock.hclSecret exposéState local ou commité, outputs non marquésBackend chiffré + RBAC ; sensitive = true« Cycle » dans le grapheDeux ressources se référencent mutuellementSéparer en ressource d'association / revoir le découpage 🔷 En contexte Citrix\nLe provider officiel citrix/citrix pilote Citrix DaaS et CVAD on-premises récents : zones, connexions d'hébergement (citrix_azure_hypervisor, vSphere…), catalogues MCS (citrix_machine_catalog) et groupes de mise à disposition (citrix_delivery_group).\nChaîne type : Terraform crée réseau + VM « master » → Ansible prépare l'image → Terraform crée le catalogue MCS à partir du snapshot et le delivery group.\nBénéfice : un environnement de recette reconstruit à l'identique, et chaque changement de prod passe par un plan relu.\nÀ retenir On décrit l'état voulu ; plan montre l'écart, apply le comble.Le state est la mémoire de Terraform : distant, verrouillé, chiffré, jamais dans Git.Toujours lire « to destroy » et « forces replacement » avant d'appliquer.for_each plutôt que count ; versions de providers figées + lock file commité.Terraform provisionne, Ansible configure. Auto-évaluation Q1. Que fait terraform plan exactement ?→ Il rafraîchit l'état réel via les API, le compare au code et au state, puis affiche les actions nécessaires — sans rien modifier.\nQ2. Pourquoi stocker le state dans un backend distant ?→ Pour le partager entre personnes / CI, le verrouiller pendant un apply, le versionner et le protéger (il contient des secrets).\nQ3. Tu as 3 VM créées avec count = 3 et tu supprimes la 1re de la liste. Que se passe-t-il ?→ Les index se décalent : Terraform veut modifier/recréer les VM suivantes. Avec for_each sur des clés stables, seule la VM retirée serait détruite.\nQ4. Comment renommer azurerm_subnet.a en azurerm_subnet.vda sans recréer le sous-réseau ?→ Avec un bloc moved \u0026#123; from = azurerm_subnet.a to = azurerm_subnet.vda }.\nPour aller plus loin Documentation Terraform (HashiCorp)Tutoriels « Get Started » AzureRegistre : provider azurermRegistre : provider CitrixOpenTofu ","permalink":"https://melior.guru/fiches/tf-01/","summary":"Fiche d\u0026rsquo;apprentissage Terraform : workflow init/plan/apply, providers, ressources, variables, state et backend, modules, for_each, commandes et pièges.","title":"Terraform — Les fondamentaux : HCL, providers, plan/apply, state"},{"content":"ℹ️ À savoir · En bref\nUn module est un dossier de fichiers .tf réutilisable : on lui passe des variables, il expose des outputs. Le dossier où l'on lance terraform plan est le module racine.\nBien découpé et versionné, un module permet de déployer la même brique (réseau, connexion Citrix, catalogue) en dev, recette et prod sans copier-coller, avec des states séparés.\nObjectifs de la fiche Écrire un module propre : interface claire, validation, outputs utiles.Versionner et appeler un module (local, Git, registre), y compris en for_each.Refactoriser vers des modules sans recréer les ressources.Choisir une organisation multi-environnements et ses backends. Composer des modules Le module racine passe des variables aux modules enfants et relie leurs outputs structure d'un module\nmodules/citrix_catalog/ ├── main.tf # ressources ├── variables.tf # interface d\u0026#39;entrée (types, validation, description) ├── outputs.tf # ce que le module expose ├── versions.tf # required_providers (sans bloc provider) └── README.md interface du module\n# modules/citrix_catalog/variables.tf variable \u0026#34;name\u0026#34; { type = string } variable \u0026#34;machine_count\u0026#34; { type = number default = 2 validation { condition = var.machine_count \u0026gt;= 1 \u0026amp;\u0026amp; var.machine_count \u0026lt;= 50 error_message = \u0026#34;machine_count doit être entre 1 et 50.\u0026#34; } } variable \u0026#34;allowed_groups\u0026#34; { type = list(string) description = \u0026#34;Groupes AD autorisés sur le bureau\u0026#34; } # modules/citrix_catalog/outputs.tf output \u0026#34;catalog_id\u0026#34; { value = citrix_machine_catalog.this.id } output \u0026#34;delivery_group_id\u0026#34; { value = citrix_delivery_group.this.id } 💡 Astuce\nUn module ne déclare pas de bloc provider : il hérite de ceux du module racine (ou les reçoit via providers = \u0026#123; … }). Il déclare seulement ses required_providers.\nNommer la ressource principale this quand le module n'en crée qu'une : citrix_machine_catalog.this.\nAppeler et versionner envs/prd/main.tf\nmodule \u0026#34;network\u0026#34; { source = \u0026#34;git::https://git.contoso.com/iac/modules.git//network?ref=v1.3.0\u0026#34; env = var.env cidr = \u0026#34;10.20.0.0/16\u0026#34; } module \u0026#34;catalogs\u0026#34; { source = \u0026#34;../../modules/citrix_catalog\u0026#34; # local pendant le développement for_each = var.catalogs # un catalogue par entrée de la map name = each.key machine_count = each.value.count allowed_groups = each.value.groups pool_id = module.network.pool_id # output d\u0026#39;un autre module } # var.catalogs = { \u0026#34;CAT-W2025-MS\u0026#34; = { count = 4, groups = [\u0026#34;CORP\\\\GG-Bureau\u0026#34;] } } SourceSyntaxeVersionLocal./modules/x ou ../../modules/xCelle du dépôt courantGitgit::https://…/repo.git//chemin?ref=v1.3.0Tag ou commit dans refRegistre public / privéAzure/avm-res-network-virtualnetwork/azurermArgument version = \"~\u0026gt; 0.4\"HCP Terraformapp.terraform.io/\u0026lt;org\u0026gt;/\u0026lt;nom\u0026gt;/\u0026lt;provider\u0026gt;Argument version ⚠️ Piège\nAprès avoir changé la source ou la version d'un module, relance terraform init -upgrade. Et ne pointe jamais la prod sur une branche (ref=main) : un commit de collègue changerait ton prochain plan.\nRefactoriser sans tout recréer Déplacer des ressources existantes dans un module change leur adresse dans le state. Sans précaution, Terraform veut détruire puis recréer. Le bloc moved indique simplement le nouveau chemin :\nrefactoring\nmoved { from = citrix_machine_catalog.w2025_ms to = module.catalogs[\u0026#34;CAT-W2025-MS\u0026#34;].citrix_machine_catalog.this } Le plan doit alors afficher « has moved to » et 0 to destroy. Une fois appliqué partout, le bloc moved peut rester comme trace historique.\nPlusieurs environnements Recommandé : un dossier et un backend par environnement, des modules partagés et versionnés ApprochePrincipeAvantages / limitesDossiers par environnementenvs/dev, envs/prd : chacun son backend, ses .tfvars, ses versions de modulesIsolation forte, prod peut rester sur une version plus ancienne ; un peu de duplicationWorkspaces CLIMême code, plusieurs states : terraform workspace new rec, terraform.workspace dans le codeSimple pour des copies identiques ; même backend et mêmes droits pour tous, risque d'appliquer sur le mauvais workspaceBackend partielterraform init -backend-config=prd.backend.hclUn seul code, backend choisi à l'init ; demande de la rigueur en CITerragrunt / HCP TerraformOutils dédiés à l'orchestration multi-environnementsPuissants ; une couche de plus à apprendre workspaces CLI\nterraform workspace list # * default terraform workspace new rec # crée et sélectionne terraform workspace select prd terraform plan -var-file=prd.tfvars # dans le code locals { machine_count = terraform.workspace == \u0026#34;prd\u0026#34; ? 8 : 2 } ⚠️ Piège\nLes workspaces CLI partagent le même backend et les mêmes identifiants : ce n'est pas une barrière de sécurité entre dev et prod. Pour la prod, préfère un dossier et un backend dédiés, avec des droits séparés. À ne pas confondre avec les *workspaces* de HCP Terraform, qui sont des espaces de travail complets.\nPièges classiques SymptômeCauseParade« Module not installed »terraform init non relancé après ajout de moduleterraform init (ou -upgrade)Le plan détruit tout après refactoringAdresses changées sans bloc movedAjouter moved (ou terraform state mv)Module difficile à réutiliserValeurs codées en dur, trop de responsabilitésUne brique = un module ; tout ce qui varie en variableChangement en prod non vouluProd pointée sur ref=mainTags sémantiques, montée de version explicite par environnementApply sur le mauvais environnementWorkspace courant oubliéDossiers séparés, ou afficher terraform workspace show dans la CI 🔷 En contexte Citrix\nModules naturels pour Citrix : network (VNet, sous-réseaux), citrix_hosting (connexion + pool), citrix_catalog (catalogue + groupe de mise à disposition, voir TF-04).\nEn for_each sur une map de catalogues, ajouter un catalogue de recette ou de production devient une ligne dans un .tfvars.\nLa recette peut tester la version v1.4.0 du module pendant que la production reste en v1.3.0.\nÀ retenir Module = dossier réutilisable : variables en entrée, outputs en sortie, pas de bloc provider.Versionner les modules (tags Git, registre) et figer la version par environnement.for_each sur un module pour déployer N fois la même brique.moved pour refactoriser sans recréer.Prod : dossier et backend dédiés ; workspaces CLI pour des copies jetables. Auto-évaluation Q1. Pourquoi un module enfant ne doit-il pas contenir de bloc provider ?→ Il hérite des providers du module racine ; déclarer un bloc provider dans le module empêche notamment de l'utiliser avec for_each/count et de lui passer un autre provider.\nQ2. Tu ranges un catalogue existant dans un module. Comment éviter sa recréation ?→ Ajouter un bloc moved de l'ancienne adresse vers la nouvelle, puis vérifier « 0 to destroy » dans le plan.\nQ3. Pourquoi les workspaces CLI ne suffisent-ils pas à isoler la production ?→ Ils partagent backend et identifiants : n'importe qui pouvant appliquer en dev peut sélectionner prd par erreur.\nQ4. Comment épingler un module Git sur une version ?→ Avec ?ref=v1.3.0 (tag) dans la source, puis terraform init -upgrade lors d'une montée de version.\nPour aller plus loin Modules (documentation Terraform)Sources de modulesRefactoring avec movedWorkspaces CLIAzure Verified Modules ","permalink":"https://melior.guru/fiches/tf-02/","summary":"Fiche d\u0026rsquo;apprentissage Terraform : écrire et versionner des modules (entrées, sorties, validation), les composer, les appeler en for_each, refactoriser avec moved, puis gérer plusieurs environnements (dossiers et backends séparés vs workspaces CLI).","title":"Terraform — Modules, workspaces et environnements"},{"content":"ℹ️ À savoir · En bref\nEn équipe, personne ne lance terraform apply depuis son poste : un pipeline exécute le plan à chaque pull request, publie le résultat, et n'applique qu'après relecture et approbation, avec une identité dédiée sans secret stocké (OIDC).\nLe state contient les identifiants des ressources et parfois des secrets : il se protège comme un coffre (accès Entra ID, versioning, verrou, réseau privé).\nObjectifs de la fiche Construire un pipeline plan → relecture → approbation → apply.Authentifier le pipeline sur Azure sans secret (fédération OIDC).Écrire des tests avec terraform test et ajouter linters et scanners.Sécuriser le state et détecter la dérive. Le pipeline type Contrôles automatiques, plan relu, approbation sur l'environnement protégé, puis apply du plan exact ÉtapeOutilÉchoue si…Formatterraform fmt -check -recursiveUn fichier n'est pas au format canoniqueValidationterraform init -backend=false + terraform validateErreur de syntaxe ou de référenceLinttflint (avec le plugin azurerm)Taille de VM inconnue, variable inutilisée, mauvaise pratiqueSécuritétrivy config . ou checkov -d .Stockage public, NSG ouvert sur Internet, chiffrement absentTeststerraform testUne assertion échouePlanterraform plan -out=tfplanErreur d'API ; le résumé est publié dans la PRApplyterraform apply tfplanLe plan enregistré n'est plus valide (state modifié entre-temps) ℹ️ À savoir\ntfsec a été fusionné dans Trivy : pour un nouveau pipeline, utilise trivy config. Checkov reste une alternative courante.\nAuthentification sans secret (OIDC) Plutôt qu'un secret de principal de service qui expire et fuit, on crée une identité managée (ou une app Entra) avec une fédération d'identité de confiance pour le dépôt et l'environnement. Le pipeline reçoit un jeton à courte durée de vie.\npipeline (exemple GitHub Actions)\n# .github/workflows/terraform.yml (extrait) permissions: id-token: write # obligatoire pour obtenir le jeton OIDC contents: read env: ARM_USE_OIDC: \u0026#34;true\u0026#34; ARM_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }} # identifiants publics, pas de secret ARM_TENANT_ID: ${{ vars.AZURE_TENANT_ID }} ARM_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} jobs: plan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: hashicorp/setup-terraform@v3 - run: terraform init - run: terraform plan -out=tfplan -input=false - uses: actions/upload-artifact@v4 with: { name: tfplan, path: tfplan } apply: needs: plan environment: production # règle de protection : approbateurs requis runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: hashicorp/setup-terraform@v3 - uses: actions/download-artifact@v4 with: { name: tfplan } - run: terraform init - run: terraform apply -input=false tfplan 💡 Astuce\nAzure DevOps propose la même chose avec une connexion de service par fédération d'identité de charge de travail (workload identity federation). Pour le backend azurerm, ajoute use_oidc = true et use_azuread_auth = true.\nTester avec terraform test Depuis Terraform 1.6, les fichiers *.tftest.hcl décrivent des scénarios : chaque bloc run fait un plan ou un apply (sur des ressources temporaires détruites ensuite) et vérifie des assert.\ntest natif\n# tests/catalog.tftest.hcl variables { name = \u0026#34;CAT-TEST\u0026#34; machine_count = 2 } run \u0026#34;nommage_et_taille\u0026#34; { command = plan # aucun objet créé assert { condition = citrix_machine_catalog.this.name == \u0026#34;CAT-TEST\u0026#34; error_message = \u0026#34;Le catalogue ne porte pas le nom attendu.\u0026#34; } } run \u0026#34;refuse_trop_de_machines\u0026#34; { command = plan variables { machine_count = 500 } expect_failures = [var.machine_count] # la validation doit rejeter } ℹ️ À savoir\nDepuis la 1.7, mock_provider permet de tester sans appeler les vraies API, ce qui est pratique pour des providers comme Citrix ou Azure en CI.\nSécuriser le state Accès par identité Entra, versioning, verrou par bail, réseau restreint backend.tf\nterraform { backend \u0026#34;azurerm\u0026#34; { resource_group_name = \u0026#34;rg-tfstate\u0026#34; storage_account_name = \u0026#34;sttfstatecontoso\u0026#34; container_name = \u0026#34;tfstate\u0026#34; key = \u0026#34;prd/citrix.tfstate\u0026#34; use_azuread_auth = true # accès par RBAC, pas par clé de compte use_oidc = true } } Un state par environnement (TF-02) et des droits distincts : le pipeline de recette ne peut pas écrire le state de production.Sur le compte de stockage : versioning des blobs et suppression réversible (retour à un state précédent), clés d'accès partagé désactivées, accès réseau privé.Le verrou est automatique (bail du blob) : en cas de pipeline interrompu, terraform force-unlock \u0026lt;ID\u0026gt; seulement après vérification.Secrets : sensitive = true masque l'affichage mais pas le state ; préfère les références Key Vault, et les valeurs ephemeral (Terraform ≥ 1.10) qui ne sont jamais écrites dans le state. Détecter la dérive job planifié (chaque nuit)\nterraform plan -detailed-exitcode -input=false # code 0 : rien à changer # code 1 : erreur # code 2 : différences → modification manuelle détectée, alerter l\u0026#39;équipe Pièges classiques SymptômeCauseParade« Saved plan is stale »Le state a changé entre le plan et l'applyRefaire le plan ; sérialiser les exécutions par environnementLe pipeline n'obtient pas de jeton OIDCid-token: write absent ou sujet de fédération incorrectVérifier permissions et le sujet (repo, branche ou environnement)Apply sans relecturePas de règle de protection sur l'environnementApprobateurs requis, branche protégéeSecret visible dans le stateMot de passe passé en variable classiqueKey Vault, ephemeral, compte de service Citrix (TF-04)Tests lents et coûteuxcommand = apply systématiqueplan par défaut, apply ciblé, mock_provider 🔷 En contexte Citrix\nLe provider Citrix accepte ses identifiants par variables d'environnement CITRIX_* : stocke le secret du client API Citrix Cloud dans les secrets de l'environnement protégé, jamais dans le dépôt.\nUne mise à jour d'image (TF-04) devient une pull request « snapshot de novembre » : plan relu, approbation, apply dans la fenêtre de maintenance.\nÀ retenir Pipeline : fmt, validate, tflint, scan, test → plan relu → approbation → apply du plan exact.OIDC : identité fédérée, aucun secret Azure stocké.terraform test (1.6+) avec plan par défaut ; mock_provider (1.7+).State : RBAC Entra, versioning, clés désactivées, un state par environnement.Dérive : plan planifié avec -detailed-exitcode (2 = différences). Auto-évaluation Q1. Pourquoi appliquer un fichier tfplan plutôt que relancer terraform apply ?→ On applique exactement ce qui a été relu et approuvé ; si l'état a changé entre-temps, Terraform refuse le plan au lieu d'appliquer autre chose.\nQ2. Qu'apporte OIDC par rapport à un secret de principal de service ?→ Pas de secret à stocker ni à renouveler : le pipeline reçoit un jeton à courte durée, valable seulement pour le dépôt et l'environnement autorisés.\nQ3. sensitive = true suffit-il à protéger un mot de passe ?→ Non : il masque l'affichage mais la valeur reste dans le state. Utiliser Key Vault, des valeurs ephemeral et un backend chiffré à accès restreint.\nQ4. Que signifie le code retour 2 de terraform plan -detailed-exitcode ?→ Le plan a trouvé des différences : quelqu'un ou quelque chose a modifié l'infrastructure hors Terraform (ou le code n'est pas appliqué).\nPour aller plus loin Tests Terraform (terraform test)Backend azurermProvider azurerm : authentification OIDCTFLintTrivy (scan IaC) ","permalink":"https://melior.guru/fiches/tf-03/","summary":"Fiche d\u0026rsquo;apprentissage Terraform : pipeline CI/CD (fmt, validate, tflint, scan de sécurité, terraform test, plan relu, approbation, apply), authentification OIDC sans secret, tests natifs, sécurisation du state Azure (RBAC, versioning, verrou), détection de dérive.","title":"Terraform — CI/CD, tests et sécurité du state"},{"content":"ℹ️ À savoir · En bref\nLe provider officiel citrix/citrix pilote un site Citrix DaaS ou CVAD on-premises (2311 et plus, avec Web Studio) comme du code : connexions d'hébergement, pools de ressources, catalogues MCS, groupes de mise à disposition, applications, stratégies…\nBénéfices : un environnement reproductible (recette = production), chaque changement passe par un plan relu, et la mise à jour d'image devient une simple modification de variable.\nObjectifs de la fiche Configurer le provider pour Citrix Cloud ou un DDC on-premises.Comprendre la chaîne d'objets : zone → connexion → pool → catalogue → groupe de mise à disposition.Écrire un catalogue MCS et un groupe de mise à disposition, puis mettre à jour l'image.Reprendre un site existant sous Terraform sans tout recréer. Le modèle d\u0026rsquo;objets Chaque objet Studio a sa ressource Terraform ; les références créent l'ordre de création Objet StudioRessource TerraformZone / emplacement de ressourcescitrix_zoneConnexion d'hébergementcitrix_azure_hypervisor, citrix_vsphere_hypervisor, citrix_xenserver_hypervisor, citrix_nutanix_hypervisor…Ressources (réseau, stockage)citrix_azure_hypervisor_resource_pool (et équivalents par hyperviseur)Catalogue de machinescitrix_machine_catalog (MCS, PVSStreaming ou Manual, Remote PC)Groupe de mise à dispositioncitrix_delivery_groupCompte de service (jonction AD / Entra)citrix_service_account Configurer le provider providers.tf\nterraform { required_providers { citrix = { source = \u0026#34;citrix/citrix\u0026#34; version = \u0026#34;\u0026gt;= 1.0\u0026#34; # fige la version testée dans ton projet } } } # Citrix Cloud (DaaS) : client API sécurisé créé dans Citrix Cloud provider \u0026#34;citrix\u0026#34; { cvad_config = { customer_id = var.customer_id # ou variable d\u0026#39;env. CITRIX_CUSTOMER_ID client_id = var.client_id # ou CITRIX_CLIENT_ID client_secret = var.client_secret # ou CITRIX_CLIENT_SECRET } } # CVAD on-premises (≥ 2311, Web Studio installé) # provider \u0026#34;citrix\u0026#34; { # cvad_config = { # hostname = \u0026#34;ddc01.corp.local\u0026#34; # ou CITRIX_HOSTNAME # client_id = \u0026#34;CORP\\\\svc-terraform\u0026#34; # compte admin Citrix # client_secret = var.ddc_password # } # } ⚠️ Piège\nNe mets jamais le client_secret dans un fichier commité : passe-le par les variables d'environnement CITRIX_* ou un coffre (Key Vault, variable secrète de pipeline). Et souviens-toi qu'il peut finir dans le state : backend chiffré obligatoire (voir TF-01).\nConnexion d\u0026rsquo;hébergement et pool de ressources (Azure) hosting.tf\nresource \u0026#34;citrix_azure_hypervisor\u0026#34; \u0026#34;azure\u0026#34; { name = \u0026#34;Azure-FranceCentral\u0026#34; zone = var.zone_id active_directory_id = var.azure_tenant_id subscription_id = var.azure_subscription_id authentication_mode = \u0026#34;SystemAssignedManagedIdentity\u0026#34; # pas de secret à gérer proxy_hypervisor_traffic_through_connector = true } resource \u0026#34;citrix_azure_hypervisor_resource_pool\u0026#34; \u0026#34;vda\u0026#34; { name = \u0026#34;RP-VDA-FranceCentral\u0026#34; hypervisor = citrix_azure_hypervisor.azure.id region = \u0026#34;France Central\u0026#34; virtual_network_resource_group = \u0026#34;rg-prd-network\u0026#34; virtual_network = \u0026#34;vnet-prd-citrix\u0026#34; subnets = [\u0026#34;snet-vda\u0026#34;] } Le catalogue MCS catalog.tf\nresource \u0026#34;citrix_machine_catalog\u0026#34; \u0026#34;w2025_ms\u0026#34; { name = \u0026#34;CAT-W2025-MS\u0026#34; description = \u0026#34;Windows Server 2025 multi-session\u0026#34; zone = var.zone_id allocation_type = \u0026#34;Random\u0026#34; # obligatoire en MultiSession session_support = \u0026#34;MultiSession\u0026#34; provisioning_type = \u0026#34;MCS\u0026#34; provisioning_scheme = { hypervisor = citrix_azure_hypervisor.azure.id hypervisor_resource_pool = citrix_azure_hypervisor_resource_pool.vda.id identity_type = \u0026#34;ActiveDirectory\u0026#34; # ou AzureAD, HybridAzureAD machine_domain_identity = { domain = \u0026#34;corp.local\u0026#34; domain_ou = \u0026#34;OU=VDA,OU=Citrix,DC=corp,DC=local\u0026#34; service_account_id = citrix_service_account.ad_join.id # évite le mot de passe en clair } azure_machine_config = { service_offering = \u0026#34;Standard_D8s_v5\u0026#34; storage_type = \u0026#34;Premium_LRS\u0026#34; use_managed_disks = true license_type = \u0026#34;Windows_Server\u0026#34; azure_master_image = { resource_group = \u0026#34;rg-prd-images\u0026#34; master_image = var.master_snapshot # la variable qu\u0026#39;on fait évoluer } } number_of_total_machines = 4 machine_account_creation_rules = { naming_scheme = \u0026#34;VDA-MS-##\u0026#34; naming_scheme_type = \u0026#34;Numeric\u0026#34; } } } AttributÀ retenirallocation_type / session_supportRandom + MultiSession pour du partagé ; Static + SingleSession pour des bureaux attribuésidentity_typeActiveDirectory, AzureAD (exige network_mapping et machine_profile) ou HybridAzureADnumber_of_total_machinesAugmenter = ajouter des VM ; diminuer = suppression (sans session active, statiques non attribuées)enroll_in_intuneInscription Intune des VDA, uniquement avec identity_type = \"AzureAD\" (voir M365-INT-01)delete_virtual_machines / delete_machine_accountsComportement au destroy : effectif seulement après un apply qui l'a enregistré Le groupe de mise à disposition delivery_group.tf\nresource \u0026#34;citrix_delivery_group\u0026#34; \u0026#34;bureaux\u0026#34; { name = \u0026#34;DG-W2025-Bureaux\u0026#34; associated_machine_catalogs = [{ machine_catalog = citrix_machine_catalog.w2025_ms.id machine_count = 4 }] desktops = [{ published_name = \u0026#34;Bureau Windows\u0026#34; # le renommer recrée le bureau ! enabled = true restricted_access_users = { allow_list = [\u0026#34;CORP\\\\GG-Citrix-Bureau\u0026#34;] } }] autoscale_settings = { autoscale_enabled = true timezone = \u0026#34;Romance Standard Time\u0026#34; peak_buffer_size_percent = 10 power_time_schemes = [{ display_name = \u0026#34;Semaine\u0026#34; days_of_week = [\u0026#34;Monday\u0026#34;, \u0026#34;Tuesday\u0026#34;, \u0026#34;Wednesday\u0026#34;, \u0026#34;Thursday\u0026#34;, \u0026#34;Friday\u0026#34;] peak_time_ranges = [\u0026#34;08:00-18:00\u0026#34;] pool_using_percentage = false pool_size_schedules = [{ time_range = \u0026#34;07:30-18:30\u0026#34;, pool_size = 2 }] }] } reboot_schedules = [{ name = \u0026#34;Reboot hebdo\u0026#34; reboot_schedule_enabled = true frequency = \u0026#34;Weekly\u0026#34; frequency_factor = 1 days_in_week = [\u0026#34;Sunday\u0026#34;] start_date = \u0026#34;2026-11-01\u0026#34; start_time = \u0026#34;03:00\u0026#34; ignore_maintenance_mode = true natural_reboot_schedule = false reboot_duration_minutes = 60 }] } ⚠️ Piège\nrestricted_access_users omis = tous les utilisateurs authentifiés ont accès ; défini à \u0026#123;} = personne n'a accès.\nChanger published_name d'un bureau le recrée : les sessions déconnectées sur l'ancien bureau ne pourront pas être reprises. Fais-le hors des heures de production.\nMettre à jour l\u0026rsquo;image La mise à jour d'image devient une modification de variable relue dans un plan Préparer la nouvelle image (Ansible, Packer ou à la main), prendre un snapshot.Changer master_snapshot dans le .tfvars, puis plan : on doit voir ~ update in-place sur le catalogue, jamais -/+ replace.image_update_reboot_options (dans azure_machine_config) règle le redémarrage : reboot_duration = -1 pour appliquer au prochain arrêt, sinon cycle de redémarrage avec message d'avertissement.Retour arrière = remettre l'ancien nom de snapshot et ré-appliquer. ⚠️ Piège\napply_updates_to_existing_machines = true synchronise et redémarre toutes les VM allumées à chaque mise à jour du catalogue, sessions comprises. À activer pour un apply ponctuel, puis à remettre à false.\nReprendre un site existant BesoinSolutionGénérer le code d'un site existantScript onboarding helper du dépôt GitHub du provider (scripts/onboarding-helper), filtrable par type et par nomImporter un objet précisterraform import citrix_delivery_group.bureaux \u0026lt;GUID\u0026gt; ou bloc import \u0026#123; } (Terraform ≥ 1.5)Retrouver les GUIDScript object-ids-helper du même dépôt, ou les traces réseau de Web StudioVérifier l'importterraform plan doit afficher No changes avant toute modification Pièges classiques SymptômeCauseParadeLe plan veut recréer le catalogueChangement d'un attribut non modifiable (identité, type, lettre du cache…)Lire forces replacement ; créer un nouveau catalogue et basculer le groupeSuppression de VM impossibleSessions actives ou VM statiques attribuéesMode maintenance, vider les sessions, désattribuerCatalogue en échec à la créationCompte de service sans droits sur l'OU, quotas Azure, image non généraliséeVérifier l'OU, les quotas de la souscription et le journal MCS dans StudioDivergence entre Studio et le codeModification manuelle dans Web StudioTout changement passe par Terraform ; le plan révèle la dériveErreur d'authentificationClient API expiré ou mauvais customer_idRecréer le client sécurisé dans Citrix Cloud, vérifier les variables CITRIX_* 🔷 En contexte Citrix\nChaîne complète : Terraform (azurerm) crée réseau et VM maître → Ansible prépare l'image (ANS-01) → Terraform (citrix) crée catalogue et groupe de mise à disposition.\nCommence par une recette : un catalogue de 1 ou 2 VM et un groupe restreint à ton compte, pour valider l'image et l'autoscale avant la production.\nPour les VDA Linux (Ubuntu), le même citrix_machine_catalog s'applique ; seule l'image maître diffère.\nÀ retenir citrix/citrix couvre DaaS et CVAD on-prem ≥ 2311 (avec Web Studio).Zone → connexion → pool → catalogue → groupe : les références ordonnent la création.Secrets en variables d'environnement, jonction AD via citrix_service_account.Mise à jour d'image = changer une variable ; vérifier update in-place dans le plan.Site existant : onboarding helper + import, puis plan sans changement. Auto-évaluation Q1. Quelle version minimale de CVAD on-premises le provider supporte-t-il ?→ 2311, avec Web Studio installé et configuré.\nQ2. Que se passe-t-il si restricted_access_users = \u0026#123;} sur un groupe de mise à disposition ?→ Plus personne n'a accès : listes d'autorisation et de blocage vides. Omis, l'attribut laisse l'accès à tous les utilisateurs authentifiés.\nQ3. Comment déployer une nouvelle image sur un catalogue MCS avec Terraform ?→ Changer la variable de snapshot (master_image), vérifier que le plan propose une mise à jour en place, appliquer, et régler le redémarrage avec image_update_reboot_options.\nQ4. Pourquoi éviter de laisser apply_updates_to_existing_machines = true ?→ Chaque mise à jour du catalogue redémarrerait toutes les VM allumées, sessions comprises.\nPour aller plus loin Registre : provider citrix/citrixRessource citrix_machine_catalogRessource citrix_delivery_groupDépôt GitHub (exemples, onboarding helper)Documentation Citrix du provider ","permalink":"https://melior.guru/fiches/tf-04/","summary":"Fiche d\u0026rsquo;apprentissage Terraform et Citrix : provider citrix/citrix (DaaS et CVAD ≥ 2311), authentification, connexion d\u0026rsquo;hébergement Azure, pool de ressources, catalogue MCS, groupe de mise à disposition, mise à jour d\u0026rsquo;image, import de l\u0026rsquo;existant, pièges.","title":"Terraform — Provider Citrix : catalogues MCS et groupes de mise à disposition"},{"content":"ℹ️ À savoir · En bref\nMicrosoft Entra ID (ex-Azure AD, renommé en 2023) est le service d'identité et d'accès cloud de Microsoft. C'est l'annuaire de tout tenant Microsoft 365 / Azure : il authentifie les utilisateurs, décide qui accède à quoi (MFA, accès conditionnel) et fournit le SSO vers des milliers d'applications.\nCe n'est pas « un AD dans le cloud » : pas de LDAP, pas de Kerberos/NTLM natif, pas d'OU ni de GPO. Il parle OAuth 2.0 / OpenID Connect / SAML et s'administre via Microsoft Graph.\nObjectifs de la fiche Situer Entra ID par rapport à l'Active Directory on-premises.Comprendre les objets (utilisateurs, groupes, appareils, applications) et les licences.Choisir entre Connect Sync / Cloud Sync et PHS / PTA / fédération.Construire une stratégie d'accès conditionnel sans se verrouiller dehors. AD DS vs Entra ID SujetActive Directory (AD DS)Microsoft Entra IDPortéeRéseau d'entreprise, contrôleurs de domaineInternet, service SaaS mondialProtocolesKerberos, NTLM, LDAPOAuth 2.0, OIDC, SAML, SCIMStructureForêt, domaines, OU (hiérarchique)Tenant plat ; unités administratives pour déléguerPolitiqueGPOAccès conditionnel + Intune (appareils)AppareilsJonction au domaineEntra joined / hybrid joined / registeredAdministrationADUC, PowerShell ADPortail entra.microsoft.com, Microsoft Graph 💡 Astuce\nBesoin de LDAP / Kerberos pour une appli « legacy » dans Azure sans contrôleur de domaine ? C'est un autre service : Microsoft Entra Domain Services (domaine managé). Il ne remplace pas votre AD.\nLes objets du tenant ObjetCe qu'il faut savoirTenantInstance dédiée d'Entra ID, avec un domaine initial xxx.onmicrosoft.com + vos domaines vérifiés.UtilisateurMembre (cloud ou synchronisé depuis l'AD) ou invité B2B (compte externe invité).GroupeSécurité (accès, licences, stratégies) ou Microsoft 365 (boîte, Teams, SharePoint). Appartenance assignée ou dynamique (règle sur attributs, licence P1).AppareilIdentité de la machine, utilisée par l'accès conditionnel et Intune (voir § 5).ApplicationApp registration + enterprise app / service principal (voir § 7).RôleRôles d'administration intégrés (RBAC) : Global Administrator, User Administrator, Conditional Access Administrator… Identité hybride : relier l\u0026rsquo;AD au cloud L'AD reste la source ; un moteur de synchronisation alimente le tenant, qui protège toutes les applications Quel moteur de synchronisation ? Entra Connect SyncEntra Cloud SyncArchitectureServeur Windows dédié + base SQL localeAgents légers ; configuration pilotée depuis le cloudHaute dispoUn serveur actif + serveur(s) en « staging »Plusieurs agents actifsForêts AD déconnectéesComplexeNatif (un agent par forêt)Couverture fonctionnelleLa plus complète (scénarios avancés, write-back d'appareils…)En rattrapage ; vérifier la matrice de comparaisonRecommandation MicrosoftSi besoin d'une fonction absente de Cloud SyncChoix par défaut pour les nouveaux déploiements Quelle méthode d\u0026rsquo;authentification ? MéthodePrincipePoints forts / limitesPHS — Password Hash SyncUn hash dérivé du hash AD est synchronisé ; Entra valide le mot de passe lui-même.✔ Le plus simple et résilient (fonctionne si l'AD est hors ligne) ; active la détection d'identifiants fuités. Recommandé.PTA — Pass-through AuthDes agents on-prem valident le mot de passe contre l'AD en temps réel.Les politiques AD (horaires, compte désactivé) s'appliquent immédiatement ; dépend des agents et de l'AD.FédérationEntra redirige vers un IdP (AD FS, tiers) qui authentifie.Exigences spécifiques (carte à puce tierce…) ; le plus complexe à exploiter. Tendance : migrer vers PHS. ⚠️ Piège\nDomaine AD en .local : il n'est pas vérifiable dans Entra. Ajoute un suffixe UPN routable (ex. @contoso.com) aux utilisateurs avant la synchronisation, sinon ils arrivent en @xxx.onmicrosoft.com.\nLes états d\u0026rsquo;un appareil ÉtatPour quoiConnexion Windows avecEntra registeredAppareils personnels (BYOD), mobilesCompte local / perso ; compte pro ajoutéEntra joinedPostes cloud-first, Windows AutopilotCompte Entra IDHybrid joinedParc existant joint à l'AD, en transitionCompte AD (objet présent dans les deux) L\u0026rsquo;accès conditionnel (Conditional Access) C'est le moteur de décision Zero Trust d'Entra : « si telles conditions, alors telle exigence ». Il est évalué après la saisie des identifiants, à chaque obtention de jeton.\nSignaux → décision → application ; toutes les stratégies applicables se cumulent Socle de stratégies recommandé #StratégieCibleContrôle1MFA pour les administrateursRôles d'adminForce d'authentification résistante au phishing2MFA pour tousTous les utilisateurs, toutes les appsExiger MFA3Bloquer l'authentification héritéeClients « autres » (POP, IMAP, SMTP auth…)Bloquer4Appareil conforme pour les apps sensiblesex. Citrix Workspace, portails adminConforme Intune ou hybrid joined5Risque élevé (P2)Risque de connexion / utilisateurMFA, changement de mot de passe sécurisé ⚠️ Piège\nNe jamais se verrouiller dehors : crée 2 comptes « break-glass » (cloud-only, mot de passe long + FIDO2, surveillés) exclus de toutes les stratégies.\nDémarre chaque stratégie en mode « Rapport uniquement », contrôle l'impact dans les journaux de connexion et l'outil What If, puis active.\n💡 Astuce\nPas de licence P1 ? Les paramètres de sécurité par défaut (security defaults) imposent un MFA de base gratuitement. Ils sont incompatibles avec l'accès conditionnel : on désactive l'un pour passer à l'autre.\nApplications : registration vs enterprise app L'App registration est le modèle global ; l'enterprise app (service principal) est son instance dans chaque tenant App registration : là où le développeur déclare l'appli (client ID, redirect URI, secrets/certificats, permissions Graph demandées).Enterprise app : là où l'admin gère l'usage dans son tenant (consentement, affectation des utilisateurs, SSO SAML, accès conditionnel, journaux).Permissions déléguées (l'appli agit au nom d'un utilisateur) vs application (l'appli agit seule, consentement admin requis).Les identités managées (managed identities) évitent tout secret pour les ressources Azure. Licences et fonctions clés ÉditionApporte (principalement)Incluse dansFreeAnnuaire, SSO, synchronisation, security defaultsTout abonnement Microsoft cloudP1Accès conditionnel, groupes dynamiques, SSPR avec write-back vers l'AD, proxy d'applicationMicrosoft 365 E3, Business Premium, EMS E3P2P1 + Identity Protection (risque), PIM, revues d'accèsMicrosoft 365 E5, EMS E5 PIM (Privileged Identity Management) : les rôles d'admin deviennent éligibles plutôt que permanents ; on les active juste-à-temps, pour une durée limitée, avec MFA, justification et éventuellement approbation.\nAdministrer en PowerShell (Microsoft Graph) ℹ️ À savoir\nLes modules MSOnline et AzureAD sont retirés : tout passe par le SDK Microsoft.Graph (ou az / API REST).\nCommandeÀ quoi ça sertInstall-Module Microsoft.Graph -Scope CurrentUserInstaller le SDKConnect-MgGraph -Scopes \"User.Read.All\",\"Group.Read.All\"Se connecter en demandant des permissionsGet-MgUser -Filter \"startsWith(displayName,'Jul')\"Rechercher des utilisateursGet-MgGroupMember -GroupId \u0026lt;id\u0026gt; -AllLister les membres d'un groupeGet-MgDevice -AllInventorier les appareilsGet-MgIdentityConditionalAccessPolicyExporter les stratégies d'accès conditionnelGet-MgAuditLogSignIn -Top 20Dernières connexions (scope AuditLog.Read.All) 🔷 En contexte Citrix\nCitrix Cloud peut utiliser Entra ID comme fournisseur d'identité pour Workspace : l'accès conditionnel et le MFA Entra s'appliquent alors à l'ouverture de session Workspace.\nConséquence clé : l'utilisateur n'a plus de mot de passe AD transmis au VDA. Pour un SSO jusqu'au VDA joint à l'AD, il faut FAS (Federated Authentication Service).\nLes VDA MCS/Azure peuvent être hybrid joined ou Entra joined ; l'état de jonction conditionne les stratégies « appareil conforme / hybride ».\nLes règles d'auth conditionnelle Citrix Cloud basées sur des groupes dépendent des groupes que voit l'IdP : vérifier leur portée (sécurité, synchronisés, imbrication).\nÀ retenir Entra ID = identité cloud (OAuth/OIDC/SAML), pas un AD hébergé.Hybride : Cloud Sync par défaut, Connect Sync si fonction manquante ; PHS recommandé.Accès conditionnel = si conditions alors exigences ; « Bloquer » gagne toujours.2 comptes break-glass exclus + mode rapport avant toute activation.App registration = modèle ; enterprise app = instance gérée dans le tenant. Auto-évaluation Q1. Pourquoi PHS est-il recommandé même quand on utilise PTA ou la fédération ?→ Il sert de secours si l'on-prem tombe et active la détection d'identifiants fuités (Identity Protection).\nQ2. Deux stratégies s'appliquent : l'une exige le MFA, l'autre bloque. Résultat ?→ Accès bloqué : les stratégies se cumulent et « Bloquer » l'emporte toujours.\nQ3. Quelle licence pour activer PIM et les stratégies basées sur le risque ?→ Entra ID P2 (inclus dans Microsoft 365 E5).\nQ4. Un utilisateur s'authentifie sur Workspace via Entra ID et doit ouvrir un VDA joint à l'AD sans ressaisir son mot de passe. Que faut-il ?→ Citrix FAS, qui émet un certificat à la volée pour l'ouverture de session Windows.\nPour aller plus loin Documentation Microsoft Entra IDChoisir sa méthode d'authentification hybrideCloud Sync vs Connect SyncAccès conditionnel — vue d'ensembleComptes d'accès d'urgence (break-glass)SDK PowerShell Microsoft Graph ","permalink":"https://melior.guru/fiches/m365-ent-01/","summary":"Fiche d\u0026rsquo;apprentissage Microsoft Entra ID : différences avec AD DS, objets, identité hybride (Connect Sync, Cloud Sync, PHS/PTA/fédération), appareils, accès conditionnel, applications, licences, rôles et PIM.","title":"Microsoft Entra ID — Les fondamentaux : identités, hybride, accès conditionnel"},{"content":"ℹ️ À savoir · En bref\nL'accès conditionnel devient vite une accumulation de stratégies difficiles à lire. La méthode qui tient dans le temps : des personas (administrateurs, internes, invités, comptes de service), un nommage strict, et des stratégies testées en rapport uniquement.\nPIM supprime les droits d'administration permanents : on est éligible, on active le rôle quand on en a besoin, pour une durée limitée et tracée.\nObjectifs de la fiche Concevoir un jeu de stratégies lisible par personas.Utiliser forces d'authentification et contrôles de session.Tester et déployer sans se verrouiller dehors.Mettre en place PIM pour les rôles et les groupes. Concevoir par personas Chaque persona reçoit ses stratégies ; toutes les stratégies applicables se cumulent NomCibleContrôleCA001-Admins-AllApps-PhishingResistantRôles d'administrationForce d'authentification « MFA résistante au phishing »CA002-Internals-AllApps-MFATous les utilisateurs internesMFA (sauf emplacement ou appareil de confiance, selon ta politique)CA003-AllUsers-LegacyAuth-BlockTous, clients d'authentification héritésBloquerCA004-Internals-Citrix-CompliantApplication Citrix Workspace / CloudAppareil conforme ou joint hybride, sinon MFACA005-Guests-AllApps-MFAInvités et utilisateurs externesMFA, durée de session courteCA006-AllUsers-HighRisk-BlockRisque utilisateur élevé (P2)Changement de mot de passe sécurisé ou blocageCA007-AllUsers-DeviceCode-BlockFlux d'authentification « code d'appareil »Bloquer (sauf exceptions nommées) 💡 Astuce\nNommage : numéro – persona – applications – contrôle. On lit la stratégie sans l'ouvrir.\nExclusions par groupe uniquement (jamais d'utilisateurs directs) et un groupe d'exclusion par stratégie, revu régulièrement.\nLes contrôles qui comptent ContrôleCe qu'il apporteForce d'authentificationExige un type de méthode précis : MFA, sans mot de passe, résistante au phishing (FIDO2 / clés d'accès, Windows Hello Entreprise, certificat)Appareil conforme / joint hybrideL'accès dépend de l'état de l'appareil évalué par Intune (M365-INT-01)Fréquence de connexionRedemande l'authentification après un délai (utile pour les admins et les postes partagés)Évaluation continue de l'accès (CAE)Révocation quasi immédiate si le compte est désactivé, le mot de passe changé ou le réseau modifiéProtection des jetonsLie le jeton de session à l'appareil : un jeton volé ne marche pas ailleurs (périmètre d'applications et de plateformes limité)Emplacements nommésPlages IP ou pays ; à utiliser comme condition, pas comme seule protection ℹ️ À savoir\nMicrosoft déploie aussi des stratégies gérées par Microsoft (d'abord en rapport uniquement) et impose le MFA pour l'accès aux portails d'administration Azure et Microsoft. Vérifie-les dans la liste des stratégies avant d'en créer des doublons.\nTester et déployer 1. Créer la stratégie en Rapport uniquement.2. Vérifier l'impact dans les journaux de connexion (onglet « Accès conditionnel » / « Rapport uniquement ») et le classeur Insights et rapports.3. Simuler un cas précis avec l'outil What If (utilisateur, application, appareil, emplacement).4. Activer sur un groupe pilote, puis élargir.5. Garder deux comptes break-glass exclus de tout, surveillés par une alerte à chaque connexion. PowerShell\n# Lister les stratégies et leur état (module Microsoft.Graph) Connect-MgGraph -Scopes \u0026#34;Policy.Read.All\u0026#34; Get-MgIdentityConditionalAccessPolicy | Select-Object DisplayName, State | Sort-Object DisplayName # State : enabled, disabled, enabledForReportingButNotEnforced (= rapport uniquement) PIM : l\u0026rsquo;administration juste-à-temps Éligible → activation (MFA, justification, approbation) → actif pour une durée limitée → expiration NotionDéfinitionAffectation éligibleL'utilisateur peut activer le rôle, mais ne l'a pas en permanenceAffectation activeDroit immédiat ; à réserver aux comptes break-glass et aux comptes de service justifiésParamètres du rôleDurée maximale d'activation, MFA ou force d'authentification, justification, n° de ticket, approbation, notificationsPIM for GroupsAppartenance juste-à-temps à un groupe de sécurité : utile pour des droits hors Entra (applications, Azure, Citrix Cloud via SSO par groupe)Rôles AzureMême logique pour les rôles RBAC sur abonnements et groupes de ressourcesRevues d'accèsFaire valider régulièrement qui garde ses éligibilités ⚠️ Piège\nUne force d'authentification exigée à l'activation du rôle et une stratégie CA ciblant le rôle ne voient pas la même chose : la stratégie CA « admins » ne s'applique qu'une fois le rôle actif. Exige donc aussi une authentification forte à l'activation : paramètre du rôle PIM, ou mieux un contexte d'authentification couplé à une stratégie CA résistante au phishing.\nNe transforme pas l'activation en formalité : durée courte (1 à 4 h), approbation pour Administrateur général et Administrateur des rôles privilégiés.\nLicences FonctionLicenceAccès conditionnel, forces d'authentificationEntra ID P1 (Microsoft 365 E3, Business Premium)Risque utilisateur et de connexionEntra ID P2 (Microsoft 365 E5)PIM (rôles Entra, Azure, groupes)Entra ID P2 ou Entra ID GovernanceRevues d'accès avancées, workflows de cycle de vieEntra ID Governance 🔷 En contexte Citrix\nCitrix Cloud accepte Entra ID comme fournisseur d'identité : tes stratégies CA s'appliquent à l'accès administrateur Citrix Cloud et, selon la configuration, à Workspace.\nAssocie un groupe PIM for Groups aux droits d'administration Citrix Cloud : les admins Citrix activent leurs droits juste-à-temps, avec traçabilité.\nÀ retenir Personas + nommage + exclusions par groupe.Admins : force d'authentification résistante au phishing.Rapport uniquement → What If → pilote → production ; deux break-glass.PIM : éligible par défaut, activation courte avec MFA, approbation sur les rôles critiques.P1 pour l'accès conditionnel, P2 / Governance pour risque et PIM. Auto-évaluation Q1. Quelle est la différence entre « MFA » et une force d'authentification « résistante au phishing » ?→ Le MFA accepte des méthodes interceptables (SMS, notification approuvée par erreur) ; la force résistante au phishing n'accepte que FIDO2 / clés d'accès, Windows Hello Entreprise ou certificat.\nQ2. Comment vérifier l'effet d'une nouvelle stratégie avant de l'activer ?→ La créer en rapport uniquement, analyser les journaux de connexion et les classeurs, simuler avec What If.\nQ3. Pourquoi exiger le MFA dans les paramètres du rôle PIM en plus de l'accès conditionnel ?→ Parce que la stratégie CA ciblant le rôle ne s'applique qu'une fois le rôle actif ; l'exigence PIM protège l'activation elle-même.\nQ4. À quoi sert PIM for Groups ?→ À rendre l'appartenance à un groupe temporaire et activable, donc à appliquer le juste-à-temps à tout ce qui s'appuie sur ce groupe.\nPour aller plus loin Accès conditionnel : planificationForces d'authentificationProtection des jetonsPrivileged Identity ManagementLicences Entra ID Governance ","permalink":"https://melior.guru/fiches/m365-ent-02/","summary":"Fiche d\u0026rsquo;apprentissage Entra ID avancée : concevoir un jeu de stratégies d\u0026rsquo;accès conditionnel par personas, forces d\u0026rsquo;authentification, contrôles de session (CAE, protection des jetons), test et déploiement (rapport uniquement, What If), PIM (rôles éligibles, activation, approbation, PIM for Groups, revues d\u0026rsquo;accès) et licences.","title":"Microsoft Entra ID — Accès conditionnel avancé et PIM"},{"content":"ℹ️ À savoir · En bref\nMicrosoft Intune est le service cloud de gestion des appareils et des applications de Microsoft 365. Il remplace progressivement GPO et ConfigMgr : il configure les postes, déploie les applications, pilote les mises à jour et déclare chaque appareil conforme ou non.\nCe statut de conformité est envoyé à Entra ID, où l'accès conditionnel l'utilise pour autoriser ou bloquer l'accès (voir M365-ENT-01). Console : intune.microsoft.com.\nObjectifs de la fiche Distinguer MDM et MAM, et choisir une méthode d'inscription.Comprendre les grands types de stratégies et leur affectation (groupes, filtres).Déployer une application Win32 et piloter les mises à jour Windows.Relier conformité et accès conditionnel, et savoir où regarder en cas de problème. Le vocabulaire en 1 tableau TermeCe que c'estExempleMDMGestion de l'appareil entier (inscription, paramètres, effacement).Poste Windows d'entrepriseMAMProtection des données dans les applis, sans gérer l'appareil.Outlook sur un téléphone persoInscriptionRattachement de l'appareil à Intune (enrollment).Autopilot, GPO, Portail d'entrepriseProfil de configurationEnsemble de paramètres poussés sur l'appareil.Catalogue de paramètres, modèlesStratégie de conformitéRègles qui rendent l'appareil conforme ou non.BitLocker actif, OS minimumApplication Win32Installeur classique empaqueté en .intunewin.Citrix Workspace appFiltreAffine une affectation selon les propriétés de l'appareil.(device.model -contains \"t540\")Co-managementPartage des charges de travail entre ConfigMgr et Intune.Parc SCCM existantIMEIntune Management Extension : agent qui gère Win32 et scripts.Service sur le poste Le cycle de vie d\u0026rsquo;un appareil Inscription → gestion → conformité → accès conditionnel Choisir la méthode d\u0026rsquo;inscription MéthodePour quoiRésultatWindows AutopilotPoste neuf livré directement à l'utilisateur ; reset d'un poste existantEntra joined (ou hybride via connecteur), profil OOBE personnaliséGPO d'inscription automatiqueParc existant joint à l'AD et synchroniséHybrid joined + inscrit dans IntuneCo-management (ConfigMgr)Organisations déjà sous SCCMBascule progressive des charges vers IntunePortail d'entreprise / compte proBYOD, mobiles iOS / AndroidInscription utilisateur ou MAM seulInscription en bloc (package)Kiosques, salles, appareils partagésSans utilisateur affecté ⚠️ Piège\nL'inscription automatique exige une licence Intune pour l'utilisateur et que l'étendue MDM (Entra ID › Mobilité) inclue son groupe. Sans cela, la jonction réussit mais l'appareil n'apparaît jamais dans Intune.\nLes types de stratégies TypeÀ quoi ça sertBon réflexeProfils de configurationParamètres Windows, navigateurs, Office, Wi-Fi, VPN, certificatsPréférer le catalogue de paramètres aux modèles anciensSécurité du point de terminaisonBitLocker, Defender antivirus, pare-feu, ASR, LAPSUn profil par domaine, pas de doublon avec les profils de configConformitéSeuils exigés : chiffrement, OS, antivirus, mot de passeAjouter un délai de grâce et une action « marquer non conforme »Mises à jour WindowsAnneaux de mise à jour, mises à jour de fonctionnalité, pilotesAnneaux pilote → large ; ou Windows AutopatchScripts \u0026amp; RemediationsPowerShell ponctuel, ou détection + correction planifiéesRemediations : licence Windows Enterprise E3/E5 requiseProtection d'application (MAM)Chiffrer, bloquer copier-coller, PIN dans les applisIndispensable pour le BYOD 💡 Astuce\nEn cas de conflit entre deux profils sur le même paramètre, Intune ne choisit pas : le paramètre passe en conflit et n'est pas appliqué. Vérifie l'état par paramètre dans le rapport du profil.\nAffectations : groupes, exclusions et filtres Une stratégie cible des groupes ; l'exclusion l'emporte ; le filtre affine au niveau de l'appareil Cibler des groupes d'appareils pour ce qui concerne la machine (configuration, mises à jour), des groupes d'utilisateurs pour ce qui suit la personne (applis, MAM).Les filtres sont évalués à l'enregistrement : rapides, contrairement aux groupes dynamiques qui peuvent mettre du temps à se recalculer.Éviter de mélanger groupes d'utilisateurs et d'appareils entre inclusion et exclusion : le résultat est difficile à prévoir. Déployer une application Win32 étapes clés\n# 1. Empaqueter (outil Microsoft Win32 Content Prep Tool) IntuneWinAppUtil.exe -c C:\\Src\\CWA -s CitrixWorkspaceApp.exe -o C:\\Out # 2. Dans Intune \u0026gt; Applications \u0026gt; Windows \u0026gt; Ajouter \u0026gt; Application Win32 # Installation : CitrixWorkspaceApp.exe /silent /noreboot # Désinstall. : CitrixWorkspaceApp.exe /uninstall /silent # Détection : fichier, clé de registre ou script PowerShell # Exigences : architecture, version d\u0026#39;OS, espace disque ⚠️ Piège\nLa règle de détection est le point qui casse le plus souvent : si elle ne trouve rien après l'installation, Intune considère l'installation en échec et réessaie. Teste-la sur un poste avant de déployer largement.\nDépannage côté poste Commande / emplacementÀ quoi ça sertdsregcmd /statusÉtat de jonction Entra ID (AzureAdJoined, DomainJoined) et PRTParamètres \u0026gt; Comptes \u0026gt; Accès Professionnel \u0026gt; Info \u0026gt; SynchroniserForcer une synchronisation MDMStart-Process \"intunemanagementextension://syncapp\"Forcer la synchronisation de l'IME (applis Win32, scripts)C:\\ProgramData\\Microsoft\\IntuneManagementExtension\\LogsJournaux de l'IME (IntuneManagementExtension.log, AppWorkload.log)mdmdiagnosticstool.exe -area DeviceEnrollment;DeviceProvisioning;Autopilot -cab C:\\Temp\\diag.cabCollecte de diagnostics MDMObservateur d'événements › DeviceManagement-Enterprise-Diagnostics-ProviderErreurs d'application des stratégies MDM ℹ️ À savoir\nCôté console, l'onglet Appareils › [poste] › Configuration de l'appareil montre l'état de chaque profil, et Surveiller › Journaux d'audit qui a changé quoi. En PowerShell : Get-MgDeviceManagementManagedDevice (SDK Microsoft Graph).\nPièges classiques SymptômeCauseParadeAppareil hybride absent d'IntuneGPO d'inscription absente, étendue MDM ou licence manquanteVérifier dsregcmd, l'étendue MDM et la licenceStratégie « en attente » pendant des heuresCycle de synchronisation (~8 h)Synchroniser manuellement, éviter les groupes dynamiques lentsParamètre en conflitDeux profils (ou GPO + Intune) gèrent la même choseUn seul propriétaire par paramètre ; ControlPolicyConflict pour MDM vs GPOUtilisateurs bloqués par l'accès conditionnelAppareil non conforme ou pas encore évaluéDélai de grâce, rapport de conformité, mode rapport avant activationApplication Win32 en échecRègle de détection fausse, exécution en contexte systèmeTester avec PsExec -s, lire AppWorkload.log 🔷 En contexte Citrix\nCitrix Workspace app se déploie très bien en Win32 Intune, et ses paramètres (StoreFront, SSO) via le catalogue de paramètres ou des modèles ADMX importés.\nVDA : Citrix DaaS permet de créer des catalogues MCS joints à Entra ID et inscrits dans Intune ; l'inscription des VM non persistantes jointes hybride est encore en préversion : vérifie la documentation Citrix avant de te lancer.\nAttention aux machines non persistantes : chaque redémarrage peut recréer un objet appareil. Prévoir filtres, nettoyage et stratégies adaptées (pas d'Autopilot sur l'image maître).\nL'accès conditionnel « appareil conforme » protège l'accès à Citrix Workspace depuis les postes physiques gérés par Intune.\nÀ retenir MDM gère l'appareil, MAM protège les données dans les applis.Autopilot pour le neuf, GPO / co-management pour l'existant hybride.Un paramètre = un seul propriétaire, sinon conflit.Groupes d'appareils pour la machine, d'utilisateurs pour la personne ; filtres pour affiner.Conformité Intune + accès conditionnel Entra = le duo Zero Trust. Auto-évaluation Q1. Quelle est la différence entre MDM et MAM ?→ MDM inscrit et gère l'appareil entier ; MAM protège seulement les données d'entreprise dans les applications, sans prendre la main sur l'appareil (typique du BYOD).\nQ2. Un poste hybrid joined n'apparaît pas dans Intune. Que vérifies-tu ?→ La GPO d'inscription automatique, l'étendue MDM dans Entra ID, la licence Intune de l'utilisateur et l'état dsregcmd /status.\nQ3. Deux profils définissent le même paramètre avec des valeurs différentes. Que se passe-t-il ?→ Le paramètre est en conflit et n'est appliqué par aucun des deux ; il faut n'en garder qu'un.\nQ4. Comment un poste non conforme est-il bloqué à l'accès à Outlook ?→ Intune envoie l'état de conformité à Entra ID ; une stratégie d'accès conditionnel « exiger un appareil conforme » bloque alors l'accès.\nPour aller plus loin Documentation Microsoft IntuneMéthodes d'inscription WindowsApplications Win32Filtres d'affectationCitrix DaaS et Microsoft Intune ","permalink":"https://melior.guru/fiches/m365-int-01/","summary":"Fiche d\u0026rsquo;apprentissage Microsoft Intune : MDM et MAM, méthodes d\u0026rsquo;inscription (Autopilot, GPO, BYOD), profils de configuration, applications Win32, mises à jour, conformité et accès conditionnel, affectations et filtres, dépannage.","title":"Microsoft Intune — Les fondamentaux : inscription, stratégies, applications, conformité"},{"content":"ℹ️ À savoir · En bref\nAutopilot prépare un poste neuf sans image : l'utilisateur l'allume, se connecte avec son compte professionnel, et Intune installe configuration et applications. Le support ne touche plus le poste.\nDeux variantes coexistent : Autopilot (classique, très configurable) et Autopilot device preparation (plus simple, sans enregistrement préalable, Windows 11 et Entra join uniquement).\nObjectifs de la fiche Enregistrer des appareils et les cibler avec un group tag.Choisir le mode de déploiement et régler l'ESP.Comprendre Autopilot device preparation et quand l'utiliser.Dépanner un déploiement bloqué en OOBE. Autopilot classique : le parcours De l'enregistrement du poste au bureau prêt enregistrement\n# Enregistrer un poste existant ou de test (en administrateur) Install-Script -Name Get-WindowsAutopilotInfo -Force Get-WindowsAutopilotInfo -Online -GroupTag \u0026#34;CORP-STD\u0026#34; # envoie le hash dans Intune # Ou exporter le hash en CSV pour un import manuel Get-WindowsAutopilotInfo -OutputFile C:\\Temp\\hash.csv règles de groupe\n# Groupe dynamique : tous les appareils Autopilot (device.devicePhysicalIDs -any (_ -startsWith \u0026#34;[ZTDid]\u0026#34;)) # Groupe dynamique : uniquement le group tag CORP-STD (device.devicePhysicalIds -any (_ -eq \u0026#34;[OrderID]:CORP-STD\u0026#34;)) 💡 Astuce\nEn production, demande l'enregistrement par le constructeur ou le revendeur à la commande : les postes arrivent déjà rattachés au tenant. Le script sert aux postes existants et aux tests.\nLes modes de déploiement ModePour quiParticularitésUser-drivenPoste attribué à un utilisateurLe cas standard : l'utilisateur se connecte en OOBEPré-provisionnementPréparer le poste avant livraisonLe technicien (ou le revendeur) lance la phase appareil (5 appuis sur la touche Windows en OOBE), l'utilisateur ne fait que la phase utilisateurSelf-deployingKiosques, salles de réunion, postes partagésAucun utilisateur ; TPM 2.0 avec attestation obligatoire ; Entra join uniquementAppareils existantsMigration depuis ConfigMgrFichier JSON de profil déposé par une séquence de tâches Type de jonctionRecommandationEntra joinedRecommandé pour tout nouveau poste ; l'accès aux ressources AD fonctionne via Kerberos et l'authentification hybrideEntra hybrid joinedPossible avec le connecteur Intune pour Active Directory, mais plus fragile (ligne de vue sur un DC pendant l'OOBE, connecteur à maintenir) : à éviter pour le neuf L\u0026rsquo;Enrollment Status Page (ESP) Affiche la progression et peut bloquer l'utilisation du poste tant que les applications choisies ne sont pas installées.Ne bloque que sur les applications indispensables (VPN, sécurité, agent de gestion), pas sur tout le catalogue.Règle le délai d'expiration (60 min par défaut) et l'autorisation de réinitialiser ou d'utiliser le poste en cas d'échec.Les versions récentes permettent d'installer les mises à jour qualité Windows pendant l'OOBE (avec redémarrage possible). ⚠️ Piège\nMélanger des applications MSI métier (LOB) et Win32 pendant l'ESP provoque des échecs (deux installateurs en parallèle). Package tout en Win32.\nUne stratégie qui redémarre le poste ou change le compte pendant l'ESP (BitLocker mal configuré, renommage, scripts) casse le déploiement : la tester à part.\nAutopilot device preparation Pas d'enregistrement préalable : l'appareil rejoint le groupe au moment de l'inscription CritèreAutopilotDevice preparationEnregistrement préalableOui (hash)Non (identifiants d'entreprise possibles)JonctionEntra ou hybrideEntra uniquementModesUser-driven, pré-provisionnement, self-deploying, existantsUser-driven, automatique (Windows 365)Applications pendant l'OOBEJusqu'à 100 (ESP)Jusqu'à 25 essentielles + 10 scriptsWindowsWindows 10 et 11Windows 11 (24H2, ou 22H2/23H2 avec la mise à jour requise)SuiviRapport de déploiement, peu temps réelRapport quasi temps réel ℹ️ À savoir\nSi un appareil est à la fois enregistré dans Autopilot et visé par device preparation, c'est le profil Autopilot qui s'applique : désenregistre-le pour utiliser device preparation.\nDépanner en OOBE diagnostic\n# En OOBE : Maj + F10 ouvre une invite de commandes mdmdiagnosticstool.exe -area Autopilot;DeviceEnrollment;DeviceProvisioning;TPM -cab C:\\Temp\\autopilot.cab # Profil Autopilot reçu par le poste type C:\\Windows\\ServiceState\\wmansvc\\AutopilotDDSZTDFile.json # Journal des événements Autopilot Get-WinEvent -LogName \u0026#34;Microsoft-Windows-ModernDeployment-Diagnostics-Provider/Autopilot\u0026#34; -MaxEvents 30 SymptômeCause probableParadePas de page de connexion de l'entrepriseProfil non affecté (groupe dynamique pas encore à jour) ou pas de réseauVérifier le groupe et le profil, attendre la mise à jour, redémarrer l'OOBEESP bloquée sur une applicationApplication en échec ou en attente d'un redémarrageRapport de l'appareil dans Intune, journaux IME, réduire les apps bloquantesSelf-deploying en échecTPM sans attestation ou firmware ancienMettre à jour le firmware, vérifier tpmtool getdeviceinformationJonction hybride en échecPas de DC joignable, connecteur absent ou ancienLigne de vue DC (VPN pré-ouverture), connecteur à jour, ou passer en Entra joinedNom du poste incohérentModèle de nom non pris en charge (hybride)Modèle %SERIAL% ou %RAND:x% en Entra joined 🔷 En contexte Citrix\nAutopilot vise les postes physiques : jamais sur une image maître MCS ni sur des VDA non persistants (risque de doublons d'appareils).\nPour un poste qui ouvre surtout une session Citrix, garde l'ESP minimale : Workspace app, agent de sécurité, certificats. Le reste vit dans le bureau virtuel.\nÀ retenir Enregistrement (hash ou revendeur) → group tag → profil → OOBE → ESP.Entra joined pour le neuf ; l'hybride reste fragile.ESP : bloquer seulement sur l'essentiel, tout en Win32.Device preparation : pas de hash, Windows 11, 25 apps, Entra join uniquement.OOBE : Maj + F10, mdmdiagnosticstool, journal ModernDeployment. Auto-évaluation Q1. Quelle règle de groupe dynamique cible les appareils avec le group tag « CORP-STD » ?→ (device.devicePhysicalIds -any (_ -eq \"[OrderID]:CORP-STD\"))\nQ2. Quand choisir le pré-provisionnement ?→ Quand on veut installer la partie appareil (apps, sécurité) avant la livraison, pour que l'utilisateur n'attende que la partie utilisateur.\nQ3. Pourquoi éviter de mélanger MSI métier et Win32 dans l'ESP ?→ Les deux canaux d'installation peuvent entrer en conflit (installateur Windows occupé) et faire échouer le déploiement.\nQ4. Ton appareil devait passer par device preparation mais reçoit le profil Autopilot. Pourquoi ?→ Il est encore enregistré dans Autopilot avec un profil affecté ; le profil Autopilot a priorité. Le désenregistrer.\nPour aller plus loin Windows AutopilotComparer Autopilot et device preparationEnrollment Status PageDépannage Autopilot ","permalink":"https://melior.guru/fiches/m365-int-02/","summary":"Fiche d\u0026rsquo;apprentissage Windows Autopilot : Autopilot classique (enregistrement du hash, group tag, profils, modes user-driven, self-deploying, pré-provisionnement, ESP) et Autopilot device preparation (stratégie, groupe d\u0026rsquo;appareils, 25 applications), choix, dépannage en OOBE et pièges.","title":"Microsoft Intune — Windows Autopilot en pratique"},{"content":"ℹ️ À savoir · En bref\nMicrosoft Defender n'est pas un produit mais une famille : chaque brique protège un domaine (postes, messagerie, identités, applications cloud) et toutes remontent dans Microsoft Defender XDR (portail security.microsoft.com), qui corrèle les alertes en incidents.\nLe cœur côté infrastructure est Defender for Endpoint (MDE) : antivirus, réduction de la surface d'attaque et EDR sur les postes, serveurs et VDA.\nObjectifs de la fiche Situer chaque produit Defender et ce qu'il protège.Comprendre les couches de protection de Defender for Endpoint et les licences P1 / P2.Intégrer des postes, des serveurs et des VDI non persistants.Traiter un incident et faire une première requête d'advanced hunting. La famille Defender Chaque produit envoie ses signaux à Defender XDR, qui les corrèle en incidents ProduitProtègeExemples de détections / fonctionsDefender for EndpointPostes, serveurs, VDA, mobilesRansomware, exécution PowerShell suspecte, isolement d'un posteDefender for Office 365Exchange Online, Teams, SharePointLiens et pièces jointes piégés (Safe Links / Safe Attachments), anti-hameçonnageDefender for IdentityActive Directory on-prem (capteurs sur les DC)Pass-the-hash, Kerberoasting, reconnaissance, DCSyncDefender for Cloud AppsApplications SaaSShadow IT, téléchargement massif, contrôle de sessionEntra ID ProtectionConnexions et comptesMot de passe fuité, connexion depuis IP anonymeDefender for CloudAzure, AWS, GCP (charges cloud)Posture de sécurité, protection des serveurs et conteneurs Defender for Endpoint : les couches de protection De la prévention (haut) à la détection et la réponse (bas) LicenceContenuIncluse dansMDE Plan 1Antivirus nouvelle génération, ASR, contrôle des appareils, gestion centraliséeMicrosoft 365 E3MDE Plan 2P1 + EDR, investigation automatique (AIR), advanced hunting, gestion des vulnérabilités de baseMicrosoft 365 E5, E5 SecurityDefender for BusinessÉquivalent simplifié pour les PME (jusqu'à 300 utilisateurs)Microsoft 365 Business PremiumDefender for ServersMDE pour serveurs, via Defender for CloudAbonnement Azure (Plan 1 / Plan 2) ⚠️ Piège\nL'antivirus Defender peut tourner en mode actif, passif (quand un autre antivirus est présent) ou désactivé. En mode passif, l'EDR fonctionne mais la protection temps réel est assurée par l'autre produit : vérifie AMRunningMode avant de conclure qu'un poste est protégé.\nIntégrer les appareils (onboarding) MéthodeQuand l'utiliserIntunePostes gérés par Intune : profil « Detection and response » de sécurité du point de terminaisonGPOServeurs et postes du domaine, sans IntuneConfiguration ManagerParc sous SCCM / co-managementScript localTest ou quelques machines (limité en nombre)Script VDIVDI non persistant : script dédié lancé au démarrage 🔷 En contexte Citrix\nVDA non persistants (MCS / PVS) : ne pas intégrer l'image maître de façon classique. Microsoft fournit un script d'intégration VDI à placer dans l'image et à lancer au démarrage (GPO de script de démarrage) ; l'option « une seule entrée par appareil » évite un nouvel objet à chaque redémarrage.\nAppliquer les exclusions antivirus recommandées par Citrix (VDA, Profile Management, PVS, WEM) et activer les signatures en cache / mises à jour partagées pour éviter les pics de charge au démarrage.\nDefender for Identity sur les DC aide à repérer les attaques sur les comptes de service Citrix (Kerberoasting, délégation).\nTraiter un incident Un incident regroupe des alertes liées (même appareil, même utilisateur, même chaîne d'attaque) : on travaille l'incident, pas l'alerte isolée.Lire l'histoire de l'attaque (arbre de processus, chronologie), puis les entités touchées : appareils, comptes, fichiers, adresses.Actions de réponse sur un appareil (P2) : isoler, lancer une analyse, collecter un package d'investigation, Live Response, restreindre l'exécution d'applications.Clore avec une classification (vrai / faux positif) : elle améliore les détections et les rapports. Advanced hunting (KQL) Le langage est le KQL, le même que Sentinel et Log Analytics. Les tables principales : DeviceProcessEvents, DeviceNetworkEvents, DeviceLogonEvents, EmailEvents, IdentityLogonEvents.\nrequête KQL\n// PowerShell encodé lancé ces dernières 24 h DeviceProcessEvents | where Timestamp \u0026gt; ago(1d) | where FileName in~ (\u0026#34;powershell.exe\u0026#34;, \u0026#34;pwsh.exe\u0026#34;) | where ProcessCommandLine has_any (\u0026#34;-enc\u0026#34;, \u0026#34;-EncodedCommand\u0026#34;) | project Timestamp, DeviceName, AccountName, ProcessCommandLine | order by Timestamp desc 💡 Astuce\nUne requête utile peut devenir une règle de détection personnalisée : Defender XDR l'exécute à intervalle régulier et crée des alertes automatiquement.\nCommandes essentielles (poste Windows) CommandeÀ quoi ça sertGet-MpComputerStatusÉtat de l'antivirus : AMRunningMode, signatures, protection temps réel, Tamper ProtectionUpdate-MpSignatureForcer la mise à jour des signaturesStart-MpScan -ScanType QuickScanLancer une analyse rapideGet-MpPreference | Select-Object Exclusion*Lister les exclusions configuréesGet-Service SenseService EDR de Defender for EndpointHKLM\\SOFTWARE\\Microsoft\\Windows Advanced Threat Protection\\StatusOnboardingState = 1 si l'appareil est intégré\"%ProgramFiles%\\Windows Defender\\MpCmdRun.exe\" -GetFilesCollecter les journaux pour le support Pièges classiques SymptômeCauseParadeExclusions ignorées ou modifiées en localTamper Protection actif, ou stratégie centrale qui écraseGérer les exclusions depuis Intune / GPO, jamais à la mainAppareil intégré mais « inactif »Pas de connexion aux URL de Defender (proxy, pare-feu)Vérifier la connectivité avec l'analyseur client MDEDoublons d'appareils VDIImage maître intégrée, ou script VDI sans entrée uniqueScript VDI au démarrage, option « une seule entrée »Une règle ASR bloque une appli métierRègle passée directement en blocageMode audit d'abord, exclusion ciblée ensuiteAlertes en double avec un autre antivirusDeux moteurs actifsDefender en passif ou retrait de l'autre produit À retenir Defender = une famille ; XDR corrèle tout en incidents sur security.microsoft.com.MDE P1 = prévention (AV, ASR) ; P2 = EDR, AIR, hunting.Toujours tester les règles ASR en mode audit avant de bloquer.VDI non persistant : script d'intégration VDI au démarrage, jamais l'image maître intégrée.On traite un incident, pas une alerte ; KQL pour chercher au-delà. Auto-évaluation Q1. Quelle est la différence entre une alerte et un incident ?→ Une alerte est une détection unique ; un incident regroupe les alertes liées à une même attaque, sur plusieurs appareils, comptes ou produits.\nQ2. Que t'apporte MDE Plan 2 par rapport au Plan 1 ?→ L'EDR (détection et réponse, isolement, Live Response), l'investigation automatique (AIR) et l'advanced hunting.\nQ3. Comment intégrer des VDA Citrix non persistants dans Defender for Endpoint ?→ Avec le script d'intégration VDI placé dans l'image et exécuté au démarrage (GPO), en option « une seule entrée par appareil », sans intégrer l'image maître elle-même.\nQ4. Comment vérifier rapidement qu'un poste est intégré et protégé ?→ Get-MpComputerStatus (mode, temps réel, signatures), Get-Service Sense, et OnboardingState = 1 dans le registre.\nPour aller plus loin Documentation Microsoft Defender XDRDocumentation Defender for EndpointIntégrer des VDI non persistantsRègles de réduction de la surface d'attaqueAdvanced hunting — vue d'ensemble ","permalink":"https://melior.guru/fiches/m365-def-01/","summary":"Fiche d\u0026rsquo;apprentissage Microsoft Defender : la famille Defender XDR (Endpoint, Office 365, Identity, Cloud Apps), couches de protection de Defender for Endpoint, licences P1/P2, intégration, VDI non persistant, incidents, advanced hunting KQL, commandes et pièges.","title":"Microsoft Defender — Les fondamentaux : Defender XDR et Defender for Endpoint"},{"content":"ℹ️ À savoir · En bref\nL'advanced hunting interroge 30 jours de données brutes de Defender (postes, identités, messagerie, applications cloud) avec KQL, le langage de Sentinel et de Log Analytics.\nUne requête qui trouve quelque chose d'utile peut devenir une règle de détection personnalisée : elle tourne seule et crée des alertes.\nObjectifs de la fiche Connaître les tables principales et comment les relier.Écrire des requêtes KQL lisibles et efficaces.Disposer de requêtes types prêtes à adapter.Transformer une requête en règle de détection. Les tables et leurs clés DeviceId relie les tables Endpoint ; l'UPN relie aux identités ; AlertEvidence relie les alertes aux entités TableContenuColonnes utilesDeviceInfoInventaire des appareils (mis à jour régulièrement)DeviceId, DeviceName, OSPlatform, MachineGroupDeviceProcessEventsCréations de processusFileName, ProcessCommandLine, InitiatingProcessFileName, AccountNameDeviceNetworkEventsConnexions réseauRemoteIP, RemotePort, RemoteUrl, ActionTypeDeviceLogonEventsOuvertures de session sur les appareilsLogonType, AccountName, RemoteIP, ActionTypeDeviceFileEventsCréations, modifications de fichiersFileName, FolderPath, SHA256IdentityLogonEventsAuthentifications AD et Entra (Defender for Identity)AccountUpn, Application, LogonType, FailureReasonEmailEventsMessages reçus et envoyésSenderFromAddress, Subject, ThreatTypes, DeliveryActionAlertInfo / AlertEvidenceAlertes et entités associéesAlertId, Title, Severity, DeviceId, AccountUpn KQL en 10 opérateurs Une requête est un pipeline : on filtre tôt, on réduit les colonnes, on agrège OpérateurRôleExemplewhereFiltrer les ligneswhere Timestamp \u0026gt; ago(7d)projectGarder / renommer des colonnesproject Timestamp, DeviceName, ProcessCommandLineextendAjouter une colonne calculéeextend Heure = hourofday(Timestamp)summarizeAgrégersummarize Nb = count() by DeviceNametop / takeLimiter les résultatstop 20 by Nb descjoinRelier deux tablesjoin kind=inner (DeviceInfo) on DeviceIdhas / containsRecherche de textehas cherche un mot entier (rapide), contains une sous-chaîne (lent)in~ / =~Comparaison insensible à la cassewhere FileName in~ (\"powershell.exe\",\"pwsh.exe\")letVariable ou sous-requêtelet admins = dynamic([\"adm-alice\"]);renderGraphiquerender timechart 💡 Astuce\nFiltre d'abord sur le temps et la table la plus sélective, puis seulement le texte. Préfère has à contains, et == à =~ quand la casse est connue.\nDans le portail, le bouton Afficher le schéma et l'aide à la saisie évitent les fautes de noms de colonnes.\nRequêtes types processus suspects\n// PowerShell lancé avec une commande encodée (souvent malveillant) DeviceProcessEvents | where Timestamp \u0026gt; ago(7d) | where FileName in~ (\u0026#34;powershell.exe\u0026#34;, \u0026#34;pwsh.exe\u0026#34;) | where ProcessCommandLine matches regex @\u0026#34;(?i)\\s-(e|en|enc|encodedcommand)\\s\u0026#34; | project Timestamp, DeviceName, AccountName, ProcessCommandLine, Parent = InitiatingProcessFileName | order by Timestamp desc identités\n// Échecs d\u0026#39;authentification par compte (force brute, mot de passe expiré…) IdentityLogonEvents | where Timestamp \u0026gt; ago(1d) and ActionType == \u0026#34;LogonFailed\u0026#34; | summarize Echecs = count(), Sources = dcount(IPAddress) by AccountUpn, FailureReason | where Echecs \u0026gt; 20 | order by Echecs desc réseau\n// Poste qui contacte un domaine donné, avec l\u0026#39;utilisateur DeviceNetworkEvents | where Timestamp \u0026gt; ago(3d) and RemoteUrl has \u0026#34;exemple-suspect.com\u0026#34; | join kind=inner (DeviceInfo | summarize arg_max(Timestamp, OSPlatform) by DeviceId) on DeviceId | project Timestamp, DeviceName, OSPlatform, InitiatingProcessAccountName, RemoteUrl, RemoteIP contexte Citrix\n// Citrix : processus lancés dans les sessions des VDA (hors système) DeviceProcessEvents | where Timestamp \u0026gt; ago(1d) | where DeviceName startswith \u0026#34;vda-\u0026#34; | where AccountName !in~ (\u0026#34;system\u0026#34;, \u0026#34;local service\u0026#34;, \u0026#34;network service\u0026#34;) | summarize Lancements = count(), Utilisateurs = dcount(AccountName) by FileName | top 25 by Lancements desc Limites à connaître ParamètreValeurProfondeur30 jours pour les données natives Defender XDR (plus avec les tables Sentinel, selon leur rétention)Résultats100 000 lignes et 64 Mo maximum par requêteDurée10 minutes maximum par requêteRessourcesQuota CPU par tenant, recalculé toutes les 15 minutes ; requêtes bloquées si dépassé Des requêtes aux détections Depuis l'éditeur : Créer une règle de détection ; la requête doit renvoyer Timestamp, ReportId et une colonne d'entité (DeviceId, AccountUpn…).Fréquences : en continu (quasi temps réel, pour les requêtes simples), ou toutes les 1, 3, 12 ou 24 h.Actions automatiques possibles : isoler l'appareil, lancer une analyse antivirus, désactiver l'utilisateur, mettre un fichier en quarantaine.Les règles ont leur propre quota : garde-les ciblées et testées sur 30 jours avant activation. ℹ️ À savoir\nSentinel est désormais exploité dans le portail Defender (retrait de Sentinel du portail Azure annoncé pour le 31 mars 2027) : advanced hunting peut interroger dans la même requête les tables Defender et les journaux Sentinel (pare-feu, NetScaler, serveurs…).\nPièges classiques SymptômeCauseParadeRequête trop lente ou bloquéePas de filtre de temps, contains sur de gros volumesFiltre Timestamp en premier, has, colonnes réduitesRésultats tronquésPlus de 100 000 lignesAgréger (summarize) ou affiner les filtresJoin qui exploseTable de droite non dédupliquée (DeviceInfo a plusieurs lignes par appareil)summarize arg_max(Timestamp, *) by DeviceId avant le joinRien trouvé sur un serveurAppareil non intégré ou mauvais nom (FQDN vs nom court)Vérifier DeviceInfo, utiliser startswith ou hasRègle de détection refuséeColonnes obligatoires absentesRenvoyer Timestamp, ReportId et une entité 🔷 En contexte Citrix\nSur des VDA non persistants intégrés sans l'option « une entrée par appareil », un même poste peut apparaître sous plusieurs DeviceId : raisonne par DeviceName ou par groupe d'appareils pour les requêtes Citrix (voir M365-DEF-01).\nCherche les sorties d'environnement : processus inattendus lancés dans les sessions (cmd, PowerShell, outils d'accès distant) sur les VDA publiés.\nÀ retenir Tables Device* reliées par DeviceId ; identités par AccountUpn.Filtrer le temps d'abord ; has plutôt que contains.summarize + by pour agréger, join avec une table dédupliquée.Limites : 30 jours, 100 000 lignes, 10 min, quota CPU.Une bonne requête devient une règle de détection personnalisée. Auto-évaluation Q1. Quelle différence entre has et contains ?→ has cherche un terme entier indexé (rapide) ; contains cherche une sous-chaîne n'importe où (plus lent).\nQ2. Comment compter les échecs de connexion par compte sur 24 h ?→ IdentityLogonEvents | where Timestamp \u0026gt; ago(1d) and ActionType == \"LogonFailed\" | summarize count() by AccountUpn\nQ3. Pourquoi dédupliquer DeviceInfo avant un join ?→ La table contient plusieurs lignes par appareil ; sans arg_max, chaque événement est multiplié.\nQ4. Quelles colonnes une règle de détection personnalisée doit-elle renvoyer ?→ Timestamp, ReportId et au moins une colonne d'entité (DeviceId, AccountUpn…).\nPour aller plus loin Vue d'ensemble advanced huntingSchéma des tablesBonnes pratiques de requêteRègles de détection personnaliséesRéférence KQL ","permalink":"https://melior.guru/fiches/m365-def-02/","summary":"Fiche d\u0026rsquo;apprentissage advanced hunting : tables du schéma Defender XDR et leurs clés, syntaxe KQL essentielle (where, project, extend, summarize, join, has vs contains), requêtes types (processus, PowerShell encodé, connexions, Citrix), limites (30 jours, 100 000 lignes, 10 min), règles de détection personnalisées et lien avec Sentinel.","title":"Microsoft Defender — Advanced hunting et KQL"},{"content":"ℹ️ À savoir · En bref\nWEM remplace les scripts d'ouverture de session et une bonne partie des GPO utilisateur : un agent installé sur le VDA applique, pendant et après l'ouverture de session, des actions (lecteurs, imprimantes, raccourcis, registre…) selon des règles, et optimise les ressources de la machine.\nL'agent garde un cache local : il continue d'appliquer la dernière configuration même si l'infrastructure WEM est injoignable.\nObjectifs de la fiche Comprendre l'architecture du service WEM et le rôle de l'agent.Construire une configuration : actions, affectations, filtres.Régler l'optimisation système et la sécurité des sessions.Dépanner un agent (mode Basic, cache, journaux). Architecture Console et services hébergés par Citrix ; l'agent dialogue avec eux via les Cloud Connectors WEM service (Citrix Cloud)WEM sur siteConsoleConsole web dans Citrix Cloud (Gérer › WEM)Console web et console d'administration historiqueInfrastructureHébergée par Citrix (base Azure SQL)Serveurs d'infrastructure + base SQL Server à toiLien avec l'agentHTTPS via les Cloud Connectors (ou inscription de l'agent)Ports 8286 (agent) et 8285 (synchro du cache)Mises à jourGérées par CitrixÀ planifier (infrastructure, base, agents) L'agent comprend un service machine (Citrix WEM Agent Host Service) et un agent de session lancé à l'ouverture et à la reconnexion. Il fonctionne sur VDA mono et multisession, et sur postes physiques Windows.\nRelier l\u0026rsquo;agent à l\u0026rsquo;infrastructure MéthodeDétailStratégie de groupeImporter les modèles ADMX « Agent Group Policies », puis renseigner Citrix Cloud Connectors (ou « Discover Citrix Cloud Connector from CVAD service »)Ligne de commandeCloud=1 CloudConnectorList=cc1.corp.local,cc2.corp.local à l'installationInscription (enrollment)Installer avec « Skip Configuration » puis inscrire l'agent depuis la consoleEnsemble de configurationDans la console, Objets d'annuaire : lier les machines, OU ou groupes de machines à un ensemble de configuration ⚠️ Piège\nUne installation neuve démarre en mode Basic (déploiement « de base » : optimisations par défaut, aucune connexion à l'infrastructure). Tant que l'agent ne reçoit pas sa configuration de connexion, il y reste.\nSymptôme typique : journal « WEM Agent Service » avec BasicMode: 1. Vérifier que les ADMX WEM sont importés et appliqués sur l'OU des VDA, ou forcer le type avec la stratégie Override Agent Deployment Type.\nConstruire la configuration Une action n'est appliquée que si elle est affectée à l'utilisateur et que le filtre est vrai BriqueRôleExempleActionCe qu'on appliqueLecteur H: vers \\\\fs\\home\\%username%, imprimante, raccourci, valeur de registre, variable d'environnement, fichier INIGroupe d'actionsRegrouper des actions pour les affecter d'un coup« Socle Compta » : 2 lecteurs + 3 raccourcis + 1 imprimanteAffectationLier une action à un utilisateur ou un groupe ADGG-Compta reçoit « Socle Compta »Filtre (règle + conditions)Condition supplémentaire évaluée sur la sessionSeulement si le client est dans le site AD « Lille » ou si le nom du poste commence par TC- 💡 Astuce\nAffecte aux groupes, jamais aux utilisateurs un par un, et garde peu de filtres réutilisables (« Site Lille », « Client léger », « Session multisession »).\nL'assistant de modélisation (Modeling Wizard) et les rapports de l'agent montrent ce qu'un utilisateur recevra : à consulter avant d'accuser WEM.\nOptimisation système RéglageEffetProtection contre les pics CPUBaisse la priorité d'un processus qui dépasse un seuil (ex. 70 % pendant 15 s) pour protéger les autres sessionsOptimisation de la mémoireLibère la mémoire de travail des processus inactifs depuis un certain tempsPriorité d'E/SDonne une priorité d'entrées-sorties par processusDéconnexion rapide (fast logoff)Ferme visuellement la session tout de suite, le nettoyage se fait en arrière-planOptimisation multisessionBaisse la priorité des sessions déconnectées sur les serveurs multisessionCitrix OptimizerApplique des modèles d'optimisation de Windows depuis WEM Sécurité et profils Contrôle des applications : règles d'autorisation par chemin, éditeur ou hachage (basées sur AppLocker), avec un mode audit pour tester.Élévation de privilèges : lancer une application précise en administrateur sans donner de droits d'administration à l'utilisateur.Gestion des processus : listes blanches / noires de processus par utilisateur ou groupe.Profils : WEM sait configurer Citrix Profile Management (voir CTX-02) ; garde une seule source de configuration par paramètre (WEM ou GPO ou stratégie Studio). Dépanner un agent commandes utiles\n# Forcer la récupération de la configuration (sur le VDA, en administrateur) cd \u0026#34;C:\\Program Files (x86)\\Citrix\\Workspace Environment Management Agent\u0026#34; .\\AgentCacheUtility.exe -RefreshCache # recharge le cache depuis l\u0026#39;infrastructure .\\AgentCacheUtility.exe -RefreshSettings # actualise les paramètres de l\u0026#39;agent .\\AgentCacheUtility.exe -Reinitialize # réinitialise complètement le cache # Vérifier le mode et la connexion Get-WinEvent -LogName \u0026#34;WEM Agent Service\u0026#34; -MaxEvents 30 | Where-Object Message -match \u0026#34;BasicMode|CloudAgent|Connector\u0026#34; | Select-Object TimeCreated, Message SymptômeCause probableParadeAgent en mode BasicAucune configuration de connexion reçue (ADMX absent, mauvaise OU)Importer les ADMX WEM, vérifier gpresult, Override Agent Deployment TypeModification de console ignoréeCache de l'agent pas encore actualiséActualiser depuis la console ou AgentCacheUtility -RefreshCacheAction non appliquéePas d'affectation ou filtre fauxModélisation, vérifier groupes et conditionsMachine non visible dans la consoleMachine non liée à un ensemble de configurationObjets d'annuaire : ajouter la machine ou son OUParamètre qui « revient »Même réglage poussé aussi par GPO ou StudioUne seule source de vérité par paramètre 🔷 En contexte Citrix\nSur des VDA MCS non persistants, place le cache de l'agent sur un disque persistant (ou accepte sa reconstruction au démarrage) et laisse l'agent dans l'image maître sans configuration propre à une machine.\nUne modernisation classique : remplacer les scripts d'ouverture de session (lecteurs, imprimantes) par des actions WEM filtrées par site, puis mesurer le gain dans Monitor (CTX-03).\nÀ retenir Agent + cache local ; infrastructure hébergée par Citrix dans le service WEM.Action → affectation (groupe) → filtre : les trois doivent être vrais.Machines liées à un ensemble de configuration via les objets d'annuaire.Installation neuve = mode Basic tant que la connexion n'est pas configurée.Une seule source de configuration par paramètre (WEM, GPO ou Studio). Auto-évaluation Q1. Ton agent affiche BasicMode: 1 alors que les Cloud Connectors sont renseignés dans le registre. Que vérifies-tu ?→ Que les ADMX WEM sont importés et appliqués sur l'OU des VDA (clé de stratégie attendue par l'agent), avec gpresult ; sinon forcer le type avec Override Agent Deployment Type, puis redémarrer le service.\nQ2. Un lecteur réseau ne s'affiche que pour certains utilisateurs du même groupe. Piste ?→ Le filtre de l'affectation : une condition (site AD, nom du client…) est fausse pour eux. Le vérifier avec l'assistant de modélisation.\nQ3. À quoi sert la protection contre les pics CPU ?→ À baisser la priorité d'un processus qui consomme trop longtemps trop de CPU pour préserver les autres sessions d'un serveur multisession.\nQ4. Pourquoi l'agent continue-t-il de fonctionner pendant une panne des Cloud Connectors ?→ Il applique la dernière configuration stockée dans son cache local.\nPour aller plus loin Documentation WEM serviceInstaller et configurer l'agentWEM sur site (current release) ","permalink":"https://melior.guru/fiches/ctx-01/","summary":"Fiche d\u0026rsquo;apprentissage Citrix WEM : service cloud vs sur site, agent et cache local, ensembles de configuration, actions / affectations / filtres, optimisation système (CPU, mémoire, E/S), sécurité (contrôle des applications, élévation de privilèges), configuration de Profile Management, dépannage (mode Basic, cache, journaux).","title":"Citrix WEM — Workspace Environment Management : architecture, actions et optimisation"},{"content":"ℹ️ À savoir · En bref\nSur des VDA non persistants, le profil Windows local disparaît à chaque redémarrage : il faut une solution qui ramène le profil à l'ouverture de session et sauvegarde les changements.\nDeux familles : le profil « fichiers » (copie de dossiers depuis un partage) et le conteneur (un disque VHDX par utilisateur, monté à l'ouverture). Le conteneur est aujourd'hui la norme pour Outlook, Teams et OneDrive.\nObjectifs de la fiche Comprendre la différence entre profil fichiers et conteneur.Configurer Citrix Profile Management (CPM) en mode conteneur.Connaître les réglages clés de FSLogix et savoir choisir.Diagnostiquer une ouverture de session lente due au profil. Fichiers ou conteneur ? Le profil fichiers copie des données ; le conteneur attache un disque déjà prêt CritèreProfil fichiersConteneur VHDXOuverture de sessionDépend du volume à copierRapide et stable : on attache un disqueCaches Outlook / Teams / OneDriveProblématiques (exclusions, perte de cache)Conservés dans le disqueGranularitéFichier par fichier, fusion possibleLe disque entier (un seul fichier par utilisateur)Sessions simultanéesGérées par synchronisationNécessitent un mode spécifique (écriture différée multisession, Cloud Cache, disques différentiels)StockageBeaucoup de petits fichiersGros fichiers ; prévoir l'espace et le compactage Citrix Profile Management Inclus avec le VDA (« Citrix Profile Management » et son plugin WMI). Configuration par GPO (ADMX), stratégie Studio ou WEM : choisis une seule méthode.\nStratégieRôleEnable Profile managementActive la solution : rien ne marche sans ellePath to user storePartage des profils, ex. \\\\fs\\profils$\\#sAMAccountName#\\!CTX_OSNAME!!CTX_OSBITNESS!Enable profile container / Profile container (*)Met tout le profil dans un VHDX ; les exclusions restent possiblesEnable local caching for profile containersGarde une copie locale pour la résilience (à combiner au streaming)Enable multi-session write-back for profile containersSynchronise les changements quand l'utilisateur a plusieurs sessions sur des machines différentesEnable VHD disk compactionCompacte le VHDX à la fermeture de sessionProfile streaming / Enable profile streaming for foldersNe récupère les fichiers qu'à la demande (mode fichiers)Accelerate folder mirroringStocke les dossiers « mirrorés » dans un VHDX (mode fichiers)Replicate user storesRéplique les profils sur plusieurs partages (haute disponibilité)Exclusion list – directoriesExclut les caches inutiles (navigateurs, journaux Teams…) 💡 Astuce\nVariables utiles dans le chemin : #sAMAccountName#, %USERNAME%, !CTX_OSNAME! (sépare les profils par système : un profil Windows 11 et un profil Windows Server ne doivent pas se mélanger).\nLes versions récentes ajoutent un basculement en cours de session entre magasins répliqués et des contrôles d'intégrité (health check) du profil.\nFSLogix Profile Container Solution Microsoft gratuite pour les licences Windows / Microsoft 365 éligibles, standard sur Azure Virtual Desktop et Windows 365, très utilisée aussi avec Citrix.\nparamètres FSLogix (registre ou ADMX)\nHKLM\\SOFTWARE\\FSLogix\\Profiles Enabled = 1 VHDLocations = \\\\fs\\fslogix$ # ou CCDLocations (Cloud Cache) VolumeType = VHDX SizeInMBs = 30000 # disque dynamique IsDynamic = 1 FlipFlopProfileDirectoryName = 1 # dossier \u0026#34;utilisateur_SID\u0026#34;, plus lisible DeleteLocalProfileWhenVHDShouldApply = 1 PreventLoginWithFailure = 1 # pas de profil temporaire silencieux PreventLoginWithTempProfile = 1 FonctionÀ quoi ça sertCloud Cache (CCDLocations)Écrit sur plusieurs emplacements à la fois, avec un cache local : résilience sans réplication externeODFCConteneur séparé pour les données Office (Outlook, OneDrive, Teams), si l'on garde un autre outil pour le profilExclusions (redirections.xml)Exclure des dossiers du conteneur (caches)frx.exeOutil en ligne de commande : créer, copier ou migrer un VHDX ⚠️ Piège\nNe jamais activer FSLogix et le conteneur CPM pour le même profil : désactiver l'un (Enabled = 0 côté FSLogix) avant d'utiliser l'autre.\nMicrosoft exige une version récente de FSLogix, et le passage du chiffrement Kerberos par défaut de RC4 vers AES (mises à jour Windows Server d'avril 2026) peut couper l'accès aux partages de conteneurs non préparés.\nChoisir et migrer Pas de mauvais choix, mais une seule solution par profil De FSLogix vers CPM : outil CPM_ProfileContainer_Migration_Tool.ps1 (fourni avec CPM), type de migration « FSLogix », puis désactivation de FSLogix.Du profil fichiers vers conteneur : le même outil, ou la migration automatique des profils existants à la première ouverture.Tester sur un groupe pilote, avec un partage dédié et des sauvegardes (versions précédentes / instantanés). Dépanner SymptômeCause probableParadeProfil temporairePartage inaccessible, droits NTFS, VHDX verrouillé par une autre sessionVérifier droits et verrous ; bloquer l'ouverture plutôt que donner un profil temporaireOuverture de session lenteProfil fichiers trop gros, exclusions manquantesPhase « Profile load » dans Monitor, passer en conteneur, exclusionsConteneur pleinTaille maximale atteinte, caches non exclusAugmenter la taille, compacter, exclure les cachesParamètres perdus entre deux sessionsDeux sessions simultanées sans mode adaptéÉcriture différée multisession (CPM) ou Cloud Cache / ProfileType (FSLogix)Réglage qui ne s'applique pasConfiguration mélangée GPO / Studio / WEMUne seule méthode ; lire pm.log ou les journaux FSLogix journaux\n# CPM : journal par défaut (activer \u0026#34;Enable logging\u0026#34;) C:\\Windows\\System32\\LogFiles\\UserProfileManager\\\u0026lt;machine\u0026gt;_pm.log # FSLogix : journaux et état %ProgramData%\\FSLogix\\Logs\\Profile\\ \u0026amp; \u0026#34;C:\\Program Files\\FSLogix\\Apps\\frx.exe\u0026#34; list-redirects 🔷 En contexte Citrix\nMonitor (CTX-03) détaille la phase Chargement du profil avec la taille et le nombre de fichiers par dossier : idéal pour justifier un passage au conteneur.\nPour un parc mixte Windows 11 / Windows Server 2025, sépare les profils par OS (!CTX_OSNAME!) et teste Teams et Outlook en priorité.\nÀ retenir Conteneur VHDX = norme actuelle (Outlook, Teams, OneDrive).CPM : Enable Profile management + Path to user store + Profile container *.FSLogix : Enabled, VHDLocations ou CCDLocations, VHDX dynamique.Jamais deux solutions de conteneur pour le même profil.Une seule méthode de configuration ; diagnostiquer avec Monitor et les journaux. Auto-évaluation Q1. Pourquoi le conteneur accélère-t-il l'ouverture de session par rapport au profil fichiers ?→ Il attache un disque au lieu de copier des milliers de fichiers ; la durée dépend peu de la taille du profil.\nQ2. Un utilisateur ouvre deux sessions sur deux serveurs et perd ses réglages. Quelles options ?→ CPM : écriture différée multisession pour les conteneurs ; FSLogix : Cloud Cache ou un mode d'accès concurrent (ProfileType) adapté.\nQ3. Que se passe-t-il si FSLogix et le conteneur CPM sont actifs ensemble ?→ Conflit sur le même profil : comportement imprévisible. Il faut en désactiver un.\nQ4. À quoi sert !CTX_OSNAME! dans le chemin du magasin ?→ À séparer les profils par système d'exploitation pour éviter de mélanger des profils incompatibles.\nPour aller plus loin Citrix Profile ManagementMigrer vers le conteneur CitrixFSLogix : notes de versionFSLogix : référence des paramètres ","permalink":"https://melior.guru/fiches/ctx-02/","summary":"Fiche d\u0026rsquo;apprentissage sur les profils en environnement Citrix : profil fichiers vs conteneur VHDX, Citrix Profile Management (conteneur complet, streaming, exclusions, cache local, compactage, réplication), FSLogix (VHDLocations, Cloud Cache, ODFC), choix et migration, dépannage et mesure du chargement de profil.","title":"Profils utilisateurs — Citrix Profile Management et FSLogix"},{"content":"ℹ️ À savoir · En bref\nMonitor (nom de Director dans Citrix DaaS) est inclus avec toutes les licences : état des sessions et des machines, durée d'ouverture de session découpée en phases, performances HDX, alertes et tendances.\nuberAgent (proposé par Citrix sous le nom Citrix Experience Insights) va plus loin : métriques fines par application, score d'expérience, analyse de sécurité, avec un stockage externe (Splunk, ou d'autres cibles).\nObjectifs de la fiche Lire une durée d'ouverture de session phase par phase.Exploiter Monitor : sessions, machines, alertes, tendances, sondes.Savoir quand compléter avec uberAgent.Suivre une méthode de diagnostic reproductible. Les outils Monitor pour le quotidien, uberAgent pour l'analyse fine, sondes pour détecter avant les utilisateurs OutilPoints fortsLimitesMonitor / DirectorInclus, temps réel, actions (déconnecter, réinitialiser un profil, ombrer), phases d'ouverture de sessionHistorique limité, peu de détail par applicationSondes (Probe Agent)Lancent périodiquement une application ou un bureau et alertent en cas d'échecUn poste dédié à mainteniruberAgentCollecte légère et très détaillée (applications, réseau, navigateur, démarrage), Experience Score, sécuritéDépend d'un back-end (Splunk…) à exploiterCitrix Analytics for PerformanceScore d'expérience utilisateur dans le cloudSelon la licenceAPI OData de MonitorExtraire les données pour Power BI ou un outil maisonRequêtes à écrire Ouverture de session : les phases Les phases affichées dans Monitor ; chacune a sa cause typique PhaseCe qu'elle mesureSi elle est longueBrokeringChoix de la machineCharge du Delivery Controller ou des Cloud ConnectorsDémarrage machineMise sous tension et enregistrementGestion de l'alimentation trop stricte, VM éteintesConnexion HDXÉtablissement de la connexion client → VDARéseau, Gateway, version de Workspace appAuthentificationOuverture de la session distanteContrôleurs de domaine, SSOGPOApplication des stratégies (détail par extension)Trop de GPO, préférences d'imprimantes ou de lecteursScripts d'ouvertureScripts de sessionScripts lourds : migrer vers WEM (CTX-01)Chargement du profilProfil (détail par dossier)Profil fichiers trop gros : conteneur (CTX-02)Session interactiveDu profil au bureau utilisable (pre-userinit, userinit, shell)Applications au démarrage, Active Setup ⚠️ Piège\nPrérequis : Citrix Profile Management et son plugin WMI sur le VDA (même si tu utilises FSLogix), et l'audit Suivi des processus (succès) activé pour détailler la session interactive.\nAugmente la taille du journal opérationnel Group Policy (4 Mo par défaut) pour garder le détail des GPO. Le découpage ne fonctionne qu'avec le shell par défaut (explorer.exe).\nMonitor au quotidien Tableau de bord : sessions actives, échecs de connexion, machines non enregistrées, durée moyenne d'ouverture de session.Détails de l'utilisateur : session, phases d'ouverture, ICA RTT et latence, processus et consommation, actions (déconnexion, fermeture d'application, réinitialisation du profil).Tendances : ouvertures de session, échecs, capacité et utilisation des machines sur la durée.Alertes : seuils sur la charge des machines, les échecs de connexion, l'ICA RTT ou la durée d'ouverture, avec notification par e-mail ou webhook. OData (exemple)\n# Exemple : extraire les sessions récentes via l\u0026#39;API OData de Monitor (CVAD sur site) $uri = \u0026#34;http://ddc01/Citrix/Monitor/OData/v4/Data/Sessions?\u0026#34; + \u0026#34;`$filter=StartDate gt 2026-10-01T00:00:00Z\u0026amp;`$top=100\u0026#34; Invoke-RestMethod -Uri $uri -UseDefaultCredentials | Select-Object -ExpandProperty value ℹ️ À savoir\nDans Citrix DaaS, l'API OData de Monitor est disponible dans le cloud avec un jeton d'API Citrix Cloud (client sécurisé) plutôt qu'avec ton compte Windows.\nCompléter avec uberAgent Un agent sur les VDA (et éventuellement les postes physiques) envoie ses mesures vers un back-end ; les tableaux de bord prêts à l'emploi existent pour Splunk.Indicateurs clés : temps de démarrage et d'ouverture de session, applications qui consomment le plus, plantages et blocages, qualité réseau par utilisateur, Experience Score (machine, session, application).Le module de sécurité (analyse d'activité des processus) permet aussi des détections et des contrôles de configuration.Déploiement : intégré à l'image maître ; configuration centralisée par fichiers ou GPO. ⚠️ Piège\nLa valeur d'uberAgent dépend du back-end : sans Splunk (ou équivalent) dimensionné et exploité par une équipe, les données ne servent à rien. À sécuriser avant le déploiement, comme un prérequis du projet.\nMéthode : « ma session est lente » ÉtapeOù regarder1. QualifierLenteur à l'ouverture ou pendant la session ? Un utilisateur, un site, tout le monde ?2. OuvertureMonitor › utilisateur › phases : identifier la phase la plus longue3. Pendant la sessionICA RTT et latence (réseau), CPU / mémoire de la machine, processus gourmands4. ComparerMême utilisateur sur une autre machine, autre utilisateur sur la même machine5. Corriger et mesurerAppliquer une seule correction à la fois, comparer les tendances avant / après 🔷 En contexte Citrix\nPour un parc de quelques dizaines de VDA, Monitor + alertes couvrent l'essentiel ; uberAgent apporte surtout la visibilité applicative et l'analyse sur les postes physiques.\nMets une sonde sur le bureau ou l'application la plus critique : tu es prévenu avant le premier appel au support.\nÀ retenir Monitor : inclus, temps réel, phases d'ouverture de session, alertes, tendances.Prérequis du découpage : Profile Management + plugin WMI, audit des processus.Lire la phase la plus longue avant de chercher une cause.uberAgent = analyse fine, mais un back-end à exploiter.Sondes + alertes pour détecter avant les utilisateurs. Auto-évaluation Q1. La phase « Chargement du profil » dure 40 s. Que fais-tu ?→ Regarder le détail par dossier dans Monitor, exclure les caches, et envisager le conteneur de profil (CTX-02).\nQ2. Pourquoi installer Profile Management sur un VDA qui utilise FSLogix ?→ Le plugin WMI de Profile Management fournit les données nécessaires au découpage de l'ouverture de session dans Monitor.\nQ3. Les utilisateurs d'un seul site se plaignent de lenteurs pendant la session. Quel indicateur regardes-tu d'abord ?→ L'ICA RTT et la latence réseau des sessions de ce site, à comparer avec les autres sites.\nQ4. Quel est le principal risque d'un projet uberAgent ?→ La dépendance au back-end (Splunk…) : sans stockage et exploitation des données, l'outil n'apporte rien.\nPour aller plus loin Diagnostiquer les ouvertures de session (Director)Citrix Monitor (DaaS)uberAgent / Citrix Experience InsightsCitrix Observability ","permalink":"https://melior.guru/fiches/ctx-03/","summary":"Fiche d\u0026rsquo;apprentissage sur la supervision Citrix : Monitor / Director (sessions, phases d\u0026rsquo;ouverture de session, ICA RTT, alertes, sondes, rapports, API OData), uberAgent (Citrix Experience Insights) et Splunk, méthode de diagnostic d\u0026rsquo;une session lente.","title":"Supervision Citrix — Monitor (Director), uberAgent et diagnostic des sessions"},{"content":"ℹ️ À savoir · En bref\nCitrix sépare trois couches : l'accès (StoreFront ou Workspace, Gateway), le contrôle (Delivery Controllers sur site, ou plan de contrôle Citrix Cloud joint par des Cloud Connectors) et les ressources (VDA sur un hyperviseur ou un cloud).\nCVAD = tu héberges tout. DaaS = Citrix héberge le contrôle (et peut héberger l'accès) ; tu gardes les VDA et les Cloud Connectors.\nObjectifs de la fiche Identifier les composants et leur rôle.Comprendre l'enregistrement d'un VDA et la séquence de lancement.Connaître le comportement en cas de panne (Local Host Cache).Savoir par où commencer un dépannage. Les composants Accès, contrôle, ressources : les flux principaux et leurs ports ComposantRôleSur site (CVAD)DaaSDelivery ControllerBroker : enregistrement des VDA, choix de la machine, alimentationTes serveurs (2 minimum)Hébergé par CitrixCloud ConnectorRelais entre ton réseau et Citrix Cloud (AD, VDA, hyperviseurs)—2 minimum par emplacement de ressourcesBase du siteConfiguration, état, journal, supervisionSQL Server (haute dispo.)Hébergée par CitrixStudioConsole d'administrationWeb StudioConsole Citrix Cloud (Gérer)StoreFront / WorkspaceAuthentification et liste des ressourcesStoreFrontWorkspace (cloud) ou StoreFrontGatewayAccès externe sécuriséNetScalerGateway service ou NetScalerLicencesContrôle des licencesServeur de licencesIntégrées au serviceVDAAgent dans chaque machine qui publie bureaux et applicationsTes machinesTes machines Les objets à connaître ObjetDéfinitionConnexion d'hébergementLien vers un hyperviseur ou un cloud (vCenter, abonnement Azure) et ses ressources (réseau, stockage)Catalogue de machinesEnsemble de machines identiques (même image, même type : multisession, mono-session aléatoire ou statique)Groupe de mise à dispositionMachines d'un ou plusieurs catalogues publiées à des utilisateurs, avec bureaux et/ou applicationsGroupe d'applicationsApplications publiées sur plusieurs groupes de mise à disposition, avec leurs propres droitsZone (CVAD) / emplacement de ressources (DaaS)Regroupement géographique : contrôleurs ou connecteurs proches des VDA et des utilisateursBalises (tags)Restreindre une application ou un bureau à certaines machines, ou cibler des stratégies Enregistrement du VDA Au démarrage, le VDA cherche la liste des contrôleurs puis s'enregistre (port 80, trafic authentifié et chiffré par Kerberos). Tant qu'il n'est pas enregistré, aucune session ne peut lui être attribuée.\nMéthodeDétailMise à jour automatiqueActivée par défaut : après le premier contact, le VDA reçoit et garde la liste à jourStratégie / GPOParamètre « Controllers » (Virtual Delivery Agent Settings)RegistreHKLM\\SOFTWARE\\Citrix\\VirtualDesktopAgent\\ListOfDDCsInstallationAdresses saisies à l'installation (ou /controllers en ligne de commande) vérifier l'enregistrement\n# Sur le VDA : diagnostic complet de l\u0026#39;enregistrement XDPing.exe # outil Citrix (DNS, ports, Kerberos, heure) # Sur un contrôleur / via le SDK DaaS Get-BrokerMachine -MachineName \u0026#34;CORP\\VDA-W25-01\u0026#34; | Select-Object RegistrationState, LastDeregistrationReason, AgentVersion ⚠️ Piège\nCauses classiques d'un VDA « non enregistré » : heure décalée (Kerberos), DNS (enregistrement inverse, zone parasite), pare-feu sur le port 80, compte machine désynchronisé après restauration, liste de contrôleurs vide. La raison est dans LastDeregistrationReason et dans le journal Application du VDA.\nLancement d\u0026rsquo;une session De l'authentification à l'ouverture de session Windows Le broker choisit le VDA selon l'index de charge (multisession), l'attribution (statique), les balises et l'état d'alimentation ; il allume une machine si besoin.Le fichier ICA contient l'adresse du VDA (ou de la Gateway) et un ticket à usage unique, de courte durée de validité.Avec Rendezvous, le VDA ouvre lui-même une connexion sortante vers le Gateway service : pas de flux entrant vers les VDA. ℹ️ À savoir\nRendezvous V2 (défaut sur les VDA récents) va plus loin : le VDA dialogue directement avec le plan de contrôle Citrix Cloud. Sans Cloud Connector, ce n'est possible que pour des machines jointes à Entra ID ou hors domaine ; les machines jointes à l'AD (ou hybrides) gardent les Cloud Connectors.\nRésilience : Local Host Cache SituationComportementDéclenchementPerte du lien entre Cloud Connectors et Citrix Cloud (ou base du site injoignable sur site)Qui prend la mainUn broker élu parmi les connecteurs de la zone (ordre alphabétique des FQDN)Ce qui marcheMultisession et mono-session statique ; machines allumées ; mono-session aléatoire : une session par machine par défautCe qui ne marche pasStudio, nouvelles attributions, alimentation (pas d'accès à l'hyperviseur), MonitorCondition DaaSLe trafic StoreFront passe par les Cloud Connectors (StoreFront sur site), ou la continuité de service est activéeSynchronisationCopie de la configuration environ toutes les 5 minutes Versions : LTSR ou CR LTSR (Long Term Service Release) : support long, correctifs par mises à jour cumulatives (CU) ; recommandé en production stable. La dernière est la 2607 LTSR.CR (Current Release) : nouvelles fonctions tous les quelques mois, support court.En DaaS, le plan de contrôle est toujours à jour ; seuls les VDA, Cloud Connectors (mis à jour automatiquement) et StoreFront sont à gérer. 🔷 En contexte Citrix\nPlace les Cloud Connectors dans le même domaine (ou une forêt approuvée) que les utilisateurs et les VDA, et au moins deux par emplacement : ils portent l'enregistrement, l'AD et le Local Host Cache.\nL'élection du broker LHC passe par HTTP (port 80) entre connecteurs : à autoriser dans les règles réseau internes.\nÀ retenir Accès (StoreFront/Workspace, Gateway) → contrôle (DDC / Cloud Connectors) → ressources (VDA).Catalogue = machines identiques ; groupe de mise à disposition = publication aux utilisateurs.Un VDA non enregistré ne reçoit aucune session : heure, DNS, Kerberos, port 80.Le ticket du fichier ICA est validé par le VDA auprès du broker.LHC : continuité en panne cloud, sans alimentation ni Studio. Auto-évaluation Q1. Quelle différence entre un catalogue et un groupe de mise à disposition ?→ Le catalogue regroupe des machines identiques (image, type) ; le groupe de mise à disposition publie ces machines à des utilisateurs sous forme de bureaux ou d'applications.\nQ2. Un VDA reste « non enregistré ». Quelles vérifications en premier ?→ XDPing sur le VDA : heure, DNS (direct et inverse), Kerberos, port 80 vers les contrôleurs, liste des contrôleurs ; puis LastDeregistrationReason.\nQ3. Que se passe-t-il pour un bureau mono-session aléatoire pendant un LHC ?→ Il reste utilisable s'il est allumé, pour une seule session par défaut (réutilisation activable par groupe) ; aucune opération d'alimentation n'est possible.\nQ4. Pourquoi Rendezvous simplifie-t-il le réseau ?→ Le VDA ouvre une connexion sortante vers le Gateway service : pas de flux HDX entrant à ouvrir vers les VDA.\nPour aller plus loin Citrix DaaS : documentationEnregistrement des VDALocal Host Cache (DaaS)Rendezvous V2 ","permalink":"https://melior.guru/fiches/ctx-04/","summary":"Fiche d\u0026rsquo;apprentissage sur l\u0026rsquo;architecture Citrix DaaS / CVAD : composants (accès, contrôle, ressources), différences sur site / cloud, objets (catalogues, groupes de mise à disposition, groupes d\u0026rsquo;applications), enregistrement des VDA, séquence de lancement d\u0026rsquo;une session, Local Host Cache, Rendezvous, LTSR / CR et dépannage.","title":"Citrix DaaS et CVAD — Architecture et lancement d'une session"},{"content":"ℹ️ À savoir · En bref\nMCS crée et maintient les machines d'un catalogue à partir d'une image maître : un seul système à patcher, des dizaines de VM identiques.\nEn non persistant, chaque redémarrage remet la machine dans l'état de l'image : les modifications locales disparaissent, ce qui garantit des machines propres et uniformes.\nObjectifs de la fiche Comprendre ce que fait MCS sur l'hyperviseur ou le cloud.Choisir le type de catalogue et les options de cache.Mettre à jour une image, et revenir en arrière.Éviter les pièges de préparation d'image. Comment ça marche L'image est figée, préparée, copiée ; chaque VM n'a en propre que son identité et ses écritures ÉlémentRôleImage maîtreVM de référence : Windows ou Linux, VDA installé en mode « image maître », applicationsSnapshotVersion figée de l'image ; c'est elle que MCS consommePréparation de l'imageMCS démarre une copie pour la préparer (réarmement, licences, nettoyage) puis la publie comme disque de baseDisque d'identitéPetit disque propre à chaque VM : nom, compte machine AD, identité CitrixDisque de différenceReçoit les écritures de la VM ; remis à zéro au redémarrage en non persistant Types de catalogues TypeComportementUsageMultisession (serveur)Non persistant, réinitialisé au redémarrageApplications publiées, bureaux partagésMono-session aléatoireNon persistant, n'importe quelle machine du groupeBureaux standardMono-session statique, modifications jetéesMachine attribuée mais réinitialiséeBesoin d'une machine dédiée (nom, licences) sans persistanceMono-session statique, persistantClone complet qui garde ses modificationsDéveloppeurs, applications installées par l'utilisateur ⚠️ Piège\nUne machine persistante ne reçoit pas la nouvelle image lors d'une mise à jour du catalogue (seules les nouvelles machines l'utilisent) : elle se patche comme un poste classique (WSUS, Intune, ConfigMgr).\nMCS I/O : le cache d\u0026rsquo;écriture Les écritures vont d'abord en mémoire, puis débordent sur un disque de cache dédié : moins d'IOPS sur le stockage partagé et des performances plus stables.Option du catalogue (taille mémoire et disque de cache) ; le composant MCS I/O doit être installé avec le VDA.Dimensionner la mémoire du cache en plus de la mémoire nécessaire aux sessions ; un cache trop petit déborde sur disque, un disque de cache plein bloque la VM. Spécificités Azure FonctionIntérêtProfil de machineUne VM modèle (ou une spec de modèle ARM) fournit taille, réseau, sécurité (Trusted Launch), balises AzureAzure Compute GalleryRéplique l'image pour créer beaucoup de machines plus viteDisque OS éphémèreDisque sur le stockage local de l'hôte : pas de coût de disque géré, réinitialisation rapide (tailles de VM compatibles)Type de disque à l'arrêtBasculer le disque en HDD standard quand la VM est éteinte pour réduire le coûtHibernationPour les bureaux mono-session : reprise rapide de la session (selon tailles et images compatibles) Gestion des images préparées Citrix sépare désormais la préparation de l'image de la création du catalogue : une définition d'image regroupe des versions ; chaque version préparée peut servir à plusieurs catalogues, et la préparation se fait à l'avance.\nCréation et mise à jour de catalogues beaucoup plus rapides, historique des versions, partage entre unités d'hébergement.Prérequis Windows : VDA 2311 ou plus récent avec le composant MCS I/O installé.Plateformes : Azure, AWS, VMware, XenServer, Nutanix, OpenShift… Limites : pas de cartes réseau multiples dans Azure ni de disques de données persistants. Mettre à jour et revenir en arrière Un snapshot par version, déploiement au redémarrage, retour arrière sur le snapshot précédent PowerShell (SDK Citrix)\n# Mise à jour d\u0026#39;un catalogue vers un nouveau snapshot (vSphere, exemple) $img = \u0026#34;XDHyp:\\HostingUnits\\HU-Lille\\W25-MASTER.vm\\2026-11 W25.snapshot\u0026#34; Publish-ProvMasterVMImage -ProvisioningSchemeName \u0026#34;CAT-W25-MS\u0026#34; -MasterImageVM $img # Redémarrer progressivement les machines du groupe de mise à disposition Start-BrokerRebootCycle -InputObject (Get-BrokerCatalog -Name \u0026#34;CAT-W25-MS\u0026#34;) ` -RebootDuration 240 -WarningDuration 15 -WarningMessage \u0026#34;Redémarrage de maintenance\u0026#34; 💡 Astuce\nNomme les snapshots avec la date et le contenu (« 2026-11 W25 KB + VDA 2607 ») et garde les deux précédents : le retour arrière se fait en mettant à jour le catalogue vers l'ancien snapshot.\nTeste chaque nouvelle image sur un catalogue de recette avant la production.\nIdentités des machines TypeRemarqueActive DirectoryClassique : comptes machine créés par MCS dans une OUJoint hybride EntraCompte AD + enregistrement Entra ; attention aux délais de synchronisationJoint à Entra IDSans AD ; compatible Rendezvous V2 sans Cloud ConnectorHors domaineNi AD ni Entra : kiosques, cas particuliers Pièges de préparation d\u0026rsquo;image SymptômeCauseParadeÉchec de préparation de l'imageImage non éteinte proprement, VDA mal installé, agent qui bloqueJournaux de préparation, arrêt propre, VDA en mode image maîtreMachines non enregistrées après mise à jourImage laissée dans un état de domaine incohérent, horlogeNe pas faire de sysprep, image jointe au domaine et à l'heureDémarrage lent de toutes les VMMises à jour, antivirus ou indexation au démarrageOptimiser l'image (Citrix Optimizer), scans planifiés, exclusionsStockage saturéDisques de base multipliés (snapshots, stockages)Supprimer les anciens snapshots, suivre l'espace par stockageAgents en double dans les consolesIdentifiant unique d'agent figé dans l'image (sécurité, supervision)Procédure « image maître » de chaque éditeur avant le snapshot 🔷 En contexte Citrix\nPour Windows Server 2025 dans Azure sans accès Internet, prépare les mises à jour cumulatives hors ligne (MSU vérifiés, bon ordre) avant de figer le snapshot, puis valide l'ouverture de session en compte non administrateur sur le catalogue de recette.\nPour les VDA Linux, l'état de jonction AD de l'image et mcs.conf sont les deux points critiques (voir CTX-10).\nÀ retenir Image maître → snapshot → préparation → disque de base → identité + différence par VM.Non persistant = propre à chaque redémarrage ; persistant = ne reçoit pas les nouvelles images.MCS I/O : cache mémoire + disque, à dimensionner.Images préparées : préparation à l'avance, réutilisable, versionnée.Retour arrière = mise à jour vers le snapshot précédent. Auto-évaluation Q1. Que contient le disque d'identité ?→ Les informations propres à la VM : nom, compte machine AD et identité Citrix.\nQ2. Tu mets à jour un catalogue persistant. Les machines existantes reçoivent-elles l'image ?→ Non : seules les nouvelles machines l'utilisent. Les existantes se patchent comme des postes classiques.\nQ3. Comment revenir à l'image précédente après un problème ?→ Mettre à jour le catalogue vers le snapshot précédent puis redémarrer les machines.\nQ4. Pourquoi installer MCS I/O ?→ Pour le cache d'écriture en mémoire et sur disque dédié (moins d'IOPS sur le stockage) et pour la gestion des images préparées.\nPour aller plus loin Créer des catalogues de machinesGestion des images (images préparées)Identités des machinesMCS et Azure ","permalink":"https://melior.guru/fiches/ctx-05/","summary":"Fiche d\u0026rsquo;apprentissage Citrix MCS : fonctionnement (image maître, snapshot, préparation, disque de base, disques d\u0026rsquo;identité et de différence), catalogues persistants ou non, MCS I/O, Azure (profil de machine, galerie, disques éphémères), gestion des images préparées, mise à jour et retour arrière, types d\u0026rsquo;identité, pièges.","title":"Citrix MCS — Machine Creation Services et gestion des images"},{"content":"ℹ️ À savoir · En bref\nStoreFront (sur site) ou Citrix Workspace (cloud) authentifient l'utilisateur, interrogent les contrôleurs pour savoir à quoi il a droit, et renvoient le fichier ICA au moment du lancement.\nL'utilisateur y accède par la Citrix Workspace app (client installé, recommandé) ou par un navigateur.\nObjectifs de la fiche Comprendre les composants de StoreFront et leurs flux.Configurer correctement URL de base, balises et Gateway.Choisir entre StoreFront et Workspace, et les méthodes d'authentification.Dépanner une énumération ou un lancement en échec. Architecture de StoreFront Le magasin agrège les ressources des contrôleurs ; le service d'authentification valide l'utilisateur ComposantRôleService d'authentificationValide l'utilisateur (mot de passe, SSO du domaine, carte à puce, SAML, Gateway)Magasin (store)Liste les ressources, gère les favoris, agrège plusieurs sites ou contrôleursSite webhttps://storefront.corp.local/Citrix/StoreWeb : accès navigateur et configuration de la Workspace appGroupe de serveursPlusieurs serveurs StoreFront derrière un répartiteur, configuration propagée depuis le serveur principalDélégations aux contrôleursListe des Delivery Controllers ou Cloud Connectors interrogés en XML (HTTPS de préférence) Les réglages qui comptent RéglageBonne pratiqueURL de baseLe nom du répartiteur (même nom en interne et en externe), avec un certificat qui couvre ce nomBalises (beacons)Interne : une URL joignable seulement en interne. Externe : deux URL Internet. La Workspace app en déduit si elle est dedans ou dehorsGatewayDéclarer la Gateway (URL, callback, adresses STA = contrôleurs ou connecteurs) et l'activer sur le magasinContrôleursAu moins deux par site, en HTTPS, avec le bon type (Citrix Virtual Apps and Desktops ou Cloud Connectors)DélaisAjuster les délais d'inactivité du site web et du magasin à la politique de sécurité PowerShell\n# Autoriser les demandes relayées (pass-through Gateway, carte à puce, SSO) vers le XML Set-BrokerSite -TrustRequestsSentToTheXmlServicePort $true # StoreFront : état de la propagation dans le groupe de serveurs Get-STFServerGroup | Select-Object HostBaseUrl, ClusterMembers Méthodes d\u0026rsquo;authentification MéthodeUsageNom d'utilisateur et mot de passePar défaut ; à combiner avec la Gateway pour le MFA externeAuthentification unique du domainePoste joint au domaine : pas de nouvelle saisie (Workspace app avec SSO activé)Carte à puceCertificat utilisateur, éventuellement relayé dans la sessionPass-through depuis la GatewayL'utilisateur s'authentifie sur NetScaler (MFA), StoreFront fait confianceSAMLFournisseur d'identité externe (Entra ID, ADFS, Okta) ; souvent avec le Federated Authentication Service pour l'ouverture de session Windows sans mot de passe Citrix Workspace (cloud) Workspace cloud, StoreFront sur site, ou les deux URL https://\u0026lt;client\u0026gt;.cloud.com ou domaine personnalisé ; aucun serveur à maintenir.Fournisseurs d'identité : AD, AD + jeton, Entra ID, Okta, SAML 2.0, NetScaler (Adaptive Authentication).Authentification conditionnelle : oriente l'utilisateur vers un fournisseur selon son domaine ou son groupe.Continuité de service : des baux de connexion stockés sur le poste permettent de lancer des ressources même si Citrix Cloud est injoignable.Configuration centralisée de la Workspace app avec le Global App Configuration Service (GACS). ⚠️ Piège\nAuthentification conditionnelle : une règle basée sur un groupe AD de domaine local peut échouer en multi-domaines (non résolu via le catalogue global) avec un « accès refusé » immédiat. Utilise des groupes universels pour ces règles.\nWorkspace app Versions LTSR et CR, comme le VDA ; aligne la version sur ce que supportent tes fonctions (Teams, App Protection, EDT).Ajout du magasin par adresse e-mail (découverte par DNS), par URL, ou poussé par GPO / GACS.Composants utiles : SSO (/includeSSON), plugin Teams, App Protection ; ne pas installer ce qui n'est pas utilisé.Outils : Citrix Workspace app Log Collector et le menu Préférences avancées › Support. Dépanner SymptômeCause probableParade« Impossible de terminer votre demande »Contrôleurs injoignables, XML, certificatJournal « Citrix Delivery Services » sur StoreFrontAucune ressource affichéeDroits du groupe de mise à disposition, mauvais magasin, cacheVérifier les droits ; réinitialiser la Workspace appLe client se croit interne dehorsBalise interne joignable depuis InternetBalise interne réellement privéeLancement externe en échecSTA différents entre Gateway et StoreFrontMêmes adresses STA, dans le même ordre, des deux côtésPass-through refuséConfiance XML non activéeSet-BrokerSite -TrustRequestsSentToTheXmlServicePort $true 🔷 En contexte Citrix\nEn DaaS avec StoreFront sur site, déclare les Cloud Connectors comme contrôleurs et comme STA : c'est aussi la condition du Local Host Cache (CTX-04).\nGarde un seul nom (URL de base) pour l'interne et l'externe : les utilisateurs n'ont qu'une adresse à connaître.\nÀ retenir Authentification + magasin + site web, en groupe de serveurs derrière un répartiteur.URL de base, balises, Gateway et STA cohérents : 80 % des problèmes.Workspace cloud : IdP au choix, authentification conditionnelle, continuité de service.Groupes universels pour l'authentification conditionnelle multi-domaines.Journal « Citrix Delivery Services » pour tout échec côté StoreFront. Auto-évaluation Q1. À quoi servent les balises (beacons) ?→ À permettre à la Workspace app de savoir si elle est sur le réseau interne (balise interne joignable) ou externe, pour passer ou non par la Gateway.\nQ2. Un lancement externe échoue alors que l'énumération marche. Que vérifies-tu ?→ Les adresses STA : identiques entre NetScaler et StoreFront, et joignables ; puis la stratégie de session de la Gateway.\nQ3. Pourquoi activer TrustRequestsSentToTheXmlServicePort ?→ Pour que les contrôleurs acceptent les demandes où StoreFront relaie une authentification déjà faite (Gateway, carte à puce, SSO) sans mot de passe.\nQ4. Qu'apporte la continuité de service de Workspace ?→ Des baux de connexion locaux qui permettent de lancer les ressources même si Citrix Cloud est indisponible.\nPour aller plus loin StoreFrontCitrix Workspace : authentificationContinuité de serviceWorkspace app pour Windows ","permalink":"https://melior.guru/fiches/ctx-06/","summary":"Fiche d\u0026rsquo;apprentissage StoreFront et Citrix Workspace : architecture (service d\u0026rsquo;authentification, magasin, site web), groupe de serveurs, URL de base et balises, intégration Gateway, méthodes d\u0026rsquo;authentification, Workspace cloud (fournisseurs d\u0026rsquo;identité, authentification conditionnelle, continuité de service), Workspace app et dépannage.","title":"StoreFront et Workspace — Magasins, authentification et Workspace app"},{"content":"ℹ️ À savoir · En bref\nLa Gateway est la porte d'entrée externe : elle authentifie l'utilisateur (avec MFA), le présente à StoreFront, puis relaie le flux HDX (ICA proxy) vers le VDA. Aucun VDA n'est exposé sur Internet.\nDeux options : NetScaler Gateway (appliance que tu gères) ou Citrix Gateway service (hébergé par Citrix, avec Rendezvous).\nObjectifs de la fiche Comprendre le rôle du ticket STA et de l'ICA proxy.Configurer un serveur virtuel Gateway pour StoreFront.Mettre en place nFactor (LDAP + MFA ou SAML).Sécuriser l'appliance et dépanner un lancement. Le flux d\u0026rsquo;une connexion externe Authentification, SSO vers StoreFront, ticket STA, puis relais du flux HDX STA (Secure Ticket Authority) : service hébergé sur les Delivery Controllers ou Cloud Connectors. Il délivre un ticket à usage unique que la Gateway échange contre l'adresse réelle du VDA.Le fichier ICA reçu par le client ne contient que l'adresse de la Gateway et le ticket : l'adresse interne du VDA ne sort jamais.Ports : client → Gateway TCP 443 (et UDP 443 pour EDT) ; Gateway (SNIP) → VDA 1494 / 2598 TCP et UDP ; Gateway → StoreFront 443 ; Gateway → STA 80/443. Configuration type ÉlémentRéglageServeur virtuel GatewayVIP publique, port 443, certificat public complet (avec intermédiaires), mode ICA only si seul Citrix est publiéSTAMêmes serveurs que dans StoreFront (contrôleurs ou Cloud Connectors), en HTTP ou HTTPSStratégie de sessionClient Workspace app et navigateur : ICA proxy ON, URL web vers le site StoreFront, SSO activé, domaineAuthentificationnFactor (LDAP + RADIUS / OTP, ou SAML Entra ID) via un serveur virtuel d'authentificationStoreFrontGateway déclarée avec la même URL, callback (optionnel), mêmes STAProfil SSLTLS 1.2 et 1.3 uniquement, suites de chiffrement modernes, HSTS 💡 Astuce\nL'assistant Citrix Gateway › XenApp et XenDesktop de l'interface NetScaler crée en une fois le serveur virtuel, les stratégies de session et les STA. Repars de là puis affine (nFactor, profil SSL).\nnFactor et MFA ScénarioPrincipeLDAP + OTP natifMot de passe AD puis code d'application d'authentification géré par NetScalerLDAP + RADIUSDeuxième facteur par un serveur RADIUS (extension NPS pour Entra MFA, solution tierce)SAML (Entra ID, ADFS, Okta)NetScaler délègue l'authentification à l'IdP (avec ses stratégies d'accès conditionnel) ; SSO vers StoreFront avec le Federated Authentication ServiceSelon le groupe ou le domainenFactor oriente l'utilisateur vers un schéma différent selon des critères (« si groupe X alors… ») EDT à travers la Gateway Activer DTLS sur le serveur virtuel Gateway et ouvrir UDP 443 en entrée, UDP 1494 / 2598 de la SNIP vers les VDA.Le transport adaptatif retombe en TCP si l'UDP est bloqué : vérifier dans la session (ctxsession -v ou Monitor) que le protocole est bien EDT.Versions recommandées pour EDT : NetScaler 14.1 build 12.30 ou plus récent (ou 13.1 build 52.19 et plus). Gateway service (cloud) Hébergé par Citrix dans plusieurs régions ; rien à exposer chez toi.Avec Rendezvous, les VDA ouvrent une connexion sortante vers le service (TCP / UDP 443 vers *.nssvc.net).Authentification via les fournisseurs d'identité de Citrix Workspace ; NetScaler peut rester l'IdP (Adaptive Authentication) pour des scénarios avancés. Sécurité de l\u0026rsquo;appliance ⚠️ Piège\nNetScaler est une cible fréquente (CitrixBleed en 2023, CitrixBleed 2 et d'autres failles critiques en 2025) : applique les bulletins de sécurité sans attendre, sur une version supportée (14.1 ou 13.1).\nAprès un correctif de fuite de session, termine toutes les sessions (kill aaa session -all, kill icaconnection -all) : les jetons volés avant le correctif restent sinon valables.\nInterface d'administration jamais exposée sur Internet, comptes nominatifs, authentification externe pour les admins.Journaux envoyés vers un SIEM ; surveiller les sessions anormales et les fichiers inconnus sur l'appliance.Haute disponibilité en paire, et sauvegarde de configuration avant chaque mise à jour. Dépanner commandes\n# CLI NetScaler show vpn vserver \u0026lt;nom\u0026gt; # état du serveur virtuel Gateway, certificat, stratégies, STA show aaa session # sessions authentifiées show icaconnection # connexions HDX relayées stat vpn # statistiques Gateway start nstrace -size 0 -time 120 # capture réseau pendant un lancement (puis /var/nstrace) SymptômeCause probableParade« Cannot connect to server » au lancementTicket STA refusé : STA différents ou injoignablesMêmes STA dans StoreFront et NetScaler, état UPBoucle de connexion ou page blancheStratégie de session : URL web ou SSO incorrectsRevoir la stratégie de session, domaine SSOSession lente, en TCPUDP 443 ou DTLS non configuréActiver DTLS, ouvrir UDP, vérifier le transportCertificat refusé sur mobileChaîne incomplèteLier les certificats intermédiairesMFA non demandéSchéma nFactor non lié ou mauvais ordreVérifier le serveur virtuel d'authentification et le profil 🔷 En contexte Citrix\nAvec Workspace (cloud) et le Gateway service, la NetScaler sur site n'est plus indispensable pour l'accès HDX ; elle reste utile pour l'authentification avancée, l'équilibrage de StoreFront ou d'autres applications.\nSi la sécurité impose une inspection, rappelle que le trafic HDX vers le Gateway service ne supporte pas le déchiffrement TLS : il faut une exception.\nÀ retenir La Gateway authentifie, fait le SSO vers StoreFront et relaie HDX : VDA jamais exposés.STA identiques et joignables des deux côtés.nFactor pour le MFA (LDAP + OTP / RADIUS, ou SAML).EDT : DTLS + UDP 443 en entrée, UDP 1494/2598 vers les VDA.Correctifs de sécurité immédiats, puis purge des sessions. Auto-évaluation Q1. À quoi sert le ticket STA ?→ À référencer le VDA sans exposer son adresse : la Gateway valide le ticket auprès du STA et obtient l'adresse réelle à laquelle relayer le flux.\nQ2. Pourquoi une session externe passe-t-elle en TCP alors qu'EDT est activé ?→ DTLS n'est pas activé sur le serveur virtuel ou l'UDP 443 (ou 1494/2598 vers les VDA) est bloqué : le transport adaptatif retombe en TCP.\nQ3. Que faire juste après avoir appliqué un correctif contre une fuite de session ?→ Terminer toutes les sessions AAA et ICA pour invalider des jetons éventuellement volés.\nQ4. Comment faire du MFA avec Entra ID devant Citrix ?→ nFactor avec SAML vers Entra ID (avec son accès conditionnel), ou LDAP + RADIUS via l'extension NPS ; SSO Windows avec le Federated Authentication Service si besoin.\nPour aller plus loin NetScaler GatewayIntégrer la Gateway à StoreFrontEDT sur NetScaler GatewayBulletins de sécurité Citrix ","permalink":"https://melior.guru/fiches/ctx-07/","summary":"Fiche d\u0026rsquo;apprentissage NetScaler Gateway pour Citrix : flux d\u0026rsquo;une connexion externe (authentification, SSO StoreFront, ticket STA, ICA proxy), configuration (serveur virtuel, certificats, STA, stratégies de session), nFactor et MFA, EDT/DTLS, Gateway service, sécurité (correctifs, CVE) et dépannage.","title":"NetScaler Gateway — Accès externe à Citrix : ICA proxy, STA, nFactor"},{"content":"ℹ️ À savoir · En bref\nHDX désigne l'ensemble des technologies d'expérience utilisateur de Citrix ; ICA est le protocole qui transporte la session : écran, clavier, souris, audio, impression, lecteurs, USB… chacun dans un canal virtuel.\nLe transport par défaut est EDT (sur UDP), avec repli automatique sur TCP : c'est le transport adaptatif.\nObjectifs de la fiche Comprendre la pile ICA et les ports utilisés.Régler le graphisme selon l'usage et la bande passante.Optimiser Teams et vérifier que l'optimisation est active.Diagnostiquer une session lente ou un périphérique non redirigé. La pile ICA Les canaux virtuels sont multiplexés dans ICA, protégés par la fiabilité de session, transportés en EDT ou TCP CoucheRôlePort / réglageCanaux virtuelsUn canal par fonction (graphisme, audio, impression, lecteurs, USB, Teams…)Stratégies de redirectionICAMultiplexage, priorités, compressionTCP / UDP 1494 sans fiabilité de sessionFiabilité de session (CGP)Garde la session ouverte pendant une coupure réseau (180 s par défaut)TCP / UDP 2598Reconnexion automatique du clientReconnecte si la coupure dépasse la fiabilité de sessionStratégie dédiéeTransport adaptatifEDT (UDP) préféré, repli TCP, nouvelle tentative EDT toutes les 5 minPréféré (défaut), Diagnostic, DésactivéChiffrementTLS / DTLS de bout en bout via la Gateway, ou directement sur le VDA (VDA SSL)443 vérifier le transport\n# Dans la session (sur le VDA) : transport et protocole utilisés ctxsession.exe -v # → \u0026#34;EDT\u0026#34; ou \u0026#34;TCP\u0026#34;, \u0026#34;Rendezvous\u0026#34; si utilisé, état de la fiabilité de session Graphisme StratégieValeurs utilesUse video codec for compression« Utiliser si préféré » (défaut, choix automatique), « Pour les zones qui changent », « Pour tout l'écran », « Ne pas utiliser »Visual qualityMoyenne, Haute (défaut), Build to lossless (net une fois l'image stable), Toujours sans perteTarget frame rate30 i/s par défaut ; 60 pour la vidéo ou la 3D si le réseau suitUse hardware encoding for video codecUtilise le GPU du VDA (NVENC…) pour soulager le CPUOptimize for 3D graphics workloadProfil adapté aux applications 3D / CAO avec GPU CodecQuandExigencesH.264Par défaut, partoutEncodage logiciel ou GPUH.265Meilleure compression, qualité à débit égalGPU recommandé sur le VDA, décodage H.265 sur le client, activé côté clientAV1Le plus efficace à qualité égaleGPU récent côté VDA (encodage AV1) et côté client (décodage)H.265 4:4:4Rendu visuellement sans perte (CAO, imagerie)GPU compatible des deux côtés, stratégies sans perte activées 💡 Astuce\nSans GPU, reste sur les valeurs par défaut (H.264 automatique, qualité haute). Le gain le plus visible vient souvent du transport (EDT, réseau) plutôt que des réglages graphiques.\nMicrosoft Teams Le média ne transite plus par le VDA : le poste client traite audio et vidéo et parle directement à Microsoft 365 Le nouveau Teams utilise l'optimisation SlimCore (« VDI 2.0 ») : un plugin Microsoft sur le poste client (MsTeamsPluginCitrix) télécharge le moteur média SlimCore.Côté client : Workspace app pour Windows récente avec le plugin Teams (option à l'installation /installMSTeamsPlugin), ou Workspace app pour Mac récente.Si la stratégie Virtual channels allow list est activée : autoriser MSTEAMS, MSTEAM1, MSTEAM2 pour ms-teams.exe (autorisés par défaut à partir du VDA 2603).Vérification : bannière Optimisé en haut à gauche de Teams, au survol « SlimCore » ; sur le poste, Get-AppxPackage Microsoft.Teams.SlimCore*. ⚠️ Piège\nSans optimisation, Teams calcule audio et vidéo sur le VDA et renvoie le résultat en image : charge CPU très forte et appels de mauvaise qualité. Vérifie l'optimisation sur chaque type de poste client (clients légers compris).\nImpression, périphériques, presse-papiers FonctionÀ savoirImpressionCréation automatique des imprimantes du client avec le pilote d'impression universel Citrix (UPD) ; Universal Print Server pour les imprimantes réseauLecteurs clientsRedirection des disques du poste (lente sur WAN, à limiter)Presse-papiersBidirectionnel par défaut ; peut être restreint par sens et par formatUSB génériqueRedirection d'un périphérique USB complet : à réserver aux cas non couverts par les redirections optimiséesWebcam, microRedirection optimisée (HDX RealTime) ; plusieurs résolutions de webcam prises en chargeCartes à puceCanal dédié, à préférer à l'USB générique ℹ️ À savoir\nLa stratégie Virtual channels allow list bloque tout canal virtuel personnalisé non autorisé : indispensable en sécurité, mais pense à y ajouter les canaux des éditeurs (Teams, signature, softphones…).\nDépanner une session lente SymptômeOù regarderPisteSaccades, latenceICA RTT dans Monitor, ctxsession -vRéseau, Wi-Fi, passage en TCP, perte de paquetsImage floue qui ne se précise pasQualité visuelleBuild to lossless, débit disponibleCPU du VDA saturéGestionnaire des tâches, MonitorTeams non optimisé, vidéo du navigateur, encodage logicielImprimante absenteStratégies d'impression, journal du VDACréation automatique désactivée, pilote non universelPériphérique non vuStratégie USB, liste d'autorisationRègle USB, canal non autorisé Outils : Citrix HDX Monitor (état détaillé des canaux), Citrix Workspace app Log Collector, et la vue session de Monitor (CTX-03).\n🔷 En contexte Citrix\nPour des clients légers, aligne la version de Workspace app (ou du client du système, comme eLux) sur les fonctions dont tu as besoin : SlimCore, codecs, EDT.\nSur des liaisons de mauvaise qualité, le mode tolérant aux pertes d'EDT garde audio et image utilisables : à tester sur les sites distants.\nÀ retenir Canaux virtuels → ICA → fiabilité de session (2598) → EDT ou TCP → TLS/DTLS.Vérifier le transport avec ctxsession -v.Graphisme par défaut correct sans GPU ; H.265 / AV1 avec GPU.Teams : SlimCore via le plugin client, vérifier la bannière « Optimisé ».Liste d'autorisation des canaux virtuels : sécurité, mais à maintenir. Auto-évaluation Q1. Quelle différence entre fiabilité de session et reconnexion automatique du client ?→ La fiabilité de session maintient la session pendant une coupure courte (180 s) sans rien afficher d'autre qu'un gel ; la reconnexion automatique reconnecte le client après une coupure plus longue.\nQ2. Comment savoir si une session utilise EDT ?→ Avec ctxsession -v dans la session, ou dans les détails de session de Monitor.\nQ3. Teams est lent et le CPU du VDA élevé pendant les appels. Hypothèse ?→ L'optimisation n'est pas active (plugin absent, version client trop ancienne, canal non autorisé) : le média est traité sur le VDA.\nQ4. Quand utiliser Build to lossless ?→ Quand l'image doit être nette au pixel près une fois stable (texte, plans, imagerie), avec un débit suffisant.\nPour aller plus loin Transport adaptatifGraphisme HDXNouveau Teams et VDI (Microsoft)Optimisation Teams (Citrix) ","permalink":"https://melior.guru/fiches/ctx-08/","summary":"Fiche d\u0026rsquo;apprentissage HDX : pile ICA (canaux virtuels, fiabilité de session, transport adaptatif EDT/TCP, chiffrement), graphisme Thinwire et codecs (H.264, H.265, AV1), optimisation du nouveau Teams (SlimCore), impression, périphériques et presse-papiers, liste d\u0026rsquo;autorisation des canaux virtuels, outils de diagnostic.","title":"HDX et protocole ICA — Transport, graphisme, Teams et redirections"},{"content":"ℹ️ À savoir · En bref\nLes stratégies Citrix règlent le comportement HDX (redirections, graphisme, audio, impression, sécurité) et du VDA. Elles se définissent dans Studio ou dans des GPO Active Directory (avec l'extension Citrix).\nComme les GPO : plusieurs stratégies peuvent s'appliquer, et pour chaque paramètre la plus prioritaire gagne.\nObjectifs de la fiche Comprendre l'ordre d'application et la priorité.Cibler précisément avec les filtres.Connaître les paramètres les plus utilisés.Trouver quelle stratégie s'applique réellement. Où les définir et dans quel ordre Comme les GPO : appliquées de la plus faible à la plus forte, le dernier réglage d'un paramètre l'emporte SourceAvantagesLimitesStudio (Web Studio / console DaaS)Filtres Citrix complets (groupe de mise à disposition, Access Control, balise), visibles par les admins CitrixMoins prioritaires que les GPO de domaineGPO (extension Citrix dans la console GPMC)Gérées avec le reste de l'AD, forte prioritéSuppose l'extension installée, mélange possible avec d'autres équipesWEMCertains réglages (Profile Management, optimisation) dans la console WEMNe pas configurer le même paramètre à deux endroits ⚠️ Piège\nLe cas classique : un paramètre réglé dans Studio « ne marche pas » parce qu'une GPO d'OU règle le même paramètre autrement. Choisis une source principale (souvent Studio) et documente les exceptions.\nPriorités et paramètres Dans Studio, chaque stratégie a une priorité (1 = la plus forte). La stratégie Unfiltered (sans filtre) est toujours la plus faible : elle sert de socle.Un paramètre non configuré n'écrase rien : seuls les paramètres définis entrent en concurrence.Paramètres ordinateur : appliqués au démarrage du VDA puis à chaque rafraîchissement (environ toutes les 90 minutes).Paramètres utilisateur : appliqués à l'ouverture de session (certains aussi à la reconnexion) ; ils dépendent de l'utilisateur et du poste client. Les filtres FiltreExemple d'usageGroupe de mise à disposition / typeRéglages propres aux serveurs d'applications ou aux bureauxUtilisateur ou groupePresse-papiers autorisé seulement pour un groupeUnité d'organisationMachines d'une OU (par site, par usage)Balise (tag)Machines balisées « GPU » ou « Recette »Adresse IP du client / nom du clientRègles différentes pour les clients légers (TC-*) ou un réseauAccess ControlConnexion via NetScaler Gateway (et stratégie de session précise) : restreindre les redirections en externe 💡 Astuce\nLes filtres d'une même stratégie se combinent : entre filtres de types différents c'est un ET, entre valeurs du même type c'est un OU. Un filtre peut aussi être en mode « refuser » pour exclure.\nModèles et paramètres clés Studio fournit des modèles (expérience haute définition, évolutivité serveur, bande passante WAN optimisée, sécurité et contrôle…) : un bon point de départ à adapter, jamais à appliquer tel quel sans lecture.\nParamètrePourquoi le réglerClient clipboard redirection (+ restrictions de format)Fuite de données : limiter le sens et les formatsClient drive redirectionDésactiver en externe, autoriser au cas par casAuto-create client printers / Universal print driver usageMaîtriser les pilotes et la durée d'ouverture de sessionClient USB device redirection (+ règles)Autoriser seulement les classes utilesSession reliability / Auto client reconnectComportement en coupure réseauVirtual channels allow listBloquer les canaux virtuels non autorisésSession limits (déconnexion, inactivité)Libérer les ressources sur les serveurs multisessionRendezvous protocolActiver Rendezvous avec le Gateway service Savoir ce qui s\u0026rsquo;applique Modélisation dans Studio (Group Policy Modeling / Résultats) : simule un utilisateur, une machine et un client.Sur le VDA, gpresult /h rapport.html montre les GPO (y compris les paramètres Citrix venant de l'AD).Les paramètres résultants sont écrits dans le registre du VDA (HKLM\\SOFTWARE\\Policies\\Citrix, une branche par session pour les paramètres utilisateur).Monitor (détails de session) et HDX Monitor confirment l'état effectif d'une redirection. PowerShell\n# Lister les stratégies Studio (SDK Citrix, sur site) Add-PSSnapin Citrix.Common.GroupPolicy New-PSDrive -Name Site -PSProvider CitrixGroupPolicy -Root \\ -Controller ddc01.corp.local Get-ChildItem Site:\\User | Select-Object Name, Priority, Enabled Get-ChildItem Site:\\Computer | Select-Object Name, Priority, Enabled 🔷 En contexte Citrix\nUne organisation lisible : Unfiltered = socle commun ; puis une stratégie par usage (« Externe – restrictions », « Serveurs d'apps », « Clients légers »), nommées et décrites.\nAvant toute migration (vers DaaS ou une nouvelle version), fais l'inventaire des stratégies et compare-les : c'est souvent là que se cachent les écarts de comportement.\nÀ retenir Ordre : GPO locale → Studio → GPO de domaine → GPO d'OU ; le dernier réglage gagne.Dans Studio : priorité 1 la plus forte, Unfiltered la plus faible.Ordinateur au démarrage et toutes les ~90 min ; utilisateur à l'ouverture de session.Filtres : ET entre types, OU entre valeurs d'un même type.Modélisation, gpresult et registre pour savoir ce qui s'applique. Auto-évaluation Q1. Un paramètre est autorisé dans Studio mais refusé par une GPO d'OU. Qui gagne ?→ La GPO d'OU : elle est appliquée après les stratégies Studio.\nQ2. À quoi sert la stratégie Unfiltered ?→ C'est le socle de priorité la plus faible, appliqué à tous ; les autres stratégies le précisent ou l'écrasent.\nQ3. Comment restreindre la redirection des lecteurs uniquement pour les connexions externes ?→ Une stratégie avec un filtre Access Control (connexion via NetScaler Gateway) qui interdit la redirection des lecteurs clients.\nQ4. Deux filtres « utilisateur » (groupe A, groupe B) et un filtre « groupe de mise à disposition » : comment se combinent-ils ?→ (groupe A OU groupe B) ET le groupe de mise à disposition.\nPour aller plus loin Stratégies Citrix (DaaS)Référence des paramètresComparer, hiérarchiser, modéliser ","permalink":"https://melior.guru/fiches/ctx-09/","summary":"Fiche d\u0026rsquo;apprentissage sur les stratégies Citrix : où les définir (Studio, GPO, WEM), ordre d\u0026rsquo;application et priorités, paramètres utilisateur et ordinateur, filtres (groupe de mise à disposition, utilisateur, OU, balise, adresse client, Access Control), modèles, paramètres clés, modélisation et dépannage.","title":"Stratégies Citrix — Priorités, filtres, modèles et dépannage"},{"content":"ℹ️ À savoir · En bref\nLe Linux VDA publie des bureaux et applications Linux dans Citrix comme un VDA Windows : même console, mêmes catalogues, même Workspace app.\nLa difficulté n'est pas Citrix mais l'intégration Linux / Active Directory : DNS, Kerberos, heure et jonction au domaine doivent être parfaits.\nObjectifs de la fiche Connaître les distributions et méthodes d'intégration AD prises en charge.Installer et configurer un Linux VDA.Préparer une image Linux pour MCS.Dépanner l'enregistrement et l'ouverture de session. Architecture et prérequis Le service ctxvda s'enregistre auprès des connecteurs ; ctxhdx porte les sessions ; l'intégration AD fournit Kerberos ÉlémentVersion 2603 / 2607 LTSRDistributionsUbuntu 22.04 et 24.04 ; RHEL et Rocky 8.10, 9.x, 10 ; SUSE 15.7 ; Debian 12 et 13Intégration ADSSSD et winbind (toutes distributions), Centrify, Quest ; PBIS sur certaines seulementPrérequisASP.NET Core Runtime 10 installé avant le VDA, un environnement de bureau (GNOME, MATE, KDE…)PlateformesvSphere, Azure, AWS, GCP, XenServer, Nutanix, Hyper-V, physiqueModeBureau partagé (multisession) ou VDI (une session par machine) ⚠️ Piège\nSur Ubuntu, n'utilise pas le noyau ou le Xorg HWE ; reste sur une distribution et une version listées, sinon le support Citrix refusera le dossier.\nInstaller un VDA (machine unique) installation\n# Ubuntu : paquet puis dépendances sudo dpkg -i xendesktopvda_*.deb ; sudo apt-get install -f -y # Configuration interactive ou par variables (exemple non interactif) export CTX_XDL_DDC_LIST=\u0026#39;cc1.corp.local cc2.corp.local\u0026#39; export CTX_XDL_VDI_MODE=\u0026#39;N\u0026#39; # N = bureau partagé, Y = VDI export CTX_XDL_DESKTOP_ENVIRONMENT=\u0026#39;gnome\u0026#39; export CTX_XDL_START_SERVICE=\u0026#39;Y\u0026#39; sudo -E /opt/Citrix/VDA/sbin/ctxsetup.sh --silent # Alternative : assistant \u0026#34;easy install\u0026#34; (dépendances + jonction AD + configuration) sudo /opt/Citrix/VDA/sbin/ctxinstall.sh Intégration Active Directory MéthodeRemarquesSSSDStandard actuel sur RHEL / Rocky / Ubuntu ; jonction avec realm join ou adcliWinbind (Samba)Très répandu, nécessaire pour certains scénarios (partages, fichiers Samba)Centrify / QuestSolutions commerciales, gestion centralisée par GPOPBISNon pris en charge sur RHEL 9 / 10 et Rocky 9 / 10 : à éviter pour un nouveau projet 💡 Astuce\nVérifie dans l'ordre : heure (chrony vers les DC), DNS (résolution directe et inverse des contrôleurs et du VDA), kinit utilisateur@CORP.LOCAL, klist, puis id utilisateur.\nUne zone DNS parasite (zone de recherche ou domaine homonyme) peut détourner la recherche du KDC : contrôle dig _kerberos._tcp.corp.local SRV.\nMCS pour Linux Le principe est celui de CTX-05, mais la jonction au domaine se fait sur chaque VM créée, à partir de mcs.conf et de modèles de configuration AD.\npréparer l'image\n# /etc/xdl/mcs/mcs.conf (extrait) AD_INTEGRATION=sssd # winbind | sssd | centrify | pbis WORKGROUP=CORP # nom NetBIOS (casse respectée) dns1=10.0.0.10 dns2=10.0.0.11 NTP_SERVER=10.0.0.10 VDI_MODE=N Use_AD_Configuration_Files_Of_Current_VDA=N # Y : reprendre la config AD du VDA courant # Appliquer la configuration MCS à l\u0026#39;image sudo /opt/Citrix/VDA/sbin/deploymcs.sh RèglePourquoiImage non jointe au domaine (sauf si l'on reprend volontairement la config du VDA courant)Chaque VM rejoint le domaine elle-même au premier démarrageModèles AD dans /etc/xdl/ad_join/Adapter sssd.conf.tmpl, krb5 et smb à ton domaine en gardant les variables ($REALM, $WORKGROUP)Valeurs de registre persistantesDans /etc/xdl/mcs/mcs_local_setting.regMise à jourMettre à jour le paquet sur l'image, ajuster mcs.conf, nouveau snapshot, mettre à jour le catalogue Dépanner commandes utiles\nsystemctl status ctxvda ctxhdx # services Citrix sudo /opt/Citrix/VDA/bin/xdping # contrôle de l\u0026#39;environnement (DNS, Kerberos, ports…) sudo /opt/Citrix/VDA/bin/ctxreg list -k \u0026#34;HKLM\\Software\\Citrix\\VirtualDesktopAgent\u0026#34; # liste des contrôleurs… ls /var/log/xdl/ # journaux du VDA (vda.log, hdx.log…) sudo /opt/Citrix/VDA/bin/xdlcollect.sh # collecte pour le support SymptômeCause probableParadeVDA non enregistréHeure, DNS inverse, Kerberos, liste des contrôleursxdping, klist -k (keytab), chrony, liste des DDCMachines MCS non jointesImage déjà jointe, mcs.conf incohérent, modèles AD non adaptésImage propre, revoir mcs.conf et /etc/xdl/ad_join/, refaire le snapshotÉchec Kerberos aléatoireZone DNS parasite, KDC injoignableVérifier les enregistrements SRV et la recherche DNSÉcran noir ou session ferméeBureau non pris en charge, Wayland, profil utilisateurBureau listé (Xorg), journaux hdx, créer un utilisateur de testSession refuséeParamètre de sécurité HDX non pris en charge par le Linux VDAComparer les stratégies appliquées aux fonctions documentées du Linux VDA 🔷 En contexte Citrix\nPour un catalogue Ubuntu MCS : image propre non jointe, mcs.conf relu ligne par ligne, DNS sans zone parasite. Ce sont les trois causes typiques des échecs de jonction et d'enregistrement.\nTeste avec un catalogue de recette d'une machine avant de déployer : un cycle MCS Linux est rapide à refaire, une production cassée beaucoup moins.\nÀ retenir Même console et même client que Windows ; l'effort est sur Linux + AD.SSSD ou winbind ; heure, DNS et Kerberos d'abord.MCS : image non jointe, mcs.conf + deploymcs.sh, jonction par VM.Distributions et bureaux listés uniquement (pas de HWE sur Ubuntu).xdping, journaux /var/log/xdl/ et xdlcollect.sh pour dépanner. Auto-évaluation Q1. Pourquoi l'image MCS Linux ne doit-elle pas être jointe au domaine ?→ Chaque VM rejoint le domaine au premier démarrage avec sa propre identité, à partir de mcs.conf et des modèles AD ; une image déjà jointe produit des identités incohérentes.\nQ2. Quelles vérifications avant d'accuser Citrix quand un Linux VDA ne s'enregistre pas ?→ Heure synchronisée, DNS direct et inverse, kinit / klist (keytab), puis xdping et la liste des contrôleurs.\nQ3. Où se configure la méthode d'intégration AD pour MCS ?→ Dans /etc/xdl/mcs/mcs.conf, variable AD_INTEGRATION (sssd, winbind, centrify, pbis).\nQ4. Que faut-il installer avant le paquet Linux VDA en 2603 ?→ ASP.NET Core Runtime 10 (et un environnement de bureau).\nPour aller plus loin Linux VDA : configuration requiseLinux VDA et MCSEasy install ","permalink":"https://melior.guru/fiches/ctx-10/","summary":"Fiche d\u0026rsquo;apprentissage Citrix Linux VDA : distributions prises en charge, architecture, installation (paquet, easy install, ctxsetup.sh), intégration Active Directory (SSSD, winbind, Centrify), création par MCS (mcs.conf, deploymcs.sh, image non jointe), mise à jour, dépannage de l\u0026rsquo;enregistrement et des sessions (DNS, Kerberos, xdping, journaux).","title":"Linux VDA — Installation, intégration AD, MCS et dépannage"},{"content":"ℹ️ À savoir · En bref\nAutoscale allume et éteint les machines d'un groupe de mise à disposition selon une planification et la charge réelle. Dans un cloud, une machine éteinte (désallouée) ne coûte plus que son stockage : c'est le premier levier d'économie.\nIl est désactivé par défaut sur un nouveau groupe de mise à disposition.\nObjectifs de la fiche Comprendre comment Autoscale décide d'allumer ou d'éteindre.Régler planification, tampon et délais sans pénaliser les utilisateurs.Utiliser le drainage et les délais de session pour libérer les machines.Connaître les leviers de coût côté Azure. La logique Planification + charge + tampon → allumer, drainer, puis éteindre NotionDéfinitionPlanificationNombre (ou pourcentage) de machines allumées par créneau horaire, par jourHeures de pointeCréneaux où un tampon plus large s'appliqueTampon de capacitéCapacité libre maintenue en plus de la charge : % de l'index de charge total (multisession) ou % des machines (mono-session)Index de charge0 à 10 000 par machine multisession ; 10 000 = pleine (250 sessions par défaut si aucune règle de charge)Délai d'arrêtTemps avant d'éteindre une machine devenue inutile (30 min par défaut, 0 à 60)DrainageMachine en trop : plus de nouvelles sessions (sauf si plus rien d'autre), éteinte à 0 session 💡 Astuce\nRègle la stratégie de charge des serveurs (nombre maximal de sessions, CPU, mémoire) avant Autoscale : un index de charge réaliste rend le tampon fiable.\nSelon le type de groupe TypeCe qu'Autoscale piloteÀ régler aussiMultisessionNombre de serveurs allumés selon l'index de charge et le tamponRègles de charge, délais de session (déconnexion, inactivité)Mono-session aléatoireMachines libres disponibles (pool)Arrêt après déconnexion / fermeture, tampon en %Mono-session statiqueAllumage aux heures de travail, arrêt ou suspension si non utiliséeAction si l'utilisateur ne se connecte pas après allumage Libérer les machines plus vite Délais de session dynamiques : des délais de déconnexion et d'inactivité plus courts s'appliquent aux machines en drainage, pour qu'elles se vident.Stratégies de limite de session : fermer les sessions déconnectées après un délai raisonnable (ex. 2 h) et prévenir les utilisateurs.Machines balisées pour le débordement (cloud burst) : allumées seulement quand les machines non balisées (par ex. sur site) sont pleines.Redémarrages planifiés en dehors des heures de pointe, coordonnés avec les mises à jour d'image (CTX-05). PowerShell\n# Activer Autoscale et régler un groupe (SDK Citrix) Set-BrokerDesktopGroup -Name \u0026#34;DG-W25-Apps\u0026#34; -AutoscalingEnabled $true ` -PeakBufferSizePercent 15 -OffPeakBufferSizePercent 5 -PowerOffDelay 20 # Machines planifiées : lundi-vendredi, 8 h - 18 h en pointe New-BrokerPowerTimeScheme -DesktopGroupUid (Get-BrokerDesktopGroup \u0026#34;DG-W25-Apps\u0026#34;).Uid ` -Name \u0026#34;Semaine\u0026#34; -DaysOfWeek Weekdays ` -PeakHours (0..23 | ForEach-Object { $_ -ge 8 -and $_ -lt 18 }) ` -PoolSize (0..23 | ForEach-Object { if ($_ -ge 7 -and $_ -lt 19) { 4 } else { 1 } }) Leviers de coût dans Azure LevierEffetDésallocationUne VM arrêtée par Citrix est désallouée : plus de facturation du calculType de disque à l'arrêtPasser le disque en HDD standard quand la VM est éteinteDisque OS éphémèrePas de disque géré à payer pour l'OS (non persistant, tailles compatibles)HibernationBureaux mono-session : économies hors usage avec reprise rapideRéservations / plan d'économiesPour le socle toujours allumé ; Autoscale pour la partie variableBonne taille de VMMoins de grosses VM multisession plutôt que beaucoup de petites, selon la charge mesurée ⚠️ Piège\nUn tampon trop petit ou un démarrage trop tardif provoque des ouvertures de session lentes le matin (machines en cours de démarrage). Démarre le pool 30 à 60 min avant l'arrivée des utilisateurs et regarde la phase « Démarrage machine » dans Monitor.\nSuivre et ajuster Autoscale insights (Monitor) : machines allumées vs utilisées, charge, alertes et économies estimées (à partir du coût horaire saisi).Ajuster chaque mois : pointe réelle, tampon, délai d'arrêt, sessions déconnectées qui bloquent l'arrêt.Comparer avec la facture du cloud (balises Azure par catalogue) pour vérifier les gains. 🔷 En contexte Citrix\nSur un parc multisession Azure, le trio gagnant : règles de charge réalistes, tampon de 10 à 20 % en pointe, délais de session dynamiques pour vider les serveurs le soir.\nPendant un Local Host Cache, aucune opération d'alimentation n'est possible (CTX-04) : garde un socle de machines allumées suffisant.\nÀ retenir Autoscale = planification + charge + tampon ; désactivé par défaut.Index de charge 0-10 000 ; règles de charge à régler d'abord.Drainage puis arrêt après délai ; délais de session pour vider les machines.Azure : désallocation, disques, hibernation, réservations pour le socle.Autoscale insights pour mesurer et ajuster. Auto-évaluation Q1. Que signifie un index de charge de 10 000 ?→ La machine multisession est pleine : elle n'accepte plus de nouvelles sessions.\nQ2. Pourquoi une machine en drainage ne s'éteint-elle pas ?→ Il reste des sessions (souvent déconnectées) : elle ne s'éteint qu'à 0 session. Délais de session dynamiques ou limites de déconnexion pour la vider.\nQ3. À quoi servent les machines balisées dans Autoscale ?→ Au débordement : elles ne sont allumées que lorsque les machines non balisées sont pleines (par ex. cloud en complément du sur site).\nQ4. Les utilisateurs se plaignent de lenteurs à 8 h. Que vérifies-tu ?→ La planification et le tampon du matin : les machines doivent être allumées avant l'arrivée ; phase « Démarrage machine » dans Monitor.\nPour aller plus loin Autoscale : prise en mainAutoscale : planification et chargeGestion de l'alimentation Azure ","permalink":"https://melior.guru/fiches/ctx-11/","summary":"Fiche d\u0026rsquo;apprentissage Citrix Autoscale : principe (planification et charge), heures de pointe, tampon de capacité, index de charge, drainage et délai d\u0026rsquo;arrêt, machines balisées pour le débordement, délais de session, actions sur déconnexion, leviers de coût Azure (désallocation, disques, hibernation, réservations), suivi dans Monitor.","title":"Autoscale et coûts cloud — Gestion de l'alimentation des machines Citrix"},{"content":"ℹ️ À savoir · En bref\nAvec une authentification SAML (Entra ID, Okta, ADFS) ou par carte sans mot de passe, Citrix ne connaît jamais le mot de passe Windows : impossible d'ouvrir la session Windows sur le VDA sans redemander l'identifiant.\nFAS résout ça : il fait émettre à la volée un certificat de type carte à puce pour l'utilisateur, que le VDA utilise pour ouvrir la session Windows. L'utilisateur ne voit qu'un seul écran de connexion.\nObjectifs de la fiche Comprendre le flux FAS de bout en bout.Déployer les modèles de certificats, l'autorisation et les règles.Configurer StoreFront ou Citrix Workspace pour utiliser FAS.Savoir quand se passer de FAS avec le SSO Entra natif (Windows Server 2025).Sécuriser et dépanner. Architecture et flux StoreFront affirme l'identité, FAS obtient un certificat de l'AC, le VDA s'en sert pour ouvrir la session ComposantRôleServeur FASServeur dédié (pas un contrôleur) : autorité d'enregistrement auprès de l'AC, stocke clés et certificats utilisateurAutorité de certificationAD CS d'entreprise : émet le certificat d'autorité d'enregistrement de FAS puis les certificats utilisateurStoreFront / WorkspaceReçoit l'assertion SAML et demande à FAS de préparer le certificat de l'utilisateurVDARécupère le certificat auprès de FAS et ouvre la session Windows comme avec une carte à puceActive DirectoryCompte utilisateur correspondant (UPN identique à l'identité SAML), connexion par carte à puce autorisée sur les DC Mise en place ÉtapeDétail1. Installer FASSur 2 serveurs ou plus, avec la console d'administration FAS2. Déployer les modèlesCitrix_RegistrationAuthority (deux modèles d'autorisation) et Citrix_SmartcardLogon (certificat utilisateur) ; droits d'administrateur d'entreprise3. Publier sur l'ACPublier les modèles sur une AC d'entreprise, permissions des serveurs FAS4. Autoriser FASDemande du certificat d'autorité d'enregistrement, à approuver sur l'AC (valable environ 2 ans : à surveiller)5. Créer les règlesQuels StoreFront peuvent affirmer une identité, quels VDA peuvent récupérer les certificats, quels utilisateurs sont concernés6. GPOADMX FAS : liste des serveurs FAS (« Federated Authentication Service ») appliquée aux StoreFront, aux VDA et aux serveurs FAS PowerShell\n# StoreFront : activer FAS sur le magasin $store = Get-STFStoreService -VirtualPath \u0026#34;/Citrix/Store\u0026#34; $auth = Get-STFAuthenticationService -StoreService $store Set-STFClaimsFactoryNames -AuthenticationService $auth -ClaimsFactoryName \u0026#34;FASClaimsFactory\u0026#34; Set-STFStoreLaunchOptions -StoreService $store -VdaLogonDataProvider \u0026#34;FASLogonDataProvider\u0026#34; # Contrôleurs : faire confiance aux demandes relayées par StoreFront Set-BrokerSite -TrustRequestsSentToTheXmlServicePort $true # VDA : vérifier que la GPO est bien appliquée reg query \u0026#34;HKLM\\SOFTWARE\\Policies\\Citrix\\Authentication\\UserCredentialService\\Addresses\u0026#34; ℹ️ À savoir\nAvec Citrix Workspace (cloud), FAS se connecte à Citrix Cloud depuis sa console et s'active dans la configuration de l'authentification de Workspace : même principe, sans StoreFront à configurer.\nCertificats en session Une règle FAS peut autoriser l'usage du certificat dans la session (carte à puce virtuelle) : accès à des sites ou applications qui demandent une authentification par certificat.À réserver aux besoins identifiés : le certificat devient alors utilisable par les applications de l'utilisateur. Sécurité Les serveurs FAS sont aussi sensibles que l'AC : quiconque les contrôle peut ouvrir une session au nom de n'importe quel utilisateur autorisé. Les traiter comme des serveurs de niveau 0.Clé de l'autorité d'enregistrement sur TPM ou HSM (demande manuelle du certificat).Règles restreintes : seuls les StoreFront connus, seuls les VDA concernés, groupes d'utilisateurs explicites (pas « tout le monde », pas les administrateurs du domaine).Journaux FAS et AC surveillés (émissions massives de certificats). Sans FAS : le SSO Microsoft Entra natif Depuis 2025-2026, Citrix propose un SSO Entra natif : sur des VDA récents, Windows accepte directement un jeton Entra (protocole d'authentification Remote Desktop de Microsoft Entra) à l'ouverture de session. Plus de certificat, donc plus de FAS ni d'autorité de certification pour ces machines.\nCritèreFASSSO Entra natifMécanismeCertificat de type carte à puce émis par l'ACJeton Entra pour l'ouverture de session WindowsInfrastructureServeurs FAS + AD CS + règlesApplications Entra (ressource et client Citrix), aucune PKIIdentité des VDAJointes à l'AD (ou hybrides)Jointes à Entra ID ou hybridesOS des VDAToutes versions prises en chargeWindows Server 2025 (KB5073379 ou plus récent) ou Windows 11 24H2 (KB5065789+) ; pas 2019 / 2022VDA / clientToutes versions FASVDA 2507+ ; Workspace app Windows 2507+ (Linux / Mac 2508+, HTML5 et mobiles 2511+)PortailStoreFront ou WorkspaceDaaS : StoreFront Cloud avec IdP Entra ID ou SAML. Sur site : en préversion (hybride, StoreFront récent)Accès conditionnelSur l'IdP (portail)Aussi à l'ouverture de session : cibler l'application Citrix Resource mise en place (résumé)\n# 1. Citrix Cloud \u0026gt; Gestion des identités et des accès \u0026gt; Authentification \u0026gt; Entra ID : # « Set up Microsoft Entra SSO » (applications Citrix-Workspace-Resource et Citrix-Workspace) # 2. Entra : activer le protocole d\u0026#39;authentification RDS sur Citrix-Workspace-Resource, # approuver l\u0026#39;application cliente ; pour les VDA hybrides, objet serveur Kerberos Entra dans l\u0026#39;AD # 3. StoreFront Cloud (module PowerShell fourni par Citrix, principal de service Citrix Cloud) Set-StoreConfigurations -StoreUrl \u0026#34;https://\u0026lt;magasin\u0026gt;.cloud.com\u0026#34; -ClientId \u0026#34;\u0026lt;id\u0026gt;\u0026#34; -ClientSecret \u0026#34;\u0026lt;secret\u0026gt;\u0026#34; -AzureAdSsoEnabled $true # 4. Groupe de mise à disposition (SDK Remote PowerShell) Get-BrokerDesktopGroup -Name \u0026#34;DG-W25\u0026#34; | Set-BrokerDesktopGroup -MachineLogOnType \u0026#34;HybridAzureAd\u0026#34; # ou \u0026#34;AzureAd\u0026#34; ⚠️ Piège\nLa reconnexion automatique du client est désactivée avec ce mode (la fiabilité de session reste active) ; au verrouillage, l'écran Windows demande un mot de passe : activer « Disconnect remote session on lock for Microsoft identity platform authentication » pour un fonctionnement sans mot de passe.\nLe réglage Windows « Autoriser le chargement de SSP et AP personnalisés dans LSASS » doit rester activé (la base de sécurité Intune le désactive). Les groupes privilégiés (Domain Admins) n'ont pas le SSO par défaut sur les VDA hybrides.\nLes affectations doivent cibler des identités Entra (utilisateurs ou groupes Entra), pas des groupes AD.\n💡 Astuce\nLes deux modèles cohabitent dans le même tenant : SSO Entra natif pour les nouveaux catalogues Windows Server 2025 hybrides ou Entra, FAS pour les VDA plus anciens ou purement AD. On ne retire FAS que lorsque plus aucun catalogue n'en dépend.\nDépanner SymptômeCause probableParadeÉcran de connexion Windows sur le VDAGPO FAS absente sur le VDA (clé Addresses vide)Appliquer la GPO aux VDA, gpupdate, vérifier la clé« Nom d'utilisateur ou mot de passe incorrect »Changement d'AC, autorisation expirée, certificat non approuvéConsole FAS : état de l'autorisation et de l'ACAccès refusé côté FASRègle qui n'autorise pas ce StoreFront ou ce VDARevoir les règles (StoreFront, VDA, utilisateurs)Échec en multi-domainesDroits de lecture des comptes dans le domaine des utilisateursAjouter StoreFront, FAS et VDA au groupe « Windows Authorization Access » du domaineOuverture de session lenteVérification de révocation (CRL) injoignableRendre la CRL joignable depuis les DC et les VDAUtilisateur inconnuIdentité SAML ≠ UPN AD (sAMAccountName envoyé)NameID = UPN ou e-mail ; comptes fantômes alignés 🔷 En contexte Citrix\nAvec Entra ID comme IdP (CTX-06, M365-ENT-02), FAS permet d'appliquer l'accès conditionnel et le MFA d'Entra à Citrix sans double saisie du mot de passe Windows.\nHeure synchronisée entre FAS, contrôleurs, StoreFront et VDA : un décalage casse la chaîne de certificats comme Kerberos.\nÀ retenir FAS = certificat de type carte à puce émis à la volée pour ouvrir la session Windows après SAML.Modèles Citrix_RegistrationAuthority et Citrix_SmartcardLogon sur une AC d'entreprise.GPO FAS sur StoreFront, VDA et FAS ; règles restreintes.StoreFront : FASClaimsFactory + FASLogonDataProvider ; confiance XML activée.Serveurs FAS = niveau 0 ; clé sur TPM / HSM.Sans FAS : SSO Entra natif sur Windows Server 2025 / Windows 11 24H2, VDA 2507+, VDA Entra ou hybrides. Auto-évaluation Q1. Pourquoi FAS est-il nécessaire avec une authentification SAML ?→ Parce que Citrix ne reçoit pas le mot de passe Windows : FAS fournit un certificat qui permet au VDA d'ouvrir la session Windows sans le mot de passe.\nQ2. Le VDA affiche l'écran de connexion Windows au lieu d'ouvrir la session. Première vérification ?→ La GPO FAS sur le VDA : la clé HKLM\\SOFTWARE\\Policies\\Citrix\\Authentication\\UserCredentialService\\Addresses doit lister les serveurs FAS.\nQ3. Pourquoi traiter les serveurs FAS comme du niveau 0 ?→ Ils peuvent obtenir un certificat de connexion pour tout utilisateur autorisé par les règles : leur compromission équivaut à usurper ces utilisateurs.\nQ4. Peut-on se passer de FAS sur un catalogue Windows Server 2022 ?→ Non : le SSO Entra natif exige Windows Server 2025 (KB5073379+) ou Windows 11 24H2, un VDA 2507+ et des machines jointes à Entra ou hybrides. Pour 2022, FAS reste nécessaire.\nQ5. Quel attribut SAML doit correspondre au compte AD ?→ Le NameID doit être l'UPN (ou l'e-mail) correspondant à l'UPN du compte AD.\nPour aller plus loin Federated Authentication ServiceFAS avec Citrix WorkspaceSSO Microsoft Entra (DaaS, sans FAS)Cohabitation FAS et SSO Entra (CTX696865)Guide FAS (Carl Stalhood) ","permalink":"https://melior.guru/fiches/ctx-12/","summary":"Fiche d\u0026rsquo;apprentissage Citrix FAS : pourquoi (SAML sans mot de passe), architecture et flux (StoreFront/Workspace, serveur FAS, AD CS, VDA), modèles de certificats, autorisation, règles, GPO, configuration StoreFront et Citrix Cloud, certificats en session, sécurité (HSM, TPM), haute disponibilité et dépannage, et l\u0026rsquo;alternative sans FAS : SSO Microsoft Entra natif sur Windows Server 2025 / Windows 11 24H2.","title":"Federated Authentication Service — SSO Windows avec SAML et Entra ID"},{"content":"ℹ️ À savoir · En bref\nAu lieu d'une image maître par usage (bureau compta, bureau développeurs…), App Layering découpe l'image en couches réutilisables : un Windows, une plateforme, des applications. On assemble ensuite les images voulues à partir de ces briques.\nMettre à jour Chrome ou Windows = mettre à jour une couche puis republier toutes les images qui l'utilisent.\nObjectifs de la fiche Comprendre le rôle de chaque type de couche.Créer et versionner une couche d'application.Assembler et publier une image vers MCS ou PVS.Connaître les limites et les pièges. Les couches De bas en haut : OS, plateforme, applications, puis couches élastiques et utilisateur facultatives CoucheContenuRemarqueOSWindows (sans jonction au domaine), mises à jourUne par version de Windows ; base de toutes les autresPlateformeVDA, outils de l'hyperviseur, agents (sécurité, supervision), jonction au domaineUne par plateforme (vSphere, Azure…) ; toujours au-dessusApplicationUne application ou un petit groupe cohérentRéutilisable dans plusieurs imagesÉlastiqueCouche d'application montée à l'ouverture de session selon l'utilisateurÉvite de multiplier les images ; pas pour toutes les applisUtilisateurProfil et applications installées par l'utilisateur, persistantsUsage ciblé ; préférer un conteneur de profil (CTX-02) Le cycle de travail L'ELM crée une VM d'empaquetage, on installe, on finalise, puis on publie des modèles d'image ÉtapeDétailAppliance ELMMachine virtuelle avec console web : stocke les couches, pilote les créations et les publicationsConnecteursLiens vers vSphere, Azure, Nutanix, XenServer, PVS ou un partage : pour créer les VM d'empaquetage et publier les imagesCréer une coucheL'ELM fournit une VM d'empaquetage ; on installe l'application, on redémarre si besoin, puis on finaliseVersionnerAjouter une version à la couche (mise à jour) ; les anciennes versions restent disponiblesModèle d'imageChoix de la couche OS, de la plateforme et des applicationsPublierProduit une image prête pour MCS (sur l'hyperviseur ou dans Azure) ou un vDisk PVS 💡 Astuce\nInstalle dans la couche OS ce que toutes les images partagent (runtimes, polices, réglages Windows) et garde les couches d'applications petites et ciblées.\nOrdre de priorité des couches : en cas de conflit (même fichier, même clé), la couche de priorité la plus haute l'emporte ; la plateforme est toujours au-dessus.\nCe qui marche moins bien en couches Antivirus, pilotes, agents qui s'enregistrent avec un identifiant unique : plutôt dans la plateforme, avec leur procédure « image maître ».Applications avec services démarrant tôt ou pilotes noyau : à éviter en couche élastique.Licences liées à la machine : à tester, l'identité change à chaque publication.Microsoft Office et Teams : couches dédiées, avec les guides de l'éditeur. Points de vigilance récents ⚠️ Piège\nLes certificats Secure Boot de 2011 expirent en 2026 : les versions récentes d'App Layering (2603.5) prennent en charge le certificat Windows UEFI CA 2023. Mets l'appliance à jour avant de republier des images Secure Boot.\nGarde l'ELM à jour (versions fréquentes) et sauvegardé : il contient toutes tes couches. Une couche OS ancienne doit être mise à jour (nouvelle version) plutôt que recréée.\nImage Portability : exporter, préparer et publier une image de catalogue entre plateformes (par exemple de vSphere vers Azure).Accès à la console : contrôle strict des hôtes et chiffrements anciens désactivés par défaut dans les versions récentes. Dépanner SymptômeCause probableParadeApplication qui ne démarre pas dans l'imageConflit avec une autre couche, couche non finalisée proprementTester la couche seule, revoir la priorité, refaire la versionÉchec de publicationConnecteur (droits, stockage), espace sur l'ELMJournaux de la tâche dans la console, espace disque de l'applianceMachine non jointe au domaineJonction faite dans la couche OS au lieu de la plateformeJonction uniquement dans la plateformeCouche élastique absenteAffectation, partage des couches, application non compatibleVérifier l'affectation et le partage ; sinon passer en couche classique 🔷 En contexte Citrix\nApp Layering a du sens quand tu as plusieurs images qui partagent beaucoup d'applications. Avec une ou deux images, une image MCS bien documentée et automatisée (Ansible, ANS-03) est souvent plus simple.\nPour Azure, publie l'image vers le connecteur Azure puis utilise-la dans un catalogue MCS (CTX-05) avec des images préparées.\nÀ retenir OS + plateforme + applications = image ; élastiques et utilisateur en option.Jonction au domaine et VDA dans la plateforme, jamais dans l'OS.Mettre à jour une couche = nouvelle version, puis republier les modèles.Couches élastiques : pas pour les pilotes et les services précoces.ELM à jour (Secure Boot UEFI CA 2023) et sauvegardé. Auto-évaluation Q1. Dans quelle couche installer le VDA et l'agent antivirus ?→ Dans la couche plateforme, avec les outils de l'hyperviseur et la jonction au domaine.\nQ2. Comment mettre à jour Chrome dans 5 images ?→ Ajouter une version à la couche Chrome, puis republier les 5 modèles d'image qui l'utilisent.\nQ3. Quand préférer une couche élastique ?→ Pour une application utilisée par peu d'utilisateurs, sans pilote ni service précoce, afin d'éviter de créer une image de plus.\nQ4. Pourquoi App Layering n'est-il pas toujours rentable ?→ Il ajoute une appliance et un processus : avec une ou deux images, une image MCS automatisée est souvent plus simple.\nPour aller plus loin App Layering : documentationNouveautés App LayeringArchitecture de référence ","permalink":"https://melior.guru/fiches/ctx-13/","summary":"Fiche d\u0026rsquo;apprentissage Citrix App Layering : principe (une couche OS, une couche plateforme, des couches d\u0026rsquo;applications), Enterprise Layer Manager, connecteurs, cycle de création et de mise à jour d\u0026rsquo;une couche, modèles d\u0026rsquo;image et publication vers MCS ou PVS, couches élastiques et utilisateur, bonnes pratiques et pièges.","title":"Citrix App Layering — Construire les images par couches"},{"content":"ℹ️ À savoir · En bref\nAvec PVS, les machines n'ont pas de disque système : elles démarrent sur le réseau et lisent leur disque (le vDisk) en flux depuis les serveurs Provisioning. Des centaines de machines partagent un seul vDisk en lecture seule.\nLes écritures vont dans un cache d'écriture local (RAM + disque) effacé au redémarrage : chaque redémarrage repart d'une image propre.\nObjectifs de la fiche Comprendre l'architecture et le démarrage d'une cible.Gérer les vDisks : modes, versions, fusion.Choisir et dimensionner le cache d'écriture.Savoir quand choisir PVS plutôt que MCS. Architecture La cible démarre en réseau, se connecte aux serveurs PVS et lit le vDisk en flux ; ses écritures restent en local ComposantRôleFermeEnsemble de serveurs, magasins et vDisks partageant une base de données SQLServeur PVSStream Service : diffuse les vDisks aux cibles ; plusieurs serveurs pour la répartition et la haute disponibilitéMagasin (store)Emplacement des fichiers vDisk (VHDX) : disque local de chaque serveur (répliqué) ou partageCollection de machinesRegroupement des cibles (par catalogue, par site)Console / PowerShellAdministration ; assistants de création de machines pour Citrix (Citrix Virtual Desktops Setup Wizard) Démarrage d\u0026rsquo;une cible MéthodePrincipeRemarquePXE + TFTPDHCP indique le serveur de démarrage, la cible charge le chargeur PVS par TFTPSimple, dépend du DHCP et du réseau (relais entre VLAN)BDM (Boot Device Manager)Petit disque ou ISO de démarrage qui contient les adresses des serveursPas de PXE/TFTP ; recommandé quand le réseau est contraintUEFIPris en charge (PXE UEFI ou BDM)Vérifier Secure Boot et la compatibilité des certificats FluxPortsStreaming des vDisksUDP 6890 à 6909 (et 6910 pour la connexion)TFTP / PXEUDP 69 ; 67 et 4011Console et SOAPTCP 54321 et 54322Base de donnéesTCP 1433 (SQL Server) Les vDisks NotionDéfinitionMode standardPartagé, en lecture seule, avec cache d'écriture : le mode de productionMode privéLecture / écriture par une seule machine : pour créer ou réparer une imageVersion de maintenanceNouvelle version démarrée en écriture par une machine de maintenance pour installer les mises à jourTest puis productionLa version est promue en test (machines de test) puis en production (au prochain redémarrage des cibles)Fusion (merge)Consolide les versions en une nouvelle base pour éviter une chaîne trop longueLicences en volumePropriété du vDisk « KMS » pour réarmer correctement Windows et Office Maintenance → test → production, puis fusion régulière Le cache d\u0026rsquo;écriture TypeUsageRAM avec débordement sur disque (recommandé)Écritures en mémoire, puis débordement des blocs les moins utilisés sur un disque local (format VHDX différentiel)RAM seuleTrès rapide, mais la machine plante si la RAM du cache est pleineSur le serveurDéconseillé : charge disque et réseau sur les serveurs PVS ⚠️ Piège\nPrévois un disque de cache local suffisant : s'il est plein, les entrées-sorties du vDisk s'arrêtent et la machine se fige.\nLa RAM du cache s'ajoute à la mémoire nécessaire aux sessions : 256 Mo à 1 Go pour un bureau, 2 à 4 Go pour un serveur multisession sont des points de départ courants, à mesurer.\nMCS ou PVS ? CritèreMCSPVSInfrastructure en plusAucuneServeurs PVS, base SQL, réseau de démarrageCloud public (Azure, AWS)Natif, recommandéPossible mais plus complexeGrand nombre de machines sur siteStockage partagé sollicitéTrès efficace, peu de stockagePhysiqueNonOui (machines physiques en streaming)Mise à jour d'imageSnapshot + mise à jour du catalogueVersions de vDisk, retour arrière immédiat Dépanner SymptômeCause probableParadeLa cible ne démarre pasPXE / TFTP (DHCP, relais), BDM obsolèteCapturer le démarrage, mettre à jour la BDM, vérifier les options DHCPDémarrage lent, nouvelles tentativesRéseau (MTU, perte de paquets), serveur saturéStatistiques de la cible (« retries »), répartition entre serveursMachine figée après quelques heuresDisque de cache pleinAgrandir le disque, chercher l'application qui écrit beaucoupWindows non activéLicences en volume mal configurées sur le vDiskMode KMS sur le vDisk, procédure de réarmementvDisk différent selon le serveurRéplication des magasins incomplèteVérifier la réplication (console : état de réplication) 🔷 En contexte Citrix\nDans un projet Azure, MCS est le choix naturel ; PVS reste pertinent sur site pour de très grands parcs ou des machines physiques.\nAvant de mettre à jour vers Secure Boot avec les nouveaux certificats Microsoft (UEFI CA 2023), vérifie la compatibilité de ta version PVS et de la BDM.\nÀ retenir Pas de disque système : démarrage réseau (PXE/TFTP ou BDM) et vDisk en flux.Mode standard en production, privé pour réparer ; versions maintenance → test → production.Cache d'écriture : RAM avec débordement sur disque, disque local suffisant.Ports : UDP 6890-6910, TFTP 69, SOAP 54321-54322.MCS pour le cloud, PVS pour les grands parcs sur site et le physique. Auto-évaluation Q1. Que se passe-t-il si le disque de cache d'écriture est plein ?→ Les entrées-sorties du vDisk s'arrêtent : la machine se fige. Il faut un disque de cache suffisant.\nQ2. Comment appliquer les mises à jour Windows à un vDisk sans interruption ?→ Créer une version de maintenance, la démarrer sur une machine de maintenance, installer, promouvoir en test puis en production ; les cibles l'utilisent au redémarrage suivant.\nQ3. Pourquoi utiliser la BDM plutôt que PXE ?→ Pour ne pas dépendre de PXE/TFTP et du DHCP, notamment sur des réseaux segmentés ou contraints.\nQ4. Dans quel cas PVS est-il préférable à MCS ?→ Grands parcs sur site, machines physiques, besoin de réduire fortement le stockage.\nPour aller plus loin Citrix ProvisioningCache d'écriturePorts de communication Citrix ","permalink":"https://melior.guru/fiches/ctx-14/","summary":"Fiche d\u0026rsquo;apprentissage Citrix Provisioning (PVS) : principe du streaming, architecture (ferme, serveurs, magasins, base SQL), démarrage des cibles (PXE/TFTP, BDM), vDisks (modes standard et privé, versions, fusion), cache d\u0026rsquo;écriture en RAM avec débordement, ports, haute disponibilité, choix MCS ou PVS et dépannage.","title":"Citrix Provisioning — PVS : diffusion de vDisks en flux"},{"content":"ℹ️ À savoir · En bref\nSession Recording enregistre l'écran des sessions Citrix (comme une vidéo, en plus léger) et peut aussi journaliser des événements : clé USB branchée, fichier copié, application lancée, site visité…\nUsages typiques : accès des prestataires et des comptes à privilèges, preuves en cas d'incident, conformité réglementaire.\nObjectifs de la fiche Comprendre l'architecture et le stockage des enregistrements.Définir qui est enregistré et quels événements sont détectés.Respecter le cadre juridique (information des utilisateurs, RGPD).Rechercher et rejouer un enregistrement. Architecture L'agent demande la stratégie au broker et envoie les données au Storage Manager ; les lecteurs interrogent le broker ComposantRôleAgentSur chaque VDA : capture la session et les événements selon la stratégieServeur Session RecordingBroker (stratégies, autorisations, recherche) et Storage Manager (écriture des fichiers .icl), sur IISStockagePartage ou disque recevant les fichiers d'enregistrement ; archivage et purge selon la rétentionBase SQLMétadonnées : sessions, utilisateurs, événements, index de rechercheLecteursPlayer Windows et lecteur web : recherche, lecture, navigation par événementService Session Recording (cloud)Gestion centralisée des serveurs et stratégies depuis Citrix Cloud Les stratégies TypeCe qu'elle décideExempleEnregistrementQui est enregistré, avec ou sans notification, écran et/ou événementsEnregistrer le groupe « Prestataires » avec notificationDétection d'événementsQuels événements journaliser, pour quel périmètreClés USB, transferts de fichiers, presse-papiers sur les serveurs d'administrationRéponse aux événementsQue faire quand un événement survientAlerte e-mail, démarrer l'enregistrement de l'écran, verrouiller ou fermer la session Événements détectables (exemples)PériphériquesInsertion de stockage USB, transferts de fichiers entre VDA et poste clientApplicationsDémarrage, arrêt, échec, installation ou désinstallationFichiersCréation, renommage, suppression, déplacementNavigation et affichageSites web, fenêtre au premier plan, fenêtres contextuelles, impressionSystèmePresse-papiers, registre, comptes utilisateurs, connexions RDP, inactivité, performances 💡 Astuce\nPour les applications, limite la détection aux applications utiles : sinon les enregistrements se remplissent d'événements sans intérêt et la recherche devient inutilisable.\nCadre juridique ⚠️ Piège\nEn France, enregistrer l'activité des salariés impose une finalité légitime et proportionnée, l'information préalable des personnes, l'information des représentants du personnel et une durée de conservation limitée (RGPD, Code du travail). Fais valider par le DPO et le service juridique avant d'activer.\nActive la notification à l'ouverture de session et restreins l'accès aux lecteurs à un petit groupe, dont chaque consultation est journalisée.\nDimensionnement et exploitation Volume : il dépend surtout de l'activité à l'écran (vidéo, défilement) ; enregistrer les événements seuls est beaucoup plus léger que l'écran.Stockage dédié, rétention et archivage automatisés, sauvegarde de la base.Plusieurs serveurs derrière un répartiteur pour les gros volumes.Superviser l'espace disque : un stockage plein interrompt les enregistrements. Dépanner SymptômeCause probableParadeSession non enregistréeStratégie non appliquée, agent non connecté au serveurPropriétés de l'agent (test de connexion), stratégie active et périmètreEnregistrement vide ou coupéStockage plein ou inaccessibleEspace et droits du stockage, journaux du Storage ManagerLecteur sans résultatDroits de lecture, base injoignableRôles Session Recording, connexion SQLTrop d'événementsRègles trop largesRestreindre périmètre et types d'événements 🔷 En contexte Citrix\nCible d'abord les serveurs d'administration et les accès prestataires publiés via Citrix : bénéfice maximal, volume maîtrisé.\nCombine avec la liste d'autorisation des canaux virtuels et les restrictions de presse-papiers (CTX-08, CTX-09) : on prévient d'abord, on trace ensuite.\nÀ retenir Agent sur le VDA → serveur (broker + stockage) → base SQL → lecteurs.Trois stratégies : enregistrement, détection d'événements, réponse aux événements.Événements seuls = léger ; écran = volumineux.Cadre juridique : finalité, information, rétention, accès restreint.Superviser le stockage. Auto-évaluation Q1. Quelle est la différence entre stratégie d'enregistrement et stratégie de détection d'événements ?→ La première décide qui est enregistré et comment ; la seconde quels événements sont journalisés et pour quel périmètre.\nQ2. Comment réduire fortement le volume stocké ?→ Enregistrer uniquement les événements, ou déclencher l'enregistrement de l'écran seulement sur certains événements.\nQ3. Que faut-il faire avant d'activer l'enregistrement des salariés ?→ Définir une finalité légitime, informer les personnes et leurs représentants, fixer la rétention, faire valider par le DPO.\nQ4. Une session prestataire n'apparaît pas dans le lecteur. Pistes ?→ Stratégie (périmètre, activée), connexion de l'agent au serveur, stockage disponible, droits de lecture.\nPour aller plus loin Session Recording : documentationStratégies de détection d'événementsCNIL : contrôle de l'activité des personnes employées ","permalink":"https://melior.guru/fiches/ctx-15/","summary":"Fiche d\u0026rsquo;apprentissage Citrix Session Recording : cas d\u0026rsquo;usage (prestataires, comptes à privilèges, conformité), architecture (agent, serveur, stockage, base, lecteurs, service cloud), stratégies d\u0026rsquo;enregistrement, de détection et de réponse aux événements, aspects juridiques et RGPD, dimensionnement et dépannage.","title":"Session Recording — Enregistrer, détecter et rejouer les sessions Citrix"},{"content":"ℹ️ À savoir · En bref\nUn VPN met l'utilisateur sur le réseau : une fois connecté, il voit beaucoup plus que ce dont il a besoin. Une solution ZTNA donne accès application par application, après vérification de l'identité et de l'appareil, à chaque connexion.\nChez Citrix, l'offre s'appelle désormais Citrix SecurAccess ZTNA (anciennement Secure Private Access). Elle complète DaaS : les applications web et client-serveur n'ont plus besoin d'être publiées dans un bureau.\nObjectifs de la fiche Comprendre la différence entre ZTNA et VPN.Connaître les composants et les types d'applications pris en charge.Définir des stratégies d'accès et des contrôles de sécurité.Savoir quand utiliser ZTNA plutôt qu'une application publiée dans Citrix. Architecture Le Connector Appliance ouvre un tunnel sortant ; l'utilisateur n'accède qu'aux applications autorisées ComposantRôleStratégies d'accès (Citrix Cloud)Décident, par application, qui accède, depuis quel appareil et avec quels contrôlesGateway servicePoint d'entrée hébergé par Citrix : relaie le trafic vers les applications privéesConnector ApplianceMachine virtuelle dans ton réseau : connexion sortante vers Citrix Cloud, aucun port entrantClient Citrix Secure AccessAgent sur le poste, nécessaire pour les applications TCP / UDP (client lourd, RDP, SSH)Navigateur sécuriséChrome Enterprise Premium (intégration Google) pour les applications web et SaaS avec contrôles de donnéesService de postureVérifie l'état de l'appareil (antivirus, chiffrement, conformité Intune, CrowdStrike…) avant l'accès Types d\u0026rsquo;applications TypeAccèsExemplesWeb privéesSans agent, dans le navigateurIntranet, outils internes, consoles web d'administrationSaaSSSO et contrôles appliquésMicrosoft 365, Salesforce, ServiceNowTCP / UDPAvec le client Secure AccessClient lourd, RDP, SSH, bases de donnéesBureaux et applications CitrixDepuis le même portail WorkspaceDaaS, CVAD Stratégies et contrôles Qui : utilisateurs et groupes (Entra ID, Okta, AD), depuis où : emplacement, réseau, sur quoi : posture de l'appareil.Action : autoriser, refuser, ou autoriser avec restrictions (dans le navigateur sécurisé).Contrôles de données (navigateur) : protection contre la fuite de données (DLP), filtrage d'URL, protection contre l'hameçonnage et les logiciels malveillants, contrôle du presse-papiers, de l'impression et des téléchargements, filigrane selon les cas.Réévaluation continue : la posture et le contexte sont vérifiés pendant la session, l'accès peut être révoqué. ⚠️ Piège\nCitrix migre son navigateur Enterprise Browser vers Chrome Enterprise Premium : la migration est irréversible et certaines applications doivent être adaptées avant (par exemple SSO à désactiver sur les applications web, règles « autoriser avec restrictions » à revoir). Procède par étapes, une application et un groupe à la fois.\nLes noms changent (Secure Private Access → SecurAccess ZTNA) : la documentation et les consoles peuvent encore utiliser l'ancien nom.\nZTNA ou application publiée ? BesoinPlutôt ZTNAPlutôt DaaS (publication)Application web interneOui : accès direct, légerSi le poste n'est pas fiable du toutClient lourd sensible aux latencesSi le poste est géré et conformeOui : l'appli reste près des donnéesPoste personnel (BYOD)Web avec navigateur sécuriséOui : rien ne s'installe, données dans le datacenterAdministration (RDP, SSH)Possible, avec posture et MFABastion publié et enregistré (CTX-15) 🔷 En contexte Citrix\nUn premier projet type : remplacer le VPN des prestataires par ZTNA pour quelques applications web, avec MFA Entra ID et posture d'appareil, et garder les applications sensibles publiées dans DaaS.\nLe Connector Appliance se déploie comme une VM (vSphere, Hyper-V, Azure…) ; prévois-en au moins deux par site pour la haute disponibilité.\nÀ retenir ZTNA = accès par application après vérification de l'identité et de l'appareil ; VPN = accès au réseau.Connector Appliance sortant, Gateway service, client pour TCP/UDP, navigateur sécurisé pour le web.Stratégies : qui, d'où, sur quel appareil, avec quels contrôles.Enterprise Browser → Chrome Enterprise Premium : migration à préparer.Complémentaire de DaaS, pas un remplacement. Auto-évaluation Q1. Quelle est la principale différence entre ZTNA et VPN ?→ Le VPN donne un accès réseau large ; ZTNA ne donne accès qu'aux applications autorisées, après vérification continue de l'identité et de l'appareil.\nQ2. Pourquoi le Connector Appliance ne demande-t-il aucun port entrant ?→ Il ouvre lui-même une connexion sortante vers Citrix Cloud, par laquelle passe le trafic des utilisateurs.\nQ3. Quand faut-il le client Secure Access sur le poste ?→ Pour les applications TCP / UDP (client lourd, RDP, SSH) ; le web passe par le navigateur.\nQ4. Un utilisateur sur poste personnel doit utiliser un client lourd sensible. Que choisir ?→ La publication dans Citrix DaaS : rien ne s'installe sur le poste et les données restent dans le datacenter.\nPour aller plus loin Secure Private Access (SecurAccess ZTNA) : vue d'ensembleMigration Enterprise Browser vers Chrome Enterprise PremiumPage produit Citrix SecurAccess ZTNA ","permalink":"https://melior.guru/fiches/ctx-16/","summary":"Fiche d\u0026rsquo;apprentissage Citrix SecurAccess ZTNA (anciennement Secure Private Access) : principe Zero Trust face au VPN, composants (Connector Appliance, Gateway service, client Secure Access, navigateur Chrome Enterprise Premium), types d\u0026rsquo;applications, stratégies d\u0026rsquo;accès et contrôles de sécurité, posture de l\u0026rsquo;appareil, migration depuis Enterprise Browser, cas d\u0026rsquo;usage avec Citrix DaaS.","title":"Citrix SecurAccess ZTNA — Ex-Secure Private Access : accès Zero Trust aux applications"},{"content":"ℹ️ À savoir · En bref\nRemote PC Access permet à un utilisateur d'ouvrir à distance une session sur son propre PC physique au bureau, via Citrix Workspace, avec la même sécurité et la même expérience HDX qu'un bureau virtuel.\nPas d'image ni de serveur à construire : on installe un VDA sur le PC, on l'ajoute à un catalogue, et l'utilisateur qui s'y connecte localement y est attribué automatiquement.\nObjectifs de la fiche Mettre en place un catalogue Remote PC Access.Installer le VDA correctement sur des PC physiques.Configurer le réveil des PC (Wake on LAN) et leur alimentation.Gérer la cohabitation entre utilisateur local et utilisateur distant. Fonctionnement Le contrôleur réveille le PC via un PC voisin, puis la session HDX passe par Workspace ou la Gateway ÉlémentDétailCatalogue Remote PC AccessMachines ajoutées par OU (tous les PC d'une OU) ou par import CSV ; une machine n'appartient qu'à un catalogueAttribution automatiqueL'utilisateur qui ouvre une session locale sur le PC y est attribué ; plusieurs utilisateurs par PC possibles (réglable)Groupe de mise à dispositionBureau mono-session statique publié aux utilisateurs concernésLicencesSelon l'offre Citrix (éditions DaaS Advanced / Premium et équivalents) Installer le VDA installation (exemples)\n:: Installeur « core » recommandé pour les PC physiques VDAWorkstationCoreSetup.exe /quiet /remotepc /controllers \u0026#34;cc1.corp.local cc2.corp.local\u0026#34; /enable_hdx_ports /noreboot :: Ou installeur complet en mode PC physique (avec plugin WMI pour Monitor) VDAWorkstationSetup.exe /quiet /remotepc /physicalmachine /includeadditional \u0026#34;Citrix User Profile Manager WMI Plugin\u0026#34; ... ⚠️ Piège\nSur Windows 11 (et certains Windows 10) avec la sécurité basée sur la virtualisation, le VDA peut croire être dans une VM : utilise /physicalmachine ou la valeur ForceEnableRemotePC = 1 sous HKLM\\SOFTWARE\\Citrix\\PortICA.\nRéveiller les PC (Wake on LAN) Wake on LAN intégré : le contrôleur demande à un VDA allumé du même sous-réseau d'envoyer le paquet magique au PC éteint.Prérequis : VDA 2009 ou plus récent, Windows 10 / 11, WoL activé dans le BIOS/UEFI et sur la carte réseau, au moins un PC allumé par sous-réseau, broadcast non bloqué.Configuration : connexion d'hébergement de type « Remote PC Wake on LAN » (Studio en DaaS) ou PowerShell.Il ne fait qu'allumer : pas d'arrêt ni de redémarrage, ni d'allumage planifié.Le VDA doit s'être enregistré au moins une fois avant que le réveil fonctionne. 💡 Astuce\nPour les portables : sur secteur, veille et mise en veille prolongée désactivées, action de fermeture du capot sur « Ne rien faire ». Pour autoriser la mise en veille des PC fixes : valeur DisableRemotePCSleepPreventer.\nUtilisateur local et utilisateur distant SituationComportementSession distante active, quelqu'un fait Ctrl+Alt+Suppr sur placePar défaut, la session distante est déconnectéeSasNotification activéL'utilisateur distant est prévenu et peut garder la mainRpcaMode / RpcaTimeoutQui est prioritaire après le délai (30 s minimum) : distant par défaut, ou localForcer côté localCtrl+Alt+Suppr deux fois en moins de 10 sÉcran physiqueMasqué pendant la session distante (selon pilotes graphiques) Prérequis et limites PC joints au domaine Active Directory ; connexion filaire de préférence (sinon Wi-Fi actif avant ouverture de session).Clavier et souris branchés directement ; pas de commutateur KVM, pas de PC à double démarrage ni de PC hybrides à double GPU.L'écran tactile local est ignoré pendant une session distante.Si l'écran physique ne se masque pas : priorité du pilote d'affichage Citrix (CitrixIDD = 3 sous HKLM\\SOFTWARE\\Citrix\\Graphics\\AdapterMerits). Dépanner SymptômeCause probableParadeBureau absent dans WorkspaceUtilisateur pas encore attribué (jamais connecté localement)Attribution manuelle ou connexion locale une foisPC non enregistréVDA détecté comme VM, pare-feu, liste des contrôleurs/physicalmachine, XDPing, liste des contrôleursLe PC ne se réveille pasWoL désactivé (BIOS, carte), aucun PC allumé dans le sous-réseauActiver WoL, garder un PC relais allumé, vérifier le broadcastSession coupée par un collègue sur placeComportement par défautSasNotification, RpcaMode 🔷 En contexte Citrix\nRemote PC Access est une solution rapide de continuité d'activité (télétravail soudain) : pas d'image à construire, utilisateurs sur leur environnement habituel.\nSupervision dans Monitor comme un VDA classique ; pour le découpage de l'ouverture de session, installe le plugin WMI de Profile Management (CTX-03).\nÀ retenir VDA sur le PC physique (/remotepc, /physicalmachine si besoin), catalogue par OU.Attribution automatique à l'utilisateur qui se connecte localement.Wake on LAN intégré : un PC allumé par sous-réseau, WoL actif dans le BIOS.Cohabitation locale / distante réglable (SasNotification, RpcaMode).Pas de KVM, pas de double démarrage ; filaire de préférence. Auto-évaluation Q1. Comment un utilisateur est-il attribué à son PC ?→ Automatiquement, lorsqu'il ouvre une session locale sur ce PC (le PC étant dans un catalogue Remote PC Access).\nQ2. Pourquoi garder au moins un PC allumé par sous-réseau ?→ Le Wake on LAN intégré fait envoyer le paquet de réveil par un VDA allumé du même sous-réseau.\nQ3. Le VDA ne passe pas en mode Remote PC sur un poste Windows 11. Pourquoi ?→ La sécurité basée sur la virtualisation le fait détecter comme une VM : utiliser /physicalmachine ou ForceEnableRemotePC.\nQ4. Que se passe-t-il par défaut si quelqu'un se connecte sur place pendant une session distante ?→ La session distante est déconnectée ; SasNotification et RpcaMode permettent de changer ce comportement.\nPour aller plus loin Remote PC Access (DaaS)Remote PC Access (CVAD) ","permalink":"https://melior.guru/fiches/ctx-17/","summary":"Fiche d\u0026rsquo;apprentissage Citrix Remote PC Access : principe, catalogue Remote PC Access (par OU ou CSV), installation du VDA sur PC physique, attribution automatique, Wake on LAN intégré, gestion de l\u0026rsquo;alimentation, cohabitation avec l\u0026rsquo;utilisateur local, prérequis, limites et dépannage.","title":"Remote PC Access — Accéder à son PC de bureau à distance avec Citrix"},{"content":"ℹ️ À savoir · En bref\nXenServer 9 est disponible (GA) depuis juillet 2026, après une préversion publique en février. XenServer 8.4 reste pris en charge et continue de recevoir des mises à jour.\nIl est inclus dans les licences Citrix Platform License, Universal Hybrid Multi-Cloud et Citrix for Private Cloud : si tu as l'une d'elles, tu possèdes déjà XenServer 9, pour Citrix comme pour d'autres charges de travail.\nObjectifs de la fiche Comprendre l'architecture d'un pool XenServer.Connaître les nouveautés de la version 9 et ce qui disparaît.Maîtriser licences et mises à jour.Préparer XenServer pour Citrix DaaS (MCS, PVS) et une migration depuis VMware. Architecture Un pool d'hôtes piloté par le coordinateur ; XenCenter, xe/XenAPI et Citrix passent tous par xapi ÉlémentRôleXenL'hyperviseur, très légerdom0Domaine de contrôle (Linux spécialisé) : pilotes, stockage, réseau, servicesxapiLe service de gestion (XenAPI) : tout passe par lui, en HTTPSPoolGroupe d'hôtes partageant stockage et réseau ; un hôte coordinateur (ex-« master ») porte la base de configurationSR (Storage Repository)Stockage : local (EXT, XFS), NFS, SMB, iSCSI, Fibre Channel, GFS2 (provisionnement fin partagé)RéseauOpen vSwitch, agrégats (bonds), VLAN, réseau de gestion dédiéXenCenterConsole Windows ; xe en ligne de commande sur l'hôte Nouveautés de XenServer 9 NouveautéCe que ça changeXen 4.21, noyau dom0 6.x, dom0 allégéBase modernisée, surface d'attaque réduiteSecure Boot de l'hôteVérifie la chaîne de démarrage de l'hôte (y compris démarrage SAN) ; activable après mise à niveauOptimisation NUMA par défautvCPU et mémoire d'une VM sur le même nœud : meilleures performances pour les gros serveursNoms d'interfaces prévisiblesFin du « eth0 » forcé dans dom0 : les scripts qui supposent ethN doivent découvrir les interfacesHTTPS uniquement (nouvelles installations)Port 80 fermé ; les mises à niveau gardent leurs réglagesPilotes multi-versionsChoix de la version de pilote par matériel, mises à jour moins risquées ⚠️ Piège\nCe qui disparaît en 9 : démarrage BIOS des hôtes (UEFI uniquement), anciens GPU NVIDIA Maxwell / Pascal, FCoE logiciel, pile réseau Linux bridge. Le processeur doit être x86-64-v3.\nAvant de passer de 8.4 à 9 avec du GFS2, convertis les SR de Corosync 2 vers Corosync 3.\nLicences et mises à jour Activation par le License Activation Service (LAS) uniquement : les fichiers de licence ont pris fin le 15 avril 2026 ; le serveur de licences doit être enregistré dans Citrix Cloud.Édition Premium nécessaire pour la production ; édition d'essai : 90 jours, 3 hôtes maximum.Avec la 8.4, les licences CVAD / DaaS « classiques » ne suffisent plus : il faut l'entitlement XenServer (Platform License, UHMC, CPC ou Premium).Mises à jour continues par canaux (Normal ou Early Access), appliquées depuis XenCenter ou xe ; à installer dans les 6 mois pour rester supporté. xe : premières commandes\nxe host-list params=name-label,software-version # version de chaque hôte xe pool-list params=name-label,master # pool et coordinateur xe sr-list params=name-label,type,physical-utilisation # stockage xe vm-list power-state=running params=name-label # VM démarrées xe host-updates-show-available host-uuid=\u0026lt;uuid\u0026gt; # mises à jour disponibles (canal configuré) XenServer pour Citrix FonctionIntérêt pour CitrixConnexion d'hébergement XenServerMCS crée et alimente les VDA via XenAPI (HTTPS, certificat du pool à faire confiance)IntelliCacheCache local des disques MCS non persistants : moins d'E/S sur le stockage partagéGFS2 + MCSProvisionnement fin partagé, clones complets et plusieurs SR GFS2 par cataloguePVS-AcceleratorCache des vDisks PVS dans dom0 : démarrages plus rapides, moins de trafic réseauvGPU NVIDIAGraphismes 3D dans les VDA (GPU pris en charge)vTPM 2.0 + UEFIWindows 11 et Windows Server 2025 en VDA 💡 Astuce\nLa matrice de compatibilité XenServer ↔ versions CVAD / PVS est publiée dans l'article Citrix CTX131239 : vérifie-la avant chaque mise à niveau d'un côté ou de l'autre.\nMigrer depuis VMware Conversion Manager (appliance) convertit des VM depuis ESXi ou vCenter en lot, retire VMware Tools et installe XenServer VM Tools.Pour Citrix, il est souvent plus simple de recréer les catalogues MCS sur XenServer depuis une image maître reconstruite (Ansible, ANS-03) que de convertir les VDA.À revoir pendant la migration : réseau (bonds, VLAN), sauvegarde (API CBT), supervision, haute disponibilité, automatisation. 🔷 En contexte Citrix\nAvec une Citrix Platform License, XenServer 9 ne coûte rien de plus : une piste sérieuse pour réduire la dépendance à VMware sur la partie Citrix.\nCommence par un pool de recette de 2 ou 3 hôtes, un catalogue MCS Windows Server 2025, puis compare performances et exploitation avec l'existant.\nÀ retenir Pool = hôtes + coordinateur ; tout passe par xapi (HTTPS).XenServer 9 GA en juillet 2026 : Secure Boot hôte, NUMA, dom0 allégé, UEFI seul.Licences LAS uniquement ; inclus dans Platform License, UHMC, CPC.Mises à jour continues, à appliquer dans les 6 mois.Pour Citrix : IntelliCache, GFS2, PVS-Accelerator, vTPM ; vérifier CTX131239. Auto-évaluation Q1. Quelles licences incluent XenServer 9 ?→ Citrix Platform License, Universal Hybrid Multi-Cloud et Citrix for Private Cloud.\nQ2. Pourquoi un script qui configure eth1 peut-il casser sur XenServer 9 ?→ Les noms d'interfaces de dom0 deviennent prévisibles (plus d'ethN forcé) : le script doit découvrir l'interface (par MAC ou par xe pif-list).\nQ3. Que faire avant de mettre à niveau un pool 8.4 qui utilise GFS2 ?→ Convertir les SR GFS2 de Corosync 2 vers Corosync 3.\nQ4. À quoi sert IntelliCache avec MCS ?→ À mettre en cache local les disques des VDA non persistants pour réduire les E/S sur le stockage partagé.\nPour aller plus loin XenServer 9 : nouveautésXenServer 8.4 : nouveautésAnnonce XenServer 9 (Citrix)Compatibilité XenServer / CVAD (CTX131239) ","permalink":"https://melior.guru/fiches/ctx-18/","summary":"Fiche d\u0026rsquo;apprentissage XenServer 9 : architecture (Xen, dom0, xapi, pool), nouveautés par rapport à 8.4 (Secure Boot hôte, NUMA, dom0 allégé, noms d\u0026rsquo;interfaces prévisibles, HTTPS seul), licences (LAS, inclus dans Citrix Platform License), canaux de mises à jour, stockage et réseau, intégration Citrix DaaS (MCS, PVS), migration depuis VMware et mise à niveau depuis 8.4.","title":"XenServer 9 — L'hyperviseur Citrix : nouveautés, licences et intégration DaaS"},{"content":"ℹ️ À savoir · En bref\nTrois étages, trois outils : installation des hôtes par PXE avec un fichier de réponses, configuration du pool avec Ansible, ressources (stockage, disques, VM) avec Terraform et le provider officiel xenserver/xenserver.\nPour la partie Citrix, on enchaîne avec le provider citrix/citrix (connexion d'hébergement, catalogue MCS, voir TF-04) : toute la chaîne devient du code versionné.\nObjectifs de la fiche Installer des hôtes XenServer sans intervention.Configurer pool, réseau et stockage avec Ansible.Créer disques et VM avec Terraform.Raccorder le pool à Citrix DaaS en code. La chaîne complète Hôtes, ressources, puis Citrix : chaque étage consomme le résultat du précédent ÉtageOutilCe qu'il gèreInstallationPXE + fichier de réponses XMLDisque système, réseau de gestion, mot de passe, fuseauConfiguration hôtes / poolAnsible (xe via SSH)Jonction au pool, NTP, bonds, VLAN, SR partagés, mises à jour, certificatsRessourcesTerraform xenserver/xenserverSR, VDI, VM (image maître, serveurs d'infrastructure)VM invitéesAnsible community.general.xenserver_guestAlternative à Terraform pour créer ou modifier des VMCitrixTerraform citrix/citrixConnexion d'hébergement XenServer, catalogues MCS, groupes 1. Installer sans intervention fichier de réponses (exemple)\n\u0026lt;?xml version=\u0026#34;1.0\u0026#34;?\u0026gt; \u0026lt;installation srtype=\u0026#34;ext\u0026#34;\u0026gt; \u0026lt;!-- SR local en EXT (provisionnement fin) --\u0026gt; \u0026lt;primary-disk\u0026gt;nvme0n1\u0026lt;/primary-disk\u0026gt; \u0026lt;keymap\u0026gt;fr\u0026lt;/keymap\u0026gt; \u0026lt;root-password type=\u0026#34;hash\u0026#34;\u0026gt;$6$…\u0026lt;/root-password\u0026gt; \u0026lt;!-- jamais en clair --\u0026gt; \u0026lt;source type=\u0026#34;url\u0026#34;\u0026gt;http://repo.corp.local/xenserver9/\u0026lt;/source\u0026gt; \u0026lt;admin-interface hwaddr=\u0026#34;aa:bb:cc:00:11:22\u0026#34; proto=\u0026#34;static\u0026#34;\u0026gt; \u0026lt;ipaddr\u0026gt;10.10.0.11\u0026lt;/ipaddr\u0026gt;\u0026lt;subnet\u0026gt;255.255.255.0\u0026lt;/subnet\u0026gt;\u0026lt;gateway\u0026gt;10.10.0.1\u0026lt;/gateway\u0026gt; \u0026lt;/admin-interface\u0026gt; \u0026lt;name-server\u0026gt;10.0.0.10\u0026lt;/name-server\u0026gt; \u0026lt;hostname\u0026gt;xs01\u0026lt;/hostname\u0026gt; \u0026lt;timezone\u0026gt;Europe/Paris\u0026lt;/timezone\u0026gt; \u0026lt;/installation\u0026gt; ⚠️ Piège\nSur XenServer 9, les noms d'interfaces ne sont plus forcés en eth0, eth1 : désigne l'interface de gestion par son adresse MAC (hwaddr) plutôt que par son nom, et fais de même dans tes playbooks.\n2. Configurer le pool avec Ansible playbook (extrait)\n# inventory : [xenserver] xs01 xs02 xs03 (connexion SSH root, clé + Ansible Vault) - name: Rejoindre le pool (hôtes membres) ansible.builtin.command: \u0026gt; xe pool-join master-address={{ xs_coordinator }} master-username=root master-password={{ vault_xs_root_password }} when: inventory_hostname != groups[\u0026#39;xenserver\u0026#39;][0] no_log: true register: join changed_when: join.rc == 0 failed_when: join.rc != 0 and \u0026#39;already\u0026#39; not in join.stderr - name: Le SR NFS existe-t-il ? ansible.builtin.command: xe sr-list name-label=SR-NFS-VDA --minimal register: sr changed_when: false run_once: true - name: Créer le SR NFS partagé (une seule fois) ansible.builtin.command: \u0026gt; xe sr-create type=nfs shared=true content-type=user name-label=SR-NFS-VDA device-config:server=nas01.corp.local device-config:serverpath=/xs/vda run_once: true when: sr.stdout | length == 0 💡 Astuce\nLes commandes xe ne sont pas idempotentes : teste d'abord l'état (xe sr-list name-label=… --minimal) et conditionne la création, ou encapsule la logique dans un rôle maison (ANS-02).\nMots de passe root et secrets dans Ansible Vault ou ton coffre ; no_log: true sur toutes les tâches qui les utilisent.\nVM avec Ansible\n- name: Créer une VM depuis un modèle (module XenAPI, pip install XenAPI) community.general.xenserver_guest: hostname: \u0026#34;{{ xs_coordinator }}\u0026#34; username: root password: \u0026#34;{{ vault_xs_root_password }}\u0026#34; name: SRV-ANSIBLE-01 template: \u0026#34;Windows Server 2025 (64-bit)\u0026#34; state: poweredon hardware: { num_cpus: 4, memory_mb: 8192 } disks: [{ size_gb: 80, sr: SR-NFS-VDA }] networks: [{ name: \u0026#34;VLAN-120-Serveurs\u0026#34; }] wait_for_ip_address: true delegate_to: localhost 3. Provisionner avec Terraform Le provider officiel xenserver/xenserver (version 0.x, mis à jour indépendamment de XenServer) gère notamment les SR, les disques (VDI) et les VM ; il interroge aussi réseaux et hôtes. Il demande Terraform 1.8 ou plus récent.\nmain.tf (exemple)\nterraform { required_providers { xenserver = { source = \u0026#34;xenserver/xenserver\u0026#34; } } } provider \u0026#34;xenserver\u0026#34; { host = \u0026#34;https://xs01.corp.local\u0026#34; username = \u0026#34;root\u0026#34; password = var.xs_password # variable sensible, jamais dans le code ca_cert_path = \u0026#34;certs/pool-ca.pem\u0026#34; # vérification TLS active par défaut (0.3.0+) } data \u0026#34;xenserver_sr\u0026#34; \u0026#34;nfs\u0026#34; { name_label = \u0026#34;SR-NFS-VDA\u0026#34; } data \u0026#34;xenserver_network\u0026#34; \u0026#34;srv\u0026#34; { name_label = \u0026#34;VLAN-120-Serveurs\u0026#34; } resource \u0026#34;xenserver_vdi\u0026#34; \u0026#34;master_disk\u0026#34; { name_label = \u0026#34;W25-MASTER-disk\u0026#34; sr_uuid = data.xenserver_sr.nfs.data_items[0].uuid virtual_size = 80 * 1024 * 1024 * 1024 } resource \u0026#34;xenserver_vm\u0026#34; \u0026#34;master\u0026#34; { name_label = \u0026#34;W25-MASTER\u0026#34; template_name = \u0026#34;Windows Server 2025 (64-bit)\u0026#34; static_mem_max = 8 * 1024 * 1024 * 1024 vcpus = 4 boot_mode = \u0026#34;uefi_security\u0026#34; # UEFI + Secure Boot hard_drive = [{ vdi_uuid = xenserver_vdi.master_disk.id, bootable = true, mode = \u0026#34;RW\u0026#34; }] network_interface = [{ network_uuid = data.xenserver_network.srv.data_items[0].uuid, device = \u0026#34;0\u0026#34; }] } ⚠️ Piège\nLe provider est jeune : les noms d'attributs peuvent évoluer d'une version 0.x à l'autre. Fige la version (version = \"~\u0026gt; 0.3\"), lis le changelog avant chaque montée et vérifie le schéma dans le Terraform Registry.\n4. Raccorder à Citrix DaaS provider citrix/citrix\nresource \u0026#34;citrix_xenserver_hypervisor\u0026#34; \u0026#34;xs_lille\u0026#34; { name = \u0026#34;XS9-Lille\u0026#34; zone = citrix_zone.lille.id addresses = [\u0026#34;https://xs01.corp.local\u0026#34;] username = \u0026#34;svc-citrix-xs\u0026#34; password = var.xs_citrix_password password_format = \u0026#34;PlainText\u0026#34; ssl_thumbprints = [var.xs_thumbprint] # empreinte du certificat du pool } # Puis : citrix_xenserver_hypervisor_resource_pool (réseau, SR) et citrix_machine_catalog (TF-04) Utilise un compte dédié (rôle XenServer minimal adapté à MCS) plutôt que root pour Citrix.Si le certificat du pool change (renouvellement), mets à jour l'empreinte, sinon MCS et l'alimentation échouent. Pièges classiques SymptômeCause probableParadeÉchec TLS du provider ou de CitrixCertificat auto-signé non approuvéCA du pool dans ca_cert_path, empreinte côté Citrix ; insecure seulement en laboPlaybook qui recrée toutCommandes xe non idempotentesTester l'état avant, changed_when, rôlesInterface introuvable sur XS9Script basé sur eth0 / eth1Sélection par adresse MAC (xe pif-list MAC=…)Plan Terraform qui change sans raisonAttribut modifié par XenCenter ou nouvelle version du providerPas de modification manuelle, version du provider figéeSecret dans le stateMot de passe passé en variable classiqueBackend chiffré à accès restreint, variables sensibles (TF-03) 🔷 En contexte Citrix\nAvec ta Citrix Platform License, un pool XenServer 9 de recette entièrement décrit en code (Ansible + Terraform + provider Citrix) permet de tester MCS et l'image maître Windows Server 2025 sans toucher à la production.\nStocke le code dans le même dépôt que l'image maître (ANS-03) et les catalogues (TF-04) : un seul pipeline (TF-03, ANS-04) pour tout l'environnement Citrix.\nÀ retenir PXE + fichier de réponses pour les hôtes ; interface choisie par adresse MAC sur XS9.Ansible pour le pool (xe via SSH) et éventuellement les VM (xenserver_guest).Terraform xenserver/xenserver pour SR, VDI, VM ; version figée.Provider citrix/citrix pour la connexion d'hébergement et les catalogues.Secrets dans Vault / variables sensibles ; TLS vérifié. Auto-évaluation Q1. Pourquoi désigner l'interface de gestion par son adresse MAC dans le fichier de réponses XenServer 9 ?→ Parce que XenServer 9 ne force plus les noms eth0/eth1 : le nom peut changer, l'adresse MAC non.\nQ2. Comment rendre idempotente la création d'un SR avec Ansible ?→ Vérifier son existence (xe sr-list name-label=… --minimal) et ne lancer xe sr-create que s'il n'existe pas, idéalement dans un rôle.\nQ3. Quelles ressources du provider Terraform officiel utilises-tu pour créer une VM avec un disque ?→ xenserver_vdi pour le disque (sur un SR trouvé via la data source xenserver_sr) et xenserver_vm, avec la data source xenserver_network pour la carte réseau.\nQ4. Que se passe-t-il côté Citrix si le certificat du pool XenServer est renouvelé ?→ L'empreinte enregistrée dans la connexion d'hébergement ne correspond plus : MCS et l'alimentation échouent tant qu'elle n'est pas mise à jour.\nPour aller plus loin Provider Terraform XenServerModule Ansible xenserver_guestInstallation XenServer (fichier de réponses)Provider Terraform Citrix ","permalink":"https://melior.guru/fiches/ctx-19/","summary":"Fiche d\u0026rsquo;apprentissage sur l\u0026rsquo;automatisation de XenServer : installation sans intervention (PXE + fichier de réponses), configuration des hôtes et du pool avec Ansible (xe, XenAPI, module xenserver_guest), provisionnement avec le provider Terraform xenserver/xenserver (SR, VDI, VM), raccordement à Citrix DaaS avec le provider Citrix, secrets et pièges propres à XenServer 9.","title":"Automatiser XenServer — Installation, Ansible et Terraform"},{"content":"Ce blog rassemble des fiches d\u0026rsquo;apprentissage sur l\u0026rsquo;automatisation (Ansible, Terraform), Microsoft 365 et Citrix.\nLes articles de cette rubrique sont écrits à la main : pour en ajouter un, créer un fichier Markdown dans content/posts/.\n","permalink":"https://melior.guru/posts/bienvenue/","summary":"Ce que vous trouverez ici.","title":"Bienvenue"}]