Ctrl+Alt+Prod : automatisation, infra et bonnes pratiques pour admins et devops

  • Entra ID : l’opérateur memberOf meurt le 3 novembre 2026

    Entra ID : l’opérateur memberOf meurt le 3 novembre 2026

    Le 3 novembre 2026, l’opérateur memberOf cesse de fonctionner dans les groupes à appartenance dynamique de Microsoft Entra ID. Pas de suppression brutale, pas d’erreur qui saute aux yeux : les groupes concernés arrêtent simplement de se mettre à jour et restent figés dans leur dernier état connu. C’est précisément ce genre de panne silencieuse qui fait le plus de dégâts — personne ne la remarque avant que quelqu’un perde un accès qu’il devrait avoir, ou en garde un qu’il ne devrait plus avoir.

    Microsoft a envoyé un rappel final le 5 octobre 2026 (MC1488834), trois mois après l’annonce initiale du 5 août. Si tu n’as pas suivi ce fil de la Message Center, voici ce qu’il faut vérifier avant la date butoir.

    Ce qui casse exactement

    memberOf est un opérateur en préversion qui permet à un groupe dynamique d’inclure les membres d’autres groupes — pratique pour agréger plusieurs groupes de sécurité existants sans tout reconstruire à la main. Trois types d’objets l’utilisent, et les trois sont concernés après le 3 novembre :

    • Les groupes à appartenance dynamique dont la règle contient memberOf : ils arrêtent de traiter les changements d’appartenance.
    • Les unités d’administration dynamiques basées sur cette même règle : leur périmètre d’administration se gèle aussi.
    • Les politiques d’auto-attribution de l’entitlement management qui s’appuient sur memberOf : plus aucune nouvelle attribution de package d’accès ne sera traitée via cette règle.

    Les effets en cascade sont le vrai problème : accès Teams et SharePoint qui ne reflètent plus la réalité, ciblage Conditional Access obsolète, licences attribuées par groupe qui ne suivent plus les arrivées et départs. Microsoft est explicite sur la cause : l’opérateur memberOf peut ralentir le traitement des appartenances dynamiques pour tout le tenant, pas seulement pour le groupe qui l’utilise — même un seul groupe mal configuré peut dégrader les temps de traitement de tous les autres. D’où la retraite plutôt qu’un simple correctif de performance.

    Comment savoir si tu es concerné

    La syntaxe à chercher ressemble à ceci :

    user.memberof -any (group.objectId -in ['<id-du-groupe-source>'])

    Pour la repérer sur tous tes groupes dynamiques via Microsoft Graph PowerShell :

    Connect-MgGraph -Scopes "Group.Read.All"
    
    Get-MgGroup -All -Filter "groupTypes/any(c:c eq 'DynamicMembership')" `
        -Property Id,DisplayName,MembershipRule |
        Where-Object { $_.MembershipRule -match '(?i)memberof' } |
        Select-Object Id, DisplayName, MembershipRule

    Pour les unités d’administration et les politiques d’auto-attribution, il n’existe pas de filtre équivalent côté portail — passe aussi par Graph PowerShell (Get-MgDirectoryAdministrativeUnit et Get-MgEntitlementManagementAssignmentPolicy) et grep la propriété membershipRule ou les règles de la policy de la même façon.

    Que mettre à la place

    Deux chemins, selon ce que tu avais réellement besoin de faire :

    • Remplacer par un opérateur supporté — si ton besoin se ramène à un attribut (département, pays, type d’appareil…), les opérateurs -eq, -in, -startsWith couvrent la grande majorité des cas, et sont documentés dans le guide des règles de groupe dynamique.
    • Basculer en appartenance assignée — si le besoin réel était juste d’agréger quelques groupes de façon ponctuelle, un groupe assigné avec une synchro manuelle ou scriptée (un petit script planifié qui recopie les membres) est souvent plus simple à maintenir qu’une règle dynamique fragile, surtout vu les limites déjà en place sur memberOf (50 groupes membres max, pas de chaînage entre deux groupes memberOf, pas de combinaison avec un autre opérateur).

    Dans les deux cas, valide l’appartenance résultante avant de considérer la migration terminée — un comptage avant/après suffit dans la plupart des cas, sur une politique d’auto-attribution, va vérifier aussi les attributions de packages d’accès.

    Le piège si tu ne fais rien

    Ce n’est pas un échec propre : le groupe continue d’exister, continue d’avoir des membres, et continue d’être utilisé par Conditional Access ou par une licence groupée. Il se contente de ne plus évoluer. Un nouvel employé ajouté au groupe source trois semaines après le 3 novembre n’apparaîtra jamais dans le groupe dynamique qui en dépendait — sans message d’erreur nulle part. C’est le genre d’écart qui ressort en audit six mois plus tard, pas le jour où ça casse.

    FAQ

    Est-ce que je peux encore créer un nouveau groupe memberOf avant le 3 novembre ?

    Techniquement oui, mais ça n’a aucun sens : il arrêtera de se mettre à jour dès l’échéance. Autant partir directement sur un opérateur supporté ou une appartenance assignée.

    Microsoft va-t-il proposer une alternative pour le cas d’usage memberOf ?

    Le message officiel indique que Microsoft continue à travailler sur une solution alternative avec un meilleur niveau de fiabilité et d’échelle, sans date annoncée. En attendant, il n’y a pas de remplacement direct en préversion à adopter.

    Est-ce que ça touche aussi les groupes dynamiques basés sur les appareils ?

    Oui — la syntaxe device.memberof suit exactement la même règle et la même échéance que la version user.memberof.

    Passe à l’action

    Lance le script PowerShell ci-dessus cette semaine, pas la semaine du 2 novembre. Si tu as déjà dû gérer une échéance Entra qui est tombée sans prévenir — on en a parlé avec le couperet Entra Connect Sync du 30 septembre — tu sais que le vrai risque n’est pas la date elle-même, c’est de la découvrir après coup.

  • Ingress-NGINX est mort : le vrai outil pour migrer enfin

    Ingress-NGINX est mort : le vrai outil pour migrer enfin

    Ingress-NGINX est mort depuis mars 2026. Si tu as lu notre article sur la fin de vie annoncée, tu sais déjà qu’il fallait bouger. Ce qui a changé depuis : il existe enfin un chemin de migration qui tient la route, avec une API stable pour le trafic TCP/UDP brut et un outil officiel qui fait le gros du travail de conversion.

    Ce qui vient de devenir stable

    Gateway API v1.6.0 est sorti le 30 juin 2026, et c’est la première version où TCPRoute et UDPRoute quittent le channel expérimental pour rejoindre le Standard channel, sous l’API gateway.networking.k8s.io/v1. Avant cette version, ces deux types de ressources vivaient en v1alpha2 — utilisables, mais sans garantie de stabilité, ce qui en bloquait l’adoption en production pour pas mal d’équipes.

    Concrètement, une TCPRoute ne gère ni hostnames, ni matches, ni filtres : elle route une connexion vers un ou plusieurs backendRefs (16 maximum par règle), avec une répartition pondérée en support étendu si tu en as besoin. C’est volontairement minimaliste — pensé pour exposer une base de données, un serveur DNS ou tout protocole qui ne parle pas HTTP. Un exemple minimal :

    apiVersion: gateway.networking.k8s.io/v1
    kind: TCPRoute
    metadata:
      name: postgres-route
    spec:
      parentRefs:
        - name: my-gateway
          sectionName: postgres
      rules:
        - backendRefs:
            - name: postgres-svc
              port: 5432

    Le détail qui compte : un parentRef se résout par sectionName (un listener nommé sur ta Gateway) ou par port. Si tu exposais déjà des flux TCP/UDP via des annotations maison sur Ingress-NGINX (c’était fréquent pour la base de données ou le LDAP), tu as maintenant un équivalent standard, documenté, et porté par plusieurs implémentations de la Gateway API. Voir la référence officielle TCPRoute pour le détail complet des champs.

    L’outil qui change vraiment la donne : Ingress2Gateway

    Le projet kubernetes-sigs/ingress2gateway a atteint la version 1.0 le 20 mars 2026, puis la 1.2 en juillet. Ce n’est pas un contrôleur, il ne touche à rien en prod : il lit tes manifestes Ingress (ou directement ton cluster via le kubeconfig courant) et génère les ressources Gateway API équivalentes.

    ingress2gateway print \
      --providers=ingress-nginx \
      --emitter=kgateway \
      --input-file ./ingress.yaml \
      -o yaml

    Quelques options utiles au quotidien : -n/--namespace pour restreindre la lecture à un namespace, -A pour tout le cluster, --allow-experimental-gw-api si tu veux aussi les champs encore expérimentaux, et --ingress-nginx-ingress-class si ta classe Ingress n’est pas la nginx par défaut. L’outil ne devine pas tout : les annotations propres à Ingress-NGINX qui n’ont pas d’équivalent direct (certaines logiques de rewrite avancées, par exemple) ressortent en avertissement plutôt qu’en conversion silencieuse — ce qui est exactement le comportement que tu veux avant une bascule en production.

    Ta checklist de migration

    • Choisis ton implémentation de la Gateway API avant de lancer la conversion (kgateway, Istio, Envoy Gateway, Cilium…) — les manifestes générés en dépendent directement.
    • Lance ingress2gateway print sur un export de tes manifestes, pas directement en écriture sur le cluster : relis les avertissements avant d’appliquer quoi que ce soit.
    • Vérifie que les politiques annexes (auth, rate limiting, retries) qui vivaient dans des annotations NGINX ont bien un équivalent — souvent via des Policy spécifiques à l’implémentation choisie, pas via HTTPRoute lui-même.
    • Migre un service non critique en premier, garde l’ancien Ingress en place en parallèle le temps de valider DNS, TLS et comportement des redirections.
    • Ne fais jamais tourner deux contrôleurs qui revendiquent le même trafic en même temps — bascule service par service, pas en big bang.

    Pourquoi ça ne peut plus attendre

    Ingress-NGINX n’a plus de patch de sécurité depuis sa fin de vie. Pour rappel, la dernière faille sérieuse avant la mise en retraite — CVE-2026-3288, score CVSS 8.8, injection de configuration nginx via l’annotation rewrite-target — permettait l’exécution de code dans le contexte du contrôleur et, de fait, la lecture de tous les Secrets qu’il pouvait voir. Elle a été corrigée dans les versions 1.13.8, 1.14.4 et 1.15.0, mais plus aucune version future ne recevra ce genre de correctif. Si tu fais tourner Ingress-NGINX aujourd’hui en te disant « ça tourne, je verrai plus tard », c’est ce genre de CVE qui ne sera jamais patchée pour toi.

    Pour en savoir plus sur l’annonce initiale de retraite, voir le billet officiel du blog Kubernetes.

    FAQ

    Dois-je migrer vers Gateway API même si mon trafic est purement HTTP ?

    Oui, à terme — HTTPRoute est stable depuis plus longtemps que TCPRoute/UDPRoute et c’est le remplaçant naturel d’Ingress pour le trafic web. Mais rien ne t’empêche de migrer en deux temps : HTTP d’abord, TCP/UDP ensuite si tu en as besoin.

    Ingress2Gateway supporte-t-il d’autres contrôleurs qu’Ingress-NGINX ?

    Le provider le mieux documenté reste ingress-nginx, mais le projet gère aussi d’autres providers d’entrée — vérifie la liste à jour avec ingress2gateway --help sur ta version installée, elle évolue vite.

    Faut-il abandonner complètement les annotations NGINX ?

    Celles qui correspondent à du routage pur (host, path, rewrite simple) se convertissent bien vers HTTPRoute. Celles qui pilotaient des comportements avancés (auth externe, limitation de débit fine) demandent presque toujours une politique spécifique à ton implémentation de la Gateway API — ce n’est pas automatique, prévois ce travail dans ton planning de migration.

    Passe à l’action

    Si tu as encore des Ingress NGINX en prod, le plus urgent n’est pas de tout migrer ce week-end : c’est de faire tourner ingress2gateway print une première fois sur un export de tes manifestes pour voir ce qui se convertit proprement et ce qui ne se convertit pas. Tu sauras en une commande où se trouve le vrai travail.

  • Reservations Azure vers Savings Plan : le guide du trade-in

    Reservations Azure vers Savings Plan : le guide du trade-in

    Tu as acheté des réservations Azure il y a 18 mois pour des VM qui ont depuis changé de taille, de région, ou qui n’existent plus. Tu paies toujours le même engagement mensuel, mais la réduction ne s’applique plus à grand-chose. Un Savings Plan aurait suivi le mouvement automatiquement — alors faut-il échanger tes réservations maintenant, et à quel prix ?

    Microsoft a mis en place un mécanisme de bascule en self-service entre réservations et Savings Plans, avec des règles précises sur ce qui est éligible, combien tu peux échanger à la fois, et comment calculer le bon engagement de remplacement. On a déjà couvert la restriction d’échange qui arrive au 1er février 2027 — ici, on regarde comment t’en servir dès maintenant, dans le bon sens.

    Réservation ou Savings Plan : la différence tient en une phrase

    Une réservation t’engage sur un type d’instance précis, dans une région précise, pour un an ou trois ans. Un Savings Plan t’engage sur une dépense horaire, appliquée automatiquement à l’ensemble des services de calcul éligibles, dans toutes les régions. Microsoft recommande la réservation pour des charges stables et prévisibles, sans changement anticipé de type d’instance ni de région — c’est là qu’elle offre la meilleure réduction. Le Savings Plan convient mieux à des charges qui évoluent, qui changent de famille d’instance ou qui migrent de région.

    La documentation officielle propose d’ailleurs une séquence d’optimisation à suivre dans l’ordre, pour ne pas gaspiller de l’argent sur des engagements mal dimensionnés :

    1. élimine d’abord les ressources inutilisées ou surdimensionnées — une réduction ne compense jamais du gaspillage ;
    2. échange les réservations sous-utilisées pour une configuration qui correspond mieux à ton usage actuel ;
    3. transforme en Savings Plan les réservations rigides dont l’usage est devenu variable ;
    4. achète de nouvelles réservations uniquement pour les charges stables et bien comprises ;
    5. complète avec de nouveaux Savings Plans, dimensionnés sur une base déjà optimisée.

    Le trade-in, concrètement

    Tu peux échanger jusqu’à 100 réservations en une seule opération d’achat de Savings Plan, directement depuis le portail Azure (Réservations > sélectionner les réservations à échanger > Exchange). Azure annule les réservations, te rembourse au prorata, et annule les paiements mensuels futurs le cas échéant.

    Attention toutefois à l’éligibilité : seules les réservations Azure Virtual Machines, Dedicated Hosts, Azure App Service et les réservations de bases de données (SQL Database, SQL Managed Instance, PostgreSQL, MySQL, Cosmos DB…) peuvent être échangées contre un Savings Plan — respectivement compute ou base de données. Aucune autre réservation n’est éligible au trade-in. Et le sens inverse n’existe pas : impossible d’échanger un Savings Plan contre une réservation, ni contre un autre Savings Plan.

    Dernier point qui surprend souvent : le nouveau Savings Plan doit couvrir au moins l’engagement restant de la réservation échangée. Exemple donné par Microsoft — une réservation de 3 ans à 100 $/mois, échangée après le 18ᵉ paiement, doit être remplacée par un Savings Plan dont l’engagement total sur sa durée est d’au moins 1 800 $. Tu ne peux donc pas t’en servir pour réduire artificiellement ton engagement en cours de route.

    Calculer le bon engagement horaire

    Le Savings Plan se négocie en engagement horaire, pas en quantité d’instances — il faut donc convertir. Microsoft documente la méthode : prends le coût annuel upfront de l’instance que tu veux couvrir dans le calculateur de prix Azure, puis divise ce montant par 8 760 (nombre d’heures dans une année, pour un engagement d’un an) ou par 26 280 (trois ans). Multiplie le résultat par le nombre d’instances à couvrir, répète pour chaque type de produit à échanger, et additionne le tout pour obtenir l’engagement horaire total à saisir au moment de l’achat.

    Cette méthode suppose une utilisation à 100 % des ressources couvertes — en pratique, mieux vaut partir de tes données réelles de Cost Management (onglet Réservations > Utilisation) plutôt que de l’hypothèse optimiste du calcul théorique, pour éviter de sur-engager ou sous-engager ton nouveau Savings Plan.

    Pourquoi ça devient urgent avant 2027

    On a détaillé dans un article précédent ce qui change pour les réservations avant le 1er février 2027 : à partir de cette date, les réservations achetées perdent définitivement le droit à l’échange classique (exchange) pour tout service couvert par les Savings Plans — VM, App Service, SQL Database et équivalents. Les réservations achetées avant cette date gardent le droit à un dernier échange. En sont exclues les réservations pour des produits en fin de vie, et celles pour des services non couverts par les Savings Plans comme Azure VMware Solution, qui ne sont pas concernées par cette restriction.

    Le trade-in vers un Savings Plan, documenté ici, reste une politique distincte et n’est pas touché par cette échéance — mais elle donne une bonne raison de trancher maintenant plutôt que d’attendre : si une réservation ne te convient plus, c’est le moment de l’échanger pour une configuration plus adaptée ou de la transformer en Savings Plan, avant que l’option du simple échange ne se referme pour tes achats futurs.

    Notre avis : ne généralise pas, mais ne t’interdis rien non plus

    Pour une charge réellement stable depuis plus d’un an — même type de VM, même région, aucun changement prévu — la réservation reste le meilleur calcul : la réduction y est généralement supérieure à celle d’un Savings Plan équivalent, à condition d’être pleinement utilisée. Le trade-in n’a alors aucun intérêt. En revanche, dès que tu doutes de la stabilité d’une charge sur les 12 à 36 prochains mois, ou que tu as plusieurs réservations sous-utilisées qui dorment dans ton rapport d’utilisation, le calcul penche nettement vers le Savings Plan : la flexibilité qu’il apporte vaut largement l’écart de réduction, surtout avec la fenêtre d’échange qui se referme en 2027.

    Sur la résiliation : la politique de plafond à 50 000 $ d’annulation sur une fenêtre glissante de 12 mois par profil de facturation ou inscription unique n’est pas modifiée par ce mécanisme de trade-in. Et Microsoft précise ne pas facturer actuellement de frais de résiliation anticipée sur les trade-ins, tout en se réservant le droit de le faire à l’avenir, sans date annoncée pour l’instant.

    Remboursement : la mécanique change selon ton type de compte

    Si tu es client Enterprise Agreement, le remboursement est ajouté à ton Azure Prepayment (l’ancien engagement monétaire) s’il est encore actif ; sinon, un crédit est ajouté à ton terme d’accord en cours, valable 90 jours — au-delà, le crédit non utilisé expire. Si l’achat initial provenait d’un dépassement, le remboursement prend la forme d’une note de crédit partielle, sans impact sur les factures passées ou suivantes.

    Côté Microsoft Customer Agreement avec carte bancaire, la facture d’origine est annulée et une nouvelle est générée ; le remboursement part sur la carte utilisée pour l’achat initial — si cette carte n’est plus valide, il faut ouvrir une demande de support pour récupérer les fonds.

    FAQ

    Puis-je échanger un Savings Plan contre une réservation ?

    Non. L’échange ne fonctionne que dans un sens : d’une réservation éligible vers un Savings Plan. Une fois converti, il n’y a pas de retour en arrière possible vers une réservation.

    Mes réservations Azure VMware Solution sont-elles concernées par la restriction de 2027 ?

    Non — Azure VMware Solution n’est pas couvert par les Savings Plans, donc les réservations pour ce service restent exclues de la restriction d’échange qui entre en vigueur au 1er février 2027.

    Qui a le droit de faire l’échange dans mon organisation ?

    Il faut être propriétaire de l’ordre de réservation concerné, et avoir le rôle d’acheteur de Savings Plan ou être propriétaire de l’abonnement visé pour l’achat. Attention : les permissions d’écriture EA Admin ou de contributeur de profil de facturation, suffisantes pour un achat direct de Savings Plan, ne suffisent pas pour un trade-in.

    Y a-t-il des frais si j’annule au lieu d’échanger ?

    Pour une annulation classique (hors trade-in), le plafond reste de 50 000 $ par fenêtre glissante de 12 mois, sans frais de résiliation anticipée actuellement facturés par Microsoft sur les trade-ins — une situation que Microsoft peut faire évoluer sans date communiquée à ce jour.

    Avant toute décision, passe par Cost Management > Réservations > Utilisation pour repérer les réservations sous-utilisées — c’est ce rapport, pas une intuition, qui doit guider le choix entre garder, échanger ou transformer en Savings Plan. On avait posé les bases de ce suivi dans notre guide sur la maîtrise des coûts Azure avec Cost Management.

  • Hyper-V WS2025 : le piège qui casse tes migrations à chaud

    Hyper-V WS2025 : le piège qui casse tes migrations à chaud

    Tu mets à jour un hôte Hyper-V vers Windows Server 2025, tout semblait aller bien pendant les tests, et puis la première migration à chaud en production plante avec un message 0x8009030E ou 0x8009030D. Rien n’a changé dans ta configuration Hyper-V. Le coupable, c’est Credential Guard, activé par défaut depuis cette version — et ce n’est qu’un des changements qui méritent ton attention avant de généraliser la mise à jour sur un cluster de production.

    Windows Server 2025 apporte de vraies nouveautés pour Hyper-V : le partitionnement GPU gagne enfin la migration à chaud, les clusters sans Active Directory peuvent migrer leurs VM sans passer par une migration rapide, et les limites d’échelle doublent sur plusieurs points. On passe en revue ce qui change concrètement, avec les chiffres exacts, et surtout comment éviter le piège de la migration qui casse après l’upgrade.

    Hyper-V change d’échelle

    Le tableau des maximums documenté par Microsoft donne une idée claire de l’ampleur du bond entre Windows Server 2022 et 2025. Côté hôte, le nombre de processeurs logiques passe de 1 024 à 2 048, tout comme les processeurs virtuels disponibles pour la partition racine. Côté VM, une machine virtuelle de génération 2 peut désormais utiliser jusqu’à 2 048 processeurs virtuels (contre 1 024 auparavant), avec jusqu’à 240 To de mémoire. Le nombre de VM actives par serveur reste plafonné à 1 024, et un cluster peut toujours héberger jusqu’à 64 nœuds et 8 000 VM en exécution.

    Ces chiffres ne concernent qu’une poignée d’environnements — peu de clusters tournent déjà à 1 024 processeurs logiques par hôte. Mais si tu gères des VM dédiées au calcul intensif ou à l’IA, qui réclament souvent des dizaines voire des centaines de vCPU par instance, cette marge de manœuvre change ce qui devient possible sans sharding applicatif.

    Le partitionnement GPU gagne la migration à chaud

    Avant Windows Server 2025, partager un GPU physique entre plusieurs VM obligeait à choisir entre l’assignation exclusive (Discrete Device Assignment, DDA) et l’absence totale de migration à chaud. Le GPU Partitioning (GPU-P) change ça : chaque VM reçoit une fraction dédiée du GPU via l’interface SR-IOV, et depuis cette version, tu peux déplacer ces VM d’un hôte à un autre sans interruption.

    Quelques points à vérifier avant de t’y lancer :

    • la migration planifiée fonctionne entre hôtes autonomes dès Windows Server 2025 Standard ; pour la haute disponibilité en cluster (bascule automatique en cas de panne non planifiée), il te faut l’édition Datacenter ;
    • le GPU doit être identique — même fabricant, même modèle, même taille — sur tous les serveurs du cluster, et les pilotes doivent être installés partout à l’identique ;
    • tu ne peux assigner qu’une seule partition GPU par VM, et l’allocation se fait automatiquement — impossible de choisir une partition précise ;
    • pendant la migration, Hyper-V bascule automatiquement sur TCP/IP avec compression, ce qui augmente la charge CPU de l’hôte et allonge la durée du transfert par rapport à une VM sans GPU partitionné.

    Les GPU NVIDIA A2, A10, A16 et A40 sont pris en charge côté matériel, avec des invités Windows 10/11, Windows Server 2019/2022 ou Ubuntu 18.04/20.04 LTS. Pour les détails de configuration complets, la documentation officielle de Microsoft sur le partitionnement GPU liste les prérequis matériels et logiciels.

    Live migration sans Active Directory : enfin possible

    Les clusters workgroup — des clusters à basculement qui ne dépendent pas d’un contrôleur de domaine — existent depuis Windows Server 2016. Mais jusqu’à présent, ils ne supportaient que la migration rapide (quick migration), avec une coupure de service le temps du transfert. Windows Server 2025 ajoute enfin la migration à chaud pour ces clusters.

    Le mécanisme d’authentification repose sur des certificats PKU2U auto-signés plutôt que sur Kerberos : chaque nœud a besoin d’un compte local avec un nom d’utilisateur et un mot de passe identiques. Ça convient bien pour des scénarios où déployer une forêt AD complète ne se justifie pas — un site isolé, une DMZ, un labo. Le trafic de migration n’étant pas chiffré par défaut quel que soit le mode d’authentification, isole ce trafic sur un réseau dédié ou un VLAN si tu passes en production sur ce type de cluster.

    Le piège qui casse tes migrations après la mise à niveau

    C’est le point le plus susceptible de te surprendre en production. Depuis Windows Server 2025, Credential Guard est activé par défaut sur tous les serveurs joints à un domaine qui ne sont pas contrôleurs de domaine. Or la migration à chaud Hyper-V utilisait jusque-là CredSSP par défaut pour la délégation d’identité — et CredSSP ne fonctionne plus correctement avec Credential Guard activé, puisque ce dernier n’autorise que les identifiants fournis explicitement, pas les identifiants mis en cache ou SSO.

    Concrètement : si l’hôte source d’une migration utilise CredSSP avec Credential Guard actif, la migration échoue — et ça touche aussi les outils qui s’appuient sur la migration à chaud en coulisses, comme SCVMM. Les erreurs typiques sont 0x8009030E (« No credentials are available in the security package ») et 0x8009030D (« The credentials supplied to the package were not recognized »).

    La solution recommandée par Microsoft n’est pas de désactiver Credential Guard — ce serait renoncer à une protection réelle contre le vol d’identifiants — mais de basculer vers la délégation Kerberos contrainte (Kerberos Constrained Delegation), compatible avec Credential Guard :

    1. dans Hyper-V Manager, Paramètres Hyper-V > Migrations en direct > Fonctionnalités avancées, sélectionne Kerberos comme protocole d’authentification ;
    2. dans Active Directory, ouvre les propriétés de chaque compte ordinateur Hyper-V concerné, onglet Délégation, et configure « Faire confiance à cet ordinateur pour la délégation uniquement aux services spécifiés » en ajoutant CIFS et Microsoft Virtual System Migration Service pour chaque hôte partenaire ;
    3. si des SPN manquent, enregistre-les avec setspn -s "Microsoft Virtual System Migration Service/" .

    Teste ce basculement en préproduction avant de migrer un cluster entier vers Windows Server 2025 — le jour où tu découvres le problème ne doit pas être celui où tu as besoin de déplacer une VM en urgence. Le détail du problème et la procédure de contournement figurent dans la documentation Microsoft sur les problèmes connus de Credential Guard.

    Et côté stockage

    Deux évolutions moins spectaculaires méritent une mention. D’abord, un nouveau mécanisme de déduplication native ReFS, distinct de l’ancienne fonctionnalité Data Deduplication — les deux ne peuvent pas coexister sur le même volume. Cette dédup ReFS cible les charges actives (VDI, fichiers système), s’appuie sur le block cloning plutôt que sur un magasin de blocs séparé, et s’exécute de façon incrémentale plutôt qu’en réanalysant tout le volume à chaque passage. Ensuite, les performances NVMe sont annoncées en nette hausse par rapport à Windows Server 2022, avec un initiateur NVMe-over-Fabrics intégré pour le raccordement SAN.

    Important à retenir avant de migrer un cluster existant

    Tu ne peux pas ajouter un nœud Windows Server 2025 à un cluster Windows Server 2016 ou 2022 existant — le clustering mixte entre versions majeures n’est pas supporté. Il faut construire un nouveau cluster puis migrer les VM, par export/import, par migration à chaud « shared nothing » si les deux clusters coexistent temporairement sur le même domaine, ou par migration de stockage via SMB ou des volumes partagés de cluster.

    FAQ

    Faut-il l’édition Datacenter pour le partitionnement GPU ?

    Pas pour la migration planifiée entre hôtes autonomes, qui fonctionne dès l’édition Standard. L’édition Datacenter devient nécessaire uniquement si tu veux la haute disponibilité en cluster, avec bascule automatique en cas de panne non planifiée.

    La migration à chaud sans Active Directory est-elle aussi sécurisée que l’originale ?

    L’authentification par certificats PKU2U remplace Kerberos de façon fonctionnellement correcte, mais le trafic de migration reste non chiffré par défaut, comme pour tout cluster Hyper-V. Isoler ce trafic sur un réseau dédié reste recommandé, encore plus en l’absence d’Active Directory pour contrôler les accès.

    Dois-je désactiver Credential Guard pour corriger mes migrations qui échouent ?

    Non — ce n’est pas la correction recommandée par Microsoft. Bascule plutôt vers la délégation Kerberos contrainte, qui est compatible avec Credential Guard et ne te fait pas perdre la protection contre le vol d’identifiants que cette fonctionnalité apporte.

    Puis-je migrer mes VM existantes directement vers un cluster Windows Server 2025 ?

    Pas en ajoutant les nouveaux nœuds à ton cluster actuel — le clustering mixte entre versions majeures n’est pas pris en charge. Construis un nouveau cluster Windows Server 2025, puis migre les VM par export/import, migration à chaud sans partage de stockage, ou migration de stockage, selon ton scénario.

    Si Broadcom et les licences VMware t’ont déjà fait regarder Hyper-V de plus près, ces nouveautés valent le détour — mais planifie le test de la délégation Kerberos avant de toucher à un cluster de production. On a d’ailleurs détaillé comment trancher entre VMware, Hyper-V et Azure Local après la crise des licences Broadcom, et si c’est plutôt une migration depuis VMware que tu prépares, notre guide sur Nutanix Move 6.3 couvre un chemin de migration alternatif.

  • Grafana 13.2 : Saved Queries en GA et la fin de tnsnames.ora

    Grafana 13.2 : Saved Queries en GA et la fin de tnsnames.ora

    Depuis Grafana 13.2, tu n’as plus besoin d’un fichier tnsnames.ora pour connecter une source Oracle : une chaîne au format host:port/service suffit, via la nouvelle méthode Easy Connect Plus. C’est le genre de détail qui ne fait pas la une, mais qui t’évite un vrai point de friction en prod. Cette version, sortie fin septembre 2026, en aligne une bonne dizaine d’autres dans le même esprit : moins de configuration à la main, plus de fonctionnalités passées en disponibilité générale.

    Dashboards et requêtes : ce qui passe en GA

    Les saved queries (requêtes sauvegardées) sont désormais en disponibilité générale sur Grafana Enterprise et Grafana Cloud. Tu peux les ouvrir directement depuis la palette de commandes (Cmd/Ctrl+K) pour les lancer dans Explore, et surtout les provisionner avec Terraform — ce qui les fait enfin entrer dans ton flux infrastructure-as-code, au lieu de rester un artefact créé à la main dans l’UI.

    Trois autres nouveautés GA sur les dashboards :

    • L’éditeur de variables de requête a été redessiné : aperçu des valeurs en haut, éditeur à onglets en dessous, pour voir le résultat pendant que tu modifies la requête plutôt qu’après coup.
    • Le regroupement multi-sélection permet, en mode édition, de sélectionner plusieurs panneaux à la fois pour les regrouper dans une ligne ou un onglet, sans les glisser un par un.
    • L’indication d’auto-layout est plus claire quand glisser le coin d’un panneau n’a visiblement aucun effet — un bug UX mineur mais agaçant, enfin expliqué à l’écran.

    Le panneau « View panel » avec barre latérale de contrôles arrive lui en préversion publique seulement : il permet à un utilisateur sans droits d’édition d’ajuster l’affichage d’une visualisation, notamment en découpant une série temporelle en un graphique par série ou par label. Pas encore stable, donc pas pour la prod si tu es sensible aux breaking changes.

    Les sources de données qui t’évitent du throttling

    Pour qui pilote des dashboards sur beaucoup de ressources Azure, la nouveauté qui compte vraiment est l’API Batch Metrics d’Azure Monitor, passée en GA. Avant, Grafana envoyait une requête de métriques par ressource. Maintenant, les requêtes éligibles sont regroupées en un seul envoi. Résultat concret : moins d’appels à l’API Azure, des dashboards qui chargent plus vite, et surtout moins de risque de passer en throttling sur les tableaux de bord qui interrogent des dizaines de ressources en parallèle. Si une partie de tes dashboards Azure Monitor rame aux heures de pointe, c’est la fonctionnalité à activer en priorité après la mise à jour.

    Deux autres sources de données progressent :

    • OpenSearch reçoit un sélecteur d’index en GA : bouton « Select index », nombre de documents et santé du cluster affichés par index, recherche par sous-chaîne, jokers ou expression régulière entre slashes.
    • BigQuery et Google Cloud Monitoring passent en GA sur Grafana Cloud pour la fédération d’identité de charge de travail (Workload Identity Federation) : plus de fichier de clé de compte de service à gérer, le jeton OIDC de l’utilisateur connecté est échangé contre un jeton Google Cloud à courte durée de vie via le Security Token Service.

    Git Sync s’ouvre enfin aux grandes organisations

    Jusqu’ici, Git Sync — la synchronisation bidirectionnelle des dashboards et dossiers entre Git et Grafana, qu’on avait couverte à l’arrivée de Grafana 13.1 — ne gérait les webhooks temps réel et l’intégration de pull requests que pour GitHub, et seulement sur certains dépôts publics. La 13.2 corrige ce point sur deux fronts :

    • Support de GitHub Enterprise (Server et Cloud) en GA — un vrai déblocage pour les organisations qui n’avaient tout simplement pas accès à Git Sync avant.
    • Webhooks GitLab et Bitbucket en GA, avec les mêmes mises à jour en temps réel et la même intégration de pull requests que sur GitHub.

    Ajoute à ça la possibilité de définir un auteur de commit personnalisé (« author override ») à partir de la 13.2.0 — sans quoi Grafana utilise par défaut le nom et l’e-mail de l’utilisateur connecté, ce qui peut vite polluer ton historique Git si plusieurs personnes modifient les mêmes dashboards.

    Dépannage interne : exporter les traces sans déployer de collector

    Dernier ajout notable : l’export des traces internes de Grafana vers un fichier, en GA sur OSS comme sur Enterprise. Tu peux désormais collecter les traces de Grafana lui-même pour du dépannage de performance, sans avoir à déployer un OpenTelemetry Collector ni un backend de tracing dédié juste pour ça — utile si tu veux diagnostiquer un ralentissement ponctuel sans monter toute une stack d’observabilité pour l’occasion. Pour creuser l’interopérabilité OpenTelemetry/Prometheus plus large, on l’avait détaillée dans cet article.

    FAQ

    Dois-je migrer tout de suite vers la 13.2 ?

    Pas dans l’urgence, sauf si tu es bloqué par l’un des points ci-dessus (throttling Azure Monitor, Git Sync sur GitHub Enterprise). Dans tous les cas, passe par le guide de mise à jour officiel avant de toucher à un environnement de production.

    Les saved queries sont-elles disponibles en version open source ?

    La documentation confirme la disponibilité générale sur Enterprise et Grafana Cloud ; elle ne précise pas le statut pour la version open source, donc vérifie directement sur ton instance avant d’en dépendre.

    L’API Batch Metrics d’Azure Monitor fonctionne-t-elle sur toutes mes requêtes ?

    Non, seulement sur les requêtes de métriques éligibles au regroupement — pas sur l’ensemble du trafic Azure Monitor généré par tes dashboards.

    Ce qu’il faut retenir

    Pas de rupture majeure dans cette version, mais une accumulation de frictions résolues : moins d’appels API côté Azure, moins de bricolage côté Oracle, et Git Sync enfin utilisable dans les grandes organisations sous GitHub Enterprise. Si tu avais mis Git Sync de côté faute de support GitHub Enterprise, c’est le bon moment pour retester. Pour le détail complet de chaque changement, le changelog officiel de la 13.2 reste la référence à consulter avant de planifier ta montée de version — et si tu veux revoir d’où vient cette série, notre article sur l’arrivée de Grafana 13 pose les bases.

  • Cloud Rewind : Commvault restaure l’appli Azure, pas que les données

    Cloud Rewind : Commvault restaure l’appli Azure, pas que les données

    57 % des RSSI mettent en moyenne plus de 4,5 jours à restaurer complètement leurs opérations après une cyberattaque, et aucun ne descend sous 24 heures. C’est le chiffre qu’avance Commvault — tiré d’une enquête d’Absolute Security auprès de 750 RSSI, le rapport « The Resilient CISO » — pour justifier l’extension de Cloud Rewind à Azure, annoncée le 18 août 2026. Le constat derrière ce chiffre : la plupart des plans de reprise ne découvrent qu’ils sont incomplets qu’au moment où on en a vraiment besoin.

    Ce que Cloud Rewind fait, que ta sauvegarde classique ne fait pas

    Une sauvegarde — la tienne, Veeam, Azure Backup, peu importe — protège des données. Elle ne protège pas la manière dont ces données s’articulent avec le reste : réseau virtuel, groupes de sécurité, identités managées, app settings, dépendances entre services. Après un incident, restaurer les données ne suffit pas si personne ne sait reconstruire l’infrastructure qui tournait autour.

    C’est exactement le créneau que vise Cloud Rewind, lancé en octobre 2024 et bâti sur la technologie d’Appranix, une start-up cloud de Boston rachetée par Commvault. Le service découvre en continu les ressources cloud, cartographie leurs dépendances, puis orchestre la reconstruction de l’application complète — infrastructure, configuration et dépendances — pas seulement ses données. Tu peux aussi simuler une reprise avant l’incident réel, y compris dans un environnement isolé (air-gapped), ce qui change tout par rapport à un test de restauration classique qu’on fait une fois par an sous contrainte.

    Le changement d’échelle du 18 août 2026

    L’annonce triple la gamme de ressources Azure couvertes, pour atteindre 62 % des types de ressources que Commvault juge pertinents pour des déploiements d’entreprise. Deux nouveautés accompagnent cet élargissement :

    • Protection Groups : les données applicatives et la configuration cloud sont regroupées dans un seul flux de reprise isolé, plutôt que gérées séparément.
    • Protection basée sur des politiques : les nouvelles ressources découvertes s’inscrivent automatiquement selon leurs tags, leur région et leur type — et ça fonctionne sur plusieurs clouds depuis un seul workflow, pas uniquement sur Azure.

    La couverture Azure élargie reste annoncée « dans les prochains mois » au moment de la publication — à vérifier directement dans ta console Commvault Cloud si tu es déjà client, la bascule peut très bien être en cours au moment où tu lis ces lignes.

    Est-ce que ça remplace ce que tu as déjà en place ?

    Non, et ce serait une erreur de le présenter comme ça. Si tu appliques déjà la règle 3-2-1-1-0 ou que tu utilises Veeam Data Cloud Vault pour l’immuabilité de tes sauvegardes Azure, Cloud Rewind ne remplace rien de tout ça : il vient en complément, sur la couche qui manque systématiquement dans les plans de PRA — la capacité à reconstruire l’environnement autour de la donnée, pas seulement la donnée elle-même. Même logique côté immuabilité Azure Backup : l’immuabilité protège contre la suppression ou le chiffrement de ta sauvegarde, pas contre l’absence de plan pour redéployer l’infra qui l’entoure.

    Le modèle commercial suit cette logique de complément : Cloud Rewind est un module add-on de Commvault Cloud, facturé à l’usage selon le nombre de ressources cloud protégées — pas un forfait global qui remplacerait ta licence de sauvegarde existante.

    Le contexte Microsoft derrière l’annonce

    Commvault et Microsoft ont signé en juin 2026 un accord pluriannuel pour proposer la technologie de reprise de Commvault comme service Azure natif. Vu sous cet angle, l’extension de couverture d’août n’est pas un coup isolé : c’est une étape dans un rapprochement plus large entre les deux éditeurs, qui doit encore se traduire par une intégration plus profonde dans les mois qui viennent. Melinda Marks, analyste chez Omdia, résume le problème que ça cherche à adresser : beaucoup d’organisations découvrent que leur plan de reprise est incomplet « seulement après qu’un incident s’est produit ».

    FAQ

    Cloud Rewind remplace-t-il mon outil de sauvegarde ?

    Non. Il protège la reconstruction de l’application (infra, configuration, dépendances), pas les données elles-mêmes — qui restent la responsabilité de ton outil de sauvegarde.

    Quelles ressources Azure exactement sont couvertes ?

    Commvault ne publie pas la liste détaillée des types de ressources, seulement le chiffre global de 62 % des types jugés pertinents pour l’entreprise. Si cette granularité est bloquante pour ta décision, il faut la demander directement à ton contact Commvault.

    Qui est derrière la technologie ?

    Appranix, une start-up cloud de Boston rachetée par Commvault en avril 2024, avant le lancement de Cloud Rewind en octobre de la même année.

    Ce qu’il faut retenir

    Teste ta reprise avant d’en avoir besoin : c’est le vrai message derrière cette annonce, bien plus que la fonctionnalité elle-même. Que tu passes par Cloud Rewind ou par un run book maison, la question à te poser est la même — si ton datacenter virtuel disparaît ce soir, qui sait reconstruire le réseau, les identités et les dépendances autour de tes sauvegardes, et en combien de temps ? Si la réponse n’est pas satisfaisante, c’est le bon moment pour relire ta stratégie de PRA plutôt que d’attendre le prochain incident pour le découvrir.

  • Dev Box et Deployment Environments ferment : ton plan Azure

    Dev Box et Deployment Environments ferment : ton plan Azure

    Le 14 septembre 2026, Microsoft Dev Box est entré dans sa période de fermeture. Tu peux encore créer des dev box aujourd’hui, mais la date de retrait complet — le 18 septembre 2028 — est désormais fixée dans la documentation officielle. Cinq mois plus tôt, Azure Deployment Environments (ADE) a reçu son propre avis de retrait, pour le 22 février 2027. Deux services complémentaires, souvent déployés ensemble sur le même dev center, deux calendriers totalement différents. Le risque : traiter les deux comme un seul problème et rater l’une des deux échéances.

    Dev Box : la fermeture a déjà commencé

    Dev Box retire officiellement le 18 septembre 2028 à 17h00 UTC. Mais la phase qui compte pour toi a démarré le 14 septembre 2026 à 16h00 UTC : c’est le début de la « closing-down period ». Concrètement, tu peux continuer à utiliser tes dev box existantes pendant toute la transition, mais Microsoft est clair sur un point — n’ajoute pas de nouvelles dépendances de long terme sur un service qui ferme.

    Le remplacement recommandé est Windows 365, avec des Cloud PC persistants pilotés par Intune et Entra ID. Mais la documentation Microsoft elle-même insiste : ce n’est pas un remplacement en un clic. L’architecture change (provisioning par politique plutôt que self-service par projet), la gestion du réseau change, et il n’existe aucun outil de migration automatisé. Tu dois reprovisionner les postes, recréer les politiques et transférer les données utilisateur (y compris WSL et les identifiants locaux) par les voies classiques.

    Azure Deployment Environments : une fenêtre plus courte, un remplacement moins évident

    ADE retire le 22 février 2027 — moins d’un an et demi après l’annonce. À cette date, les opérations d’écriture (création, déploiement, redéploiement) seront bloquées ; les opérations de lecture et de suppression resteront disponibles pour une période de nettoyage limitée dans le temps.

    Ici, pas de solution unique recommandée. Microsoft Learn propose trois pistes selon ton contexte :

    • Azure Resource Manager / Bicep en direct, si tes équipes gèrent déjà souscriptions, identités et policies via leurs propres process de plateforme.
    • Azure Verified Modules (AVM), pour des briques Azure standardisées et gouvernées — à valider sur la couverture, le versioning et la politique associée.
    • Azure DevOps / GitHub Actions, pour intégrer le provisionnement d’environnement directement dans les pipelines CI/CD existants.

    Et la documentation est honnête sur un point qu’on voit rarement écrit aussi franchement par un éditeur : « aucune des solutions tierces identifiées ne prend en charge directement un cycle de vie Bicep ou ARM ». Si tu comptais sur un partenaire pour faire la bascule à ta place, il va falloir regarder ailleurs — ou repasser par l’IaC natif.

    Le piège : les deux services partagent les mêmes dev centers

    Dev Box et ADE s’organisent tous les deux autour de la notion de dev center. C’est pratique au quotidien, ça devient un piège au moment du nettoyage : si tu commences à démanteler tes ressources ADE en février 2027, ne supprime pas les dev centers ou projets partagés avant d’avoir vérifié qu’aucun pool Dev Box n’en dépend encore — Dev Box, lui, continue de tourner jusqu’en 2028.

    Pour objectiver l’inventaire plutôt que de le faire à la main, commence par une requête Azure Resource Graph sur les ressources concernées :

    az graph query -q "
    Resources
    | where type in (
        'microsoft.devcenter/devcenters',
        'microsoft.devcenter/projects',
        'microsoft.devcenter/devcenters/pools',
        'microsoft.devcenter/devcenters/environmenttypes'
    )
    | project name, type, resourceGroup, subscriptionId
    "

    Complète ensuite avec le workbook Azure Advisor « Service Retirement », qui recense les abonnements et ressources concernés par les retraits annoncés — Dev Box et ADE y figurent désormais tous les deux.

    Ce qui ne figure pas dans l’inventaire ARM

    Point à ne pas manquer : les environnements ADE déployés n’ont pas d’ID de ressource Azure Resource Manager classique. Resource Graph ne les verra pas. Pour les lister, il faut passer par le portail développeur, l’Azure CLI dédié à ADE, les API data-plane, ou ta télémétrie opérationnelle existante. Et supprimer un environnement ADE ne supprime pas forcément toutes les ressources Azure qu’il a déployées hors de son groupe de ressources géré — vérifie Azure Cost Management après coup pour confirmer que la facturation s’est bien arrêtée.

    FAQ

    Le retrait d’ADE entraîne-t-il aussi celui de Dev Box ?

    Non. Ce sont deux retraits indépendants, avec deux dates différentes (février 2027 pour ADE, septembre 2028 pour Dev Box), même s’ils partagent une partie de l’infrastructure.

    Puis-je encore créer de nouvelles dev box aujourd’hui ?

    Oui, la création reste possible pendant la période de fermeture. Mais évite d’en faire un socle durable : chaque nouvelle dépendance créée maintenant devra être migrée de toute façon avant 2028.

    Existe-t-il un outil de migration automatique vers Windows 365 ?

    Non. Microsoft le précise explicitement : il faut provisionner les Cloud PC cibles, recréer les politiques et applications, puis transférer les données utilisateur par les processus validés par ton organisation.

    Ce qu’il faut retenir

    Deux échéances, deux ressources partagées, un seul inventaire à faire — mais surtout, ne traite pas ADE et Dev Box comme un bloc unique sous prétexte qu’ils cohabitent dans le même dev center. Commence par la requête Resource Graph ci-dessus, croise-la avec le workbook Advisor, et découpe ton plan de migration en deux chantiers distincts avec deux dates butoir. Si tu veux la vue d’ensemble des autres retraits Azure du mois, on a fait le point sur les retraits d’octobre 2026 — et si Bicep/AVM devient ta cible de remplacement pour ADE, notre article sur la bascule vers les Azure Verified Modules te donnera une base concrète pour démarrer.

  • BadSuccessor : le correctif dMSA ne suffit pas

    BadSuccessor : le correctif dMSA ne suffit pas

    Windows Server 2025 a introduit les delegated Managed Service Accounts (dMSA), pensés pour migrer en douceur les comptes de service hérités. On avait couvert les principaux changements sécurité de cette version pour Active Directory dans cet article — les dMSA n’y figuraient pas encore comme un risque, et c’est justement le sujet du jour. Quelques mois après leur sortie, le chercheur Yuval Gordon (Akamai) a montré qu’ils ouvraient une voie d’élévation de privilèges vers n’importe quel compte du domaine — y compris un Domain Admin — sans toucher à un seul contrôleur de domaine. Le nom retenu : BadSuccessor.

    Microsoft a corrigé la faille originale (CVE-2025-53779) lors d’un Patch Tuesday d’août 2025 qui corrigeait 107 CVE au total. Le problème : le correctif ferme une porte, pas la pièce entière. Une variante post-patch reste exploitable aujourd’hui, et si tu as un seul contrôleur de domaine Windows Server 2025 dans ton environnement, ça te concerne directement.

    Pourquoi un simple droit sur une OU suffisait à devenir Domain Admin

    Un dMSA référence le compte qu’il remplace via l’attribut msDS-ManagedAccountPrecededByLink. Avant le correctif, le KDC construisait le PAC (Privilege Attribute Certificate) du dMSA à partir de ce seul attribut, sans vérifier que le lien était réciproque. Concrètement : si tu pouvais créer un dMSA — ce qui ne demande que le droit CreateChild sur une unité d’organisation — tu pouvais le faire pointer vers n’importe quel compte, récupérer ses privilèges effectifs et ses clés Kerberos dès l’authentification suivante.

    Le chiffre qui donne la mesure du problème : selon l’analyse d’Akamai, 91 % des environnements Active Directory examinés accordaient ce droit CreateChild à au moins un utilisateur hors Domain Admins sur au moins une OU. Autrement dit, la plupart des forêts avaient déjà, sans le savoir, la précondition réunie.

    Ce que le correctif a réellement changé

    Le patch agit dans kdcsvc.dll : le KDC exige désormais un appairage mutuel au moment de l’émission du ticket. Le compte cible doit lui aussi référencer le dMSA en retour, via les attributs msDS-SupersededManagedAccountLink et msDS-SupersededServiceAccountState. Un lien à sens unique — celui que BadSuccessor original exploitait — ne produit plus de ticket. L’escalade directe, sans aucun droit sur le compte cible, est fermée.

    La variante qui survit : forger l’appairage

    Ces nouveaux attributs ne sont pas protégés en écriture. Si tu disposes à la fois de CreateChild sur une OU et de GenericWrite sur le compte cible, tu peux écrire toi-même les deux côtés du lien et obtenir un appairage valide aux yeux du KDC. Résultat : tu t’authentifies en tant que dMSA et récupères le paquet de clés contenant les clés Kerberos du compte cible.

    C’est présenté comme une alternative ciblée au DCSync classique — sans passer par l’interface de réplication DRS, donc sans les signatures de détection habituelles associées à une réplication anormale. Deux risques résiduels concrets, donc : l’obtention d’identifiants via appairage forgé, et l’extraction de secrets dans un domaine déjà partiellement compromis.

    Comment détecter une tentative

    Avant même de promouvoir ton premier contrôleur de domaine Windows Server 2025, active l’audit « Audit Directory Service Changes » (sous-catégorie DS Access) sur l’ensemble de tes DC, et pose des SACL sur les objets dMSA. Les événements à surveiller :

    • 5137 — création d’un dMSA
    • 5136 — modification d’un attribut sur un objet existant
    • 2946 et 4768/4769 — émission de TGT/TGS pour un dMSA
    • 4662 — solution de repli si les événements ci-dessus ne sont pas disponibles, mais à filtrer impérativement par GUID de schéma pour éviter une surcharge de ton SIEM

    Cinq attributs méritent une surveillance dédiée : msDS-GroupMSAMembership, msDS-ManagedAccountPrecededByLink, msDS-SupersededManagedAccountLink, msDS-SupersededServiceAccountState et msDS-DelegatedMSAState. L’enjeu réel n’est pas de repérer un dMSA isolé — c’est de corréler, dans une fenêtre de quelques minutes, la séquence création → appairage → authentification, en tenant compte du décalage horaire entre contrôleurs de domaine. Si tu veux revoir comment Kerberos a évolué sur tes DC cette année, on avait couvert la bascule RC4 dans cet article.

    Ce qu’il faut faire, dans l’ordre

    D’abord, vérifie que le correctif d’août 2025 est appliqué sur tous tes contrôleurs de domaine — ça ferme la voie d’escalade la plus simple, sans aucune précondition sur le compte cible. Ensuite, et c’est le point que la plupart des équipes négligent : traite les dMSA comme du matériel d’identité Tier 0. Audite les délégations CreateChild sur tes OU avec BloodHound, retire ce droit à tout compte qui n’en a pas explicitement besoin, et fais le même ménage sur les GenericWrite superflus sur tes comptes sensibles.

    Le correctif Microsoft referme une porte spécifique. Les permissions ACL de ton annuaire restent, elles, la vraie barrière — et c’est celle qui ne se corrige pas avec un Patch Tuesday.

    FAQ

    Suis-je concerné si je n’utilise pas encore les dMSA ?

    Le risque apparaît dès qu’un contrôleur de domaine Windows Server 2025 est promu dans ton domaine, même si tu n’as créé aucun dMSA volontairement — l’évaluation se fait domaine par domaine, pas à l’échelle de la forêt entière.

    Le correctif d’août 2025 est-il suffisant à lui seul ?

    Il ferme l’escalade originale sans précondition sur la cible, ce qui est déjà la partie la plus dangereuse. Mais la variante à appairage forgé reste possible si les permissions CreateChild/GenericWrite ne sont pas resserrées.

    Comment repérer les droits CreateChild à risque sur mes OU ?

    BloodHound reste l’outil de référence pour cartographier ce type de délégation ; combine-le avec un audit SACL avant de promouvoir ton premier DC Windows Server 2025, pas après.

    Prochaine étape

    Si tu as déjà des contrôleurs de domaine Windows Server 2025, vérifie dès aujourd’hui la présence du correctif CVE-2025-53779 sur chacun d’eux, puis lance un audit BloodHound des droits CreateChild sur tes OU. C’est le genre de chantier qu’on repousse facilement — jusqu’au jour où un pentest ou un incident le fait remonter à ta place.

  • DSC v3.3 : RegistryList, Personalization et –what-if étendu

    DSC v3.3 : RegistryList, Personalization et –what-if étendu

    Le 17 septembre 2026, l’équipe PowerShell a publié Desired State Configuration (DSC) v3.3.0. On avait couvert la feuille de route de cette équipe pour 2026 dans cet article ; cette version en est la dernière étape publiée. Pas de refonte spectaculaire cette fois, mais trois ressources Windows qui comblent des manques réels, un adaptateur générique pour le registre, et une extension du mode --what-if à des ressources où tu en avais vraiment besoin.

    Trois nouvelles ressources dans Microsoft.Windows

    RegistryList : une instance, plusieurs clés

    Jusqu’ici, gérer dix valeurs de registre voulait dire dix instances de Microsoft.Windows/Registry dans ta configuration. Microsoft.Windows/RegistryList regroupe un tableau d’entrées dans une seule ressource. Le binaire registry.exe sous-jacent gagne un commutateur --list pour ça, et les manifestes correspondants sont désormais rassemblés dans un fichier unique, registry.dsc.manifests.json, plutôt qu’éparpillés.

    WindowsFeatureList : le même principe pour les rôles et fonctionnalités

    Même logique appliquée à la gestion des fonctionnalités Windows (rôles, composants optionnels) : une liste plutôt qu’une ressource par fonctionnalité. Cette ressource est une contribution externe, signée Gijs Reijn — un bon rappel que DSC v3 reste un projet open source sur GitHub, pas seulement un produit Microsoft fermé.

    Personalization : accent, thème clair/sombre, transparence

    Nouvelle venue : une ressource qui pilote les réglages de personnalisation Windows — couleur d’accent, mode clair ou sombre, transparence. Utile pour standardiser l’image d’un poste de travail à grande échelle sans passer par une stratégie de groupe dédiée à chaque réglage.

    Pour découvrir ce que chaque ressource accepte :

    dsc resource list 'Microsoft.Windows/*'
    dsc resource schema --resource Microsoft.Windows/Personalization

    L’adaptateur de registre générique

    Microsoft.Windows.Adapter/Registry fait le lien entre des propriétés JSON ordinaires et leur représentation dans le registre, en gérant lui-même les conversions. Pour l’instant, ces conversions ne couvrent que les types utilisés par Personalization — si tu écris une ressource personnalisée qui a besoin d’un type non géré, l’équipe invite explicitement à ouvrir une issue sur le dépôt plutôt que de contourner le problème en silence.

    --what-if s’étend à trois familles de ressources

    Prévisualiser un set sans y toucher, c’est le genre de garde-fou qu’on regrette de ne pas avoir eu la première fois qu’on casse un service en production. La v3.3 étend --what-if à Microsoft.Windows/Service, Microsoft.Windows/FirewallRuleList et aux ressources de configuration SSHD :

    # service.dsc.config.yaml
    $schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
    resources:
      - name: Print Spooler
        type: Microsoft.Windows/Service
        properties:
          name: Spooler
          startType: Disabled
    dsc config set --what-if --file ./service.dsc.config.yaml

    Dans la même veine, FirewallRuleList gagne une propriété unspecifiedRules, qui décide quoi faire des règles non listées dans ta configuration — avec action obligatoire, et direction/profiles en option.

    Filtrage d’export expérimental : attention, la syntaxe va encore bouger

    Quand une ressource ne sait pas filtrer nativement les instances qu’elle exporte, le moteur DSC peut désormais récupérer la liste complète et filtrer lui-même, à partir des propriétés que tu passes en entrée. Le mécanisme accepte les caractères génériques (*, insensibles à la casse) sur les valeurs, s’applique aux sous-propriétés imbriquées des objets, et traite plusieurs éléments d’un tableau comme un OU logique :

    # services.dsc.config.yaml
    $schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
    resources:
      - name: Automatically starting local account services
        type: Microsoft.Windows/Service
        properties:
          startType: Auto*
          logonAccount: '*Local*'

    Pas de gestion des plages de versions ni des bornes numériques pour l’instant — évite donc de t’appuyer là-dessus pour filtrer par version de composant. L’équipe prévient elle-même que la syntaxe de cette fonctionnalité expérimentale peut changer avant de se stabiliser.

    Autres changements à ne pas manquer

    dsc mcp devient dsc server (l’ancien nom reste un alias), avec de nouveaux outils exposés (show_dsc_schema(), invoke_dsc_function(), invoke_dsc_expression()) pour qui pilote DSC via le protocole MCP plutôt qu’en ligne de commande directe. La fonction format() quitte le statut expérimental. Deux nouvelles fonctions arrivent : stateChanged(resourceId(...)), pour savoir si un set a réellement modifié quelque chose, et restartRequired() avec ses variantes système/service/processus.

    Côté outillage en ligne de commande, --required-version remplace --version sur dsc resource * (l’ancien flag reste un alias) et accepte des plages façon Rust — ^1.1, ~1.2.3 :

    dsc resource schema --resource Microsoft.Windows/RegistryList --required-version '^1.1.0'

    Microsoft/OSInfo accepte maintenant des comparateurs (=, <, <=, >, >=) sur la version du système — un seul par instance. Et côté Linux, DSC v3.3 arrive enfin sur packages.microsoft.com en RPM et DEB, à l’image de la bascule que PSResourceGet a connue vers le Microsoft Artifact Registry (on en parlait ici) — ça simplifie l’installation sur les distributions qui s’appuient sur ce dépôt.

    FAQ

    Faut-il migrer mes ressources Registry existantes vers RegistryList ?

    Pas dans l’urgence. Microsoft.Windows/Registry reste disponible ; RegistryList a surtout du sens si tu gères un grand nombre d’entrées et que tu veux réduire le nombre d’instances dans ta configuration.

    DSC v3.3 est-il compatible avec les configurations écrites pour v3.0/v3.1 ?

    L’article d’annonce ne signale aucun changement cassant pour les ressources existantes — les nouveautés sont additives (nouvelles ressources, extension de fonctionnalités existantes). Teste quand même en --what-if avant de déployer en production, par principe.

    Où suivre l’évolution du projet ?

    DSC v3 est développé en open source sur GitHub ; c’est là que partent les issues, les demandes de ressources et les contributions comme celle de WindowsFeatureList.

    Pour aller plus loin

    Si tu n’as pas encore basculé vers DSC v3, le guide d’installation officiel couvre Windows, Linux et macOS. Les notes de version complètes, avec la liste de tous les changements depuis v3.0, sont disponibles sur le dépôt GitHub du projet. Si une des trois nouvelles ressources comble un manque que tu avais contourné avec un script maison, c’est probablement le bon moment pour le remplacer.

  • Immutable Actions : GitHub ferme la faille tj-actions

    Immutable Actions : GitHub ferme la faille tj-actions

    Le 14 mars 2025, l’action GitHub tj-actions/changed-files a été compromise : un tag réécrit a pointé vers du code qui exfiltrait les secrets des runners vers les logs publics. Environ 23 000 dépôts l’utilisaient. Pas besoin d’exploiter une faille applicative — il suffisait de contrôler un tag Git pour réécrire silencieusement toutes les références qui pointaient vers lui.

    Dix-huit mois plus tard, GitHub a généralisé une réponse structurelle à ce type d’attaque : les immutable actions. Le principe est simple à énoncer, un peu moins simple à mettre en œuvre correctement — et surtout, ça ne protège personne tant que tu n’as pas changé quelque chose dans tes workflows.

    Ce qui s’est cassé avec tj-actions/changed-files

    Référencer une action par un tag comme @v45 revient à faire confiance à ce que ce tag désigne au moment de l’exécution, pas au moment où tu as écrit ton workflow. Un tag Git n’est qu’un pointeur : son propriétaire peut le faire pointer ailleurs sans que personne ne le remarque. C’est exactement ce qui s’est produit avec tj-actions/changed-files (CVE-2025-30066) : les tags de version ont été réécrits pour exécuter un script qui dumpait la mémoire des runners dans les logs publics, à la recherche de secrets.

    Le pinning par SHA de commit complet (@a1b2c3d...) protège contre ce scénario précis. Mais il a une limite que peu de gens vérifient : une action composite peut elle-même appeler d’autres actions, et ces dépendances-là restent mutables même si l’action de premier niveau est épinglée. Tu peux donc être rigoureux sur ton propre workflow et rester exposé via une couche que tu ne vois jamais.

    Comment fonctionnent les immutable actions

    Depuis leur généralisation (suivie publiquement sur la roadmap GitHub), une action publiée en version immuable n’est plus distribuée comme un simple tag Git : elle devient un artefact OCI, stocké dans GitHub Packages et adressé par un digest de contenu. Ce digest ne change jamais pour une version donnée — toute correction passe obligatoirement par une nouvelle version.

    Concrètement, à l’exécution d’un job, le runner résout la version demandée, récupère le digest attendu, et le compare à celui qu’il vient de télécharger avant d’exécuter le moindre code de l’action. Un écart interrompt le job. Les actions composites sont dépliées récursivement, donc le graphe complet des dépendances — y compris celles que tu ne déclares jamais toi-même — devient vérifiable de la même façon.

    Et le pinning par SHA, alors ?

    Il reste utile, notamment pour les actions qui n’ont pas encore migré vers la distribution immuable — ce qui concerne la grande majorité des dizaines de milliers d’actions publiées sur le Marketplace. On avait détaillé les bonnes pratiques de pinning juste après l’incident tj-actions, dans cet article : elles restent valables, les deux mécanismes se complètent plutôt qu’ils ne se remplacent.

    Publier une action immuable (côté mainteneur)

    Si tu maintiens une action, le passage se fait via le workflow dédié actions/publish-immutable-action, qui prend ton code existant et le publie dans GitHub Packages sous forme d’image versionnée, selon un modèle build → package → publish entièrement automatisé. Côté utilisateurs de ton action, rien ne change dans leur syntaxe : une référence par tag (@v3) continue de fonctionner, elle pointe simplement désormais vers une version packagée et vérifiée plutôt que vers un tag Git classique. Seules les références par SHA de commit brut ou par nom de branche doivent migrer vers une référence de version.

    Ce que la généralisation ne fait pas automatiquement

    C’est le point que la plupart des annonces passent sous silence : la disponibilité de la fonctionnalité n’oblige personne à l’utiliser, et GitHub ne propose aujourd’hui aucune politique native pour l’exiger. Tu peux avoir des centaines de workflows qui référencent encore des actions mutables sans qu’aucun signal ne te le dise — sauf à le vérifier toi-même.

    Une solution communautaire répandue consiste à transformer cette vérification en required workflow, via l’action joshjohanning/ensure-immutable-actions (décrite en détail ici). Elle classe chaque action référencée dans un workflow en trois catégories — première partie (actions/*, github/*), immuable (release immuable ou SHA complet), ou mutable — et fait échouer la vérification si une action mutable est détectée :

    name: Check Action Immutability
    on:
      pull_request:
    permissions:
      contents: read
    jobs:
      check-immutable:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v6
          - name: Ensure immutable actions
            uses: joshjohanning/ensure-immutable-actions@v2

    Ce workflow se déclare ensuite comme obligatoire dans un ruleset d’organisation (Settings → Rules → Rulesets → Require workflows to pass before merging), en mode actif pour bloquer les PR non conformes, ou en mode évaluation pour observer avant de durcir la règle. L’intérêt de ce contrôle continu : même si un mainteneur désactive l’immuabilité sur sa prochaine release, la PR suivante qui référence cette version mutable se fait signaler.

    Ce que ça ne règle pas

    L’immuabilité verrouille une version publiée ; elle ne dit rien de ce qu’un mainteneur légitime décide de publier ensuite. Si son compte est compromis, ou s’il publie délibérément une nouvelle version piégée, cette nouvelle version sera immuable elle aussi — et tout aussi dangereuse. La revue de code et le scan de dépendances restent nécessaires, l’immuabilité ne les remplace pas.

    Deux autres limites à connaître : la signature et l’attestation de provenance (via Sigstore), ainsi que le scan anti-malware des actions publiées, sont présentées comme des évolutions à venir, pas comme des protections déjà actives aujourd’hui. Et une grande partie des actions les moins utilisées du Marketplace ne migreront probablement jamais, faute de maintenance active — ta politique de blocage doit rester la solution de repli pour ces cas-là, pas l’immuabilité seule.

    FAQ

    Les immutable actions remplacent-elles le pinning par SHA ?

    Non. Elles couvrent un angle mort du pinning par SHA (les dépendances internes des actions composites), mais tant qu’une action n’a pas migré, le SHA reste ta seule protection contre la réécriture de tag.

    Dois-je changer la syntaxe de mes workflows existants ?

    Pas si tu références déjà les actions par tag de version (@v4, par exemple). Seules les références par SHA de commit brut ou par branche nécessitent une mise à jour vers une version sémantique.

    Comment savoir si une action que j’utilise est déjà immuable ?

    Aucune commande native ne le liste encore de façon exhaustive ; des outils tiers comme le workflow ensure-immutable-actions ci-dessus font ce travail de vérification à ta place.

    Passe à l’action

    Commence par vérifier si les actions tierces les plus critiques de ton organisation — celles qui touchent au déploiement ou à la publication d’artefacts — ont déjà une version immuable disponible. Si oui, mets à jour tes références de version. Si non, le pinning par SHA reste ta meilleure protection en attendant. Et dans tous les cas, un required workflow qui vérifie ça automatiquement t’évite de devoir y repenser à chaque nouveau pipeline.