À 19 h 10, une rotation de jeton. À 20 h 35, un service entier répond « accès refusé » à tout le monde, y compris à des secrets qui n'existent pas. La panne était asymétrique, et son auteur était celui qui la diagnostiquait.
1. Les faits
Un service de coffre-fort d'API expose des secrets à des programmes : une adresse unique, un jeton en en-tête, une valeur renvoyée. Il sert une dizaine d'outils qui en dépendent.
À 19 h 10, en traitant une tâche sans rapport, une rotation est faite : trois copies d'un jeton sont alignées sur la même valeur, celle de la passerelle principale. L'opération paraît anodine — on harmonise, on évite la divergence.
En fin de soirée, le coffre répond 401 à toutes les requêtes. Y compris à la demande d'un secret qui n'existe pas : un coffre correct renvoie 404 dans ce cas, ce qui prouve que la requête n'atteint même pas la logique de lecture. Le rejet est en amont, sur l'authentification.
2. La cause, et le mot qu'il faut employer
Le pont du coffre compare le jeton reçu à la valeur stockée dans un magasin de secrets. Ce magasin n'a pas été touché à 19 h 10. Les trois copies alignées étaient celles des consommateurs.
Résultat : les appelants présentaient un jeton, le coffre en attendait un autre, et refusait tout. Ce n'était donc pas une panne préexistante, ni une panne de fournisseur, ni un défaut du produit : c'était le geste de rotation, appliqué d'un seul côté.
Il faut le dire ainsi. Une panne provoquée par une action de maintenance et décrite comme « incident imprévu » est une panne qui reviendra : on n'a pas appris ce qui l'a causée.
3. Pourquoi la panne était incompréhensible de l'extérieur
Le plus déroutant n'était pas le 401 : c'était son caractère partiel.
La passerelle principale continuait de fonctionner parfaitement. Ses outils répondaient, ses listes d'outils se chargeaient, l'ensemble paraissait sain. Seul le coffre refusait. Une panne qui touche un service sur dix, alors qu'ils partagent le même nom de jeton, ressemble à un bug mystérieux.
L'explication tient à la façon dont les secrets sont distribués. Deux modèles cohabitent :
- la copie locale : chaque service porte sa propre copie du secret, dans sa configuration. Vingt-trois services sont dans ce cas. Chacun est autonome : tourner la copie de l'un ne change rien aux autres.
- la lecture centralisée : quatre services lisent le secret dans le magasin central, au moment de l'appel. Ceux-là dépendent d'une valeur unique, non lisible par l'API.
Les trois copies alignées appartenaient à la première catégorie. Le coffre appartient à la seconde. D'où l'asymétrie : la moitié de l'infrastructure continuait de marcher pendant que l'autre refusait tout.
Une panne asymétrique se diagnostique en regardant les liaisons, pas les services. « Qui lit quoi, et où » est la seule question utile.
4. Le piège du voyant vert
Pendant toute la panne, la sonde de santé du pont répondait 200. Elle était publique, sans authentification, et se contentait de dire « le processus est vivant ».
C'est le piège le plus répandu du métier : un voyant vert prouve que le service tourne, pas qu'il accepte quelqu'un. Ici, le service était vivant, joignable, et refusait cent pour cent de ses appelants. Un tableau de bord qui n'aurait affiché que la sonde aurait déclaré l'incident inexistant.
Trois sondes sont nécessaires, et elles ne mesurent pas la même chose :
- vivant : le processus répond (la sonde actuelle) ;
- authentifié : un appelant légitime obtient une réponse métier, pas un
401; - utile : la réponse contient la donnée attendue, avec la bonne taille, la bonne forme.
Nous n'avions que la première. Nous avons maintenant les trois.
5. La réparation, mesurée avant d'être faite
La tentation, dans ce genre de situation, est de réécrire le secret du magasin à l'aveugle. C'est exactement ce qu'il ne faut pas faire : un secret de magasin ne se relit pas. Le perdre est définitif, et le remplacer sans savoir qui le consomme peut casser d'autres services.
La démarche a donc été l'inverse :
- mesurer le rayon d'action : combien de services lient ce nom de secret ? Réponse : vingt-trois, dont quatre seulement lisent le magasin ;
- relever l'état avant écriture : identifiant du secret, portées, date de dernière écriture ;
- réécrire une seule fois, avec la valeur de flotte, sans espace parasite, en traçant l'opération et son motif ;
- prouver par l'effet, sur deux machines différentes : un appel de lecture de secret passe de
401à200avec la bonne longueur ; une récupération côté serveur passe d'une erreur à une valeur de trente-cinq octets.
Quatre tests, deux hôtes, avant/après. C'est ce qui distingue une réparation d'une tentative.
6. Les trois leçons
Première : un jeton se tourne des deux côtés, ou pas du tout. Toute rotation doit être une opération atomique, avec une liste des porteurs. Si l'un des porteurs ne peut pas être mis à jour dans la même fenêtre, on ne tourne pas.
Deuxième : un secret non lisible est un secret à ne pas perdre. Les magasins qui ne permettent pas la relecture imposent une discipline : sauvegarde hors ligne chiffrée, procédure de secours documentée, et interdiction de rotation improvisée.
Troisième : la santé d'un service se mesure avec ses appelants. Une sonde qui n'authentifie rien ne mesure rien. Chaque service critique doit exposer une sonde qui fait un vrai appel métier, avec une vraie identité.
7. Ce que ça change
Nous avons documenté le fonctionnement du coffre : qui lit le magasin, qui porte une copie, comment le pont décide, quels pièges existent. Et nous avons conservé le secours local — un fichier de secrets à droits restreints — non comme source de vérité, mais comme chemin de secours quand le magasin est indisponible.
Le point le plus important n'est pas technique. C'est une phrase que nous nous répétons désormais avant chaque maintenance : est-ce que je tourne un secret que quelqu'un d'autre détient ? Si la réponse n'est pas immédiatement « non, je suis le seul porteur », alors il faut arrêter et compter les porteurs.
Un 401 généralisé ne dit pas « quelqu'un a volé une clé ». Il dit, le plus souvent, « deux copies ne sont plus d'accord ». Et la copie la plus récente n'est pas toujours celle qu'on croit.
À retenir. Une rotation de secret est une opération d'infrastructure, pas un réglage. Comptez les porteurs, tournez les deux côtés, sondez l'authentification et pas seulement la vie, et souvenez-vous qu'un secret de magasin perdu ne se retrouve pas.