La clé qui n’est pas là

Depuis quelques semaines, un agent IA a les mains dans le backend de Paylo. Le vrai, pas un bac à sable : il lit la base de données de production, remonte la piste d’un remboursement revenu incomplet, écrit le correctif, le déploie. C’est la paire de mains la plus capable avec laquelle j’aie travaillé, et la plupart des jours, il a mérité son salaire avant que j’aie fini mon premier café.

Puis un soir, presque en passant, il a proposé de réinitialiser un secret de production. Il aurait pu. Rien ne l’en empêchait. Et j’ai compris, avec cette clarté particulière qui arrive tard dans la nuit, que la seule chose qui se dressait entre mon backend tout entier et une seule mauvaise instruction était la bonne conduite de l’agent.

Mon modèle de sécurité était une humeur.

Le curseur vers lequel tout le monde se tourne

L’instinct, quand on remarque cela, c’est d’attraper le cadran. La commodité à un bout, la sécurité à l’autre, et un curseur entre les deux. Verrouillez davantage et vous allez vers la sûreté, en payant en friction. Desserrez et vous allez vers la vitesse, en payant en exposition. Quiconque a déjà déposé une demande d’accès ou attendu trois jours pour une autorisation sait exactement où ce curseur finit d’habitude, et combien peu chaque camp s’en réjouit.

J’ai failli faire pareil. Ajouter des confirmations. Le faire demander avant toute action dangereuse. Le surveiller de plus près. Tout cela revient au même : laisser le pouvoir dangereux exactement là où il était, et empiler de la supervision par-dessus. Le pouvoir de réécrire tout le backend serait resté là, sur ma machine, à une instruction habile ou un processus compromis d’être utilisé. J’aurais simplement promis de regarder plus attentivement.

Le problème avec regarder plus attentivement, c’est que ça fonctionne jusqu’au moment précis où l’on ne regarde pas.

Ce qui n’allait vraiment pas

Le vrai problème, c’est qu’un seul identifiant faisait tout.

Un unique jeton, posé dans le trousseau de ma machine, pouvait lire la base de données, déployer du code, faire tourner les secrets et lire les clés qui se font passer pour mes propres serveurs. « Laisser l’agent vérifier combien de commandes a une boutique » et « laisser l’agent remplacer silencieusement mon backend » étaient, mécaniquement, le même niveau d’accès. La portée de la plus petite tâche était la portée de la plus grande catastrophe.

Une fois qu’on le voit ainsi, le curseur cesse d’avoir un sens. La question était de savoir pourquoi une lecture de routine et une compromission totale buvaient à la même coupe.

Deux portes plutôt qu’un cadran

Alors nous avons arrêté de faire glisser et commencé à séparer.

Les données ont eu leur propre porte : un rôle de base de données étroit qui peut lire et écrire des lignes et rien d’autre. Il ne peut pas changer la forme de la base, ne peut pas lire les secrets, ne peut pas toucher aux entrailles de l’authentification, n’est administrateur de rien. Il parle directement aux données et ignore que le reste du système existe.

L’infrastructure, la moitié dangereuse, a eu une porte entièrement différente, et cette porte a été déplacée hors des murs. Le jeton puissant ne vit plus du tout sur ma machine. Je l’ai déconnecté. Les déploiements se font désormais dans un exécuteur d’intégration continue, où la clé repose dans un coffre que l’agent ne peut pas lire. L’agent peut toujours livrer du code : il écrit le changement, le committe, et tire un levier qui dit à l’exécuteur de déployer. L’exécuteur tient la clé. L’agent ne tient jamais que le levier.

Rien n’est devenu plus lent. L’agent lit toujours la base de données dans le même souffle qu’avant. Il déploie toujours, plusieurs fois par soirée. De là où je suis, la commodité est intacte. Ce qui a changé est en dessous, là où cela ne se sent pas tant qu’on n’en a pas besoin.

Le test, c’est ce qui se passe quand ça tourne mal

Voici la partie qui me laisse vraiment dormir.

Imaginez le pire. Une instruction cachée dans des données que l’agent lit le rend hostile, ou la machine elle-même est compromise. Avant, le butin à portée de main était la clé maîtresse : déployer une porte dérobée, voler l’identité du serveur, faire tourner les secrets, et s’enfoncer assez profond pour survivre au nettoyage. Une mauvaise nuit, perte totale.

Désormais, la chose la plus puissante accessible depuis cette machine est le mot de passe d’un rôle de base de données qui peut toucher aux données et à rien d’autre. Ce n’est pas rien. Mais c’est survivable, et surtout c’est récupérable en une seule ligne. Une commande fait tourner le mot de passe et l’intrus est dehors, sans aucun moyen d’avoir déployé quoi que ce soit, volé une clé, ou laissé derrière lui un chemin de retour. Une clé maîtresse volée est un incident dont on met une semaine à se remettre. Un mot de passe à portée limitée volé est une phrase qu’on tape une fois.

La sécurité repose désormais sur le fait que la clé dangereuse n’est pas dans le bâtiment.

Le compromis, bien compris

Nous parlons de la commodité et de la sécurité comme d’opposés parce que, posées sur un cadran, elles le sont. Chaque cran vers l’une est un cran qui éloigne de l’autre, et toute la conversation devient une négociation sur la dose de douleur à accepter.

Mais le cadran est le mauvais instrument. L’essentiel de ce qui ressemble à un arbitrage entre les deux est en réalité le coût de laisser un seul identifiant couvrir tout le spectre, du trivial au catastrophique. Scindez cet identifiant le long de la ligne où se trouve réellement le danger, et la tension se dissout en grande partie. Les choses commodes restent commodes, parce qu’elles n’ont jamais été les choses dangereuses. Les choses dangereuses sont déplacées là où une tâche de routine ne peut jamais les atteindre.

On achète la sûreté avec la discipline de décider, à l’avance, quelle est la pire chose atteignable, et de s’assurer que c’est quelque chose à quoi on peut survivre. Limitez le pouvoir à la tâche. Gardez la clé maîtresse hors de la machine. Concevez pour que le rayon de l’explosion d’une erreur soit un mot de passe qu’on fait tourner plutôt qu’une entreprise qu’on doit rebâtir.