Code ouvert

Entra-Credential-Monitor

Chaque locataire Entra ID accumule des inscriptions d’applications, et chaque inscription détient des secrets et des certificats qui expirent. Personne ne s’en aperçoit jusqu’à ce que l’intégration qu’ils alimentent cesse de fonctionner. Ce moniteur s’en aperçoit un mois plus tôt — en lecture seule, tous les mois, et sans rien à exploiter entre-temps.

Le problème

Un secret client expiré, c’est la panne que personne n’avait prévue — parce que rien ne le surveillait.

Les identifiants d’application sont la plomberie d’un locataire Entra ID : intégrations, démons et pipelines s’authentifient tous avec des secrets et des certificats dont les dates d’expiration ont été fixées des mois ou des années plus tôt, par quelqu’un qui n’est peut-être plus là. Le portail ne vous appellera pas quand l’un d’eux expirera ; l’intégration s’arrête, tout simplement. Nous avons bâti le moniteur pour de vrais environnements clients — et le maintenons en code ouvert, parce que ce problème n’est l’avantage concurrentiel de personne.

Ce que nous avons bâti

Un balayage mensuel en lecture seule qui se conclut par un seul courriel qui vaut la peine d’être lu.

Une fois par mois, le moniteur se connecte à chaque locataire client avec trois autorisations Microsoft Graph en lecture seule et balaie chaque inscription d’application et principal de service à la recherche de secrets clients et de certificats. Chaque identifiant est classé — expirant d’ici trente jours, récemment expiré ou expiré depuis longtemps — et le résultat est un seul courriel qui met en tête ce sur quoi agir. L’historique ancien est plafonné à un court tableau de référence, pour que le rapport reste lisible au lieu de devenir la chose que personne n’ouvre.

Le rapport

Vrai moteur de rendu, données inventées : voici le courriel qu’un technicien reçoit quand des identifiants approchent de l’expiration.

Le courriel du rapport de sécurité Entra ID : un identifiant expiré et trois approchant de l’expiration, un tableau à corriger avant expiration avec les jours restants et les responsables, une section à restaurer ou retirer signalant un identifiant sans responsable, et un sommaire des priorités indiquant quoi faire en premier. Données Contoso à titre indicatif.

Rendu par le vrai moteur de rendu de courriel du produit avec des données Contoso inventées — les rapports clients portent les identifiants de leurs propres locataires.

Comment ça fonctionne

Aucune infrastructure permanente : pendant quelques minutes par mois, il existe, puis il n’existe plus.

Réveil mensuelle 1er du mois,minuterie de vigilance activeUn exécuteur éphémère, par locataire clientexiste quelques minutes, puis disparaîtConnexionlecture seule : troisautorisations GraphAnalyseapps et principauxsecrets et certificatsClasserexpirant · tout justeexpiré · de longue dateUn courrielen tête : ce sur quoi agir ;l’historique ancien plafonnéentre-temps : rien ne tourne — aucun serveur, aucun secret permanent au-delà d’un jeton de coffre
Aucune infrastructure permanente : l’ordonnanceur d’intégration continue tient lieu de cron, chaque locataire obtient son propre exécuteur de courte durée (un locataire défaillant ne peut pas cacher le rapport d’un autre), et la sortie est un seul courriel qui met en tête ce qu’il faut faire.

Il n’y a pas de serveur à corriger ni de tableau de bord à oublier : l’ordonnanceur d’intégration continue tient lieu de cron, chaque locataire s’exécute dans sa propre tâche de courte durée (pour qu’un locataire défaillant ne puisse pas cacher le rapport d’un autre), et les secrets sont résolus à l’exécution depuis un coffre — le seul identifiant stocké est un unique jeton de compte de service. Le thème d’ingénierie tout du long est échouer bruyamment, ne jamais feindre un feu vert : les enregistrements Graph malformés sont comptés et rapportés plutôt qu’abandonnés en silence, une date d’expiration illisible est traitée comme critique plutôt que filtrée, et une mauvaise configuration interrompt l’exécution au lieu de réduire discrètement la portée de l’analyse.

Qui surveille le surveillant

Le moniteur s’authentifie avec un identifiant qui expire lui aussi. Il traite sa propre expiration comme la plus importante.

Le moniteurse connecte avec unidentifiant qui expire aussiaverti 30 jours avantLes identifiants des autresapps et principaux, tous locatairesaverti 60 jours avantSes propres identifiantspar son propre id d’app, chaque foisne se trouve pas,ou aucun identifiant ?CRITIQUE
Le veilleur se surveille lui-même, avec deux fois l’horizon d’avertissement — l’expiration de l’identifiant du moniteur est ce qui plongerait tout le système dans le noir, alors il s’avertit lui-même un mois avant d’avertir qui que ce soit d’autre. La minuterie de vigilance rattrape le cas où il ne s’exécute jamais du tout.

Décisions à souligner

  • En lecture seule par construction. Trois autorisations Graph, aucune en écriture. Le rayon d’impact du moniteur lui-même est nul — la posture de moindre privilège que nous exigeons de chaque automatisation.
  • Échouer bruyamment, ne jamais feindre un feu vert. Le mode de défaillance dangereux de tout moniteur est un faux « tout va bien ». Chaque chemin qui pourrait réduire la portée de l’analyse en silence — incohérences de schéma, dates illisibles, échecs de pagination, mauvaise configuration — soit apparaît dans le rapport, soit interrompt l’exécution de façon visible.
  • Un courriel en échec ne peut pas s’annoncer par courriel. Le chemin d’échec est explicitement empêché d’utiliser le canal qui vient d’échouer — cette alerte va plutôt au sommaire de la tâche et à la minuterie de vigilance.
  • Le rapport est conçu, pas un simple gabarit. Le courriel HTML reste sous le seuil de troncature de Gmail — imposé par un test de budget de taille — et s’affiche dans Outlook, qui retire la plupart des styles. La délivrabilité est une propriété d’exactitude.
  • Des échecs classifiés avec des conseils pour l’opérateur. Neuf types d’échec, chacun portant une action recommandée — la personne de garde ne devrait jamais avoir à rétro-concevoir ce qui a mal tourné.

Réalisé avec

  • TypeScript
  • Microsoft Graph

Qu’est-ce qui expire discrètement dans votre locataire ?

Des projets à portée fixe ou des blocs prépayés d’heures d’ingénierie infonuagique, réseau et sécurité chevronnée.