Un scénario me trotte dans la tête depuis que je mets des IA génératives en production : un serveur qui tombe lors d'une compromission, une clé d'API d'inférence qui part avec, et une facture qui grimpe tranquillement toute la nuit pendant que tout le monde dort.One scenario has been on my mind ever since I started putting generative AI into production: a server gets compromised, an inference API key leaks with it, and the bill quietly climbs all night while everyone sleeps.
J'utilise les AI Endpoints des grandes plateformes françaises. Je crois à leur démarche : hébergement en France, conformité, tarification au token lisible. Sur le papier, tout y est. Mais en préparant leur passage en production, je suis tombé sur un angle mort gênant.I use the AI Endpoints of the major French platforms. I believe in what they stand for: hosting in France, compliance, clear per-token pricing. On paper it is all there. But getting them production-ready, I ran into an awkward blind spot.
Sur leurs offres serverless, il n'y a ni plafond de dépense qui coupe vraiment, ni filtrage par adresse IP, ni jeton à durée limitée. Une clé d'API, chez ces fournisseurs, c'est un jeton au porteur, permanent, sans plafond dur. Si elle fuite, un attaquant la rejoue depuis n'importe où, autant qu'il veut, jusqu'à ce que quelqu'un s'en aperçoive et la révoque à la main. Documentation en main, j'ai retrouvé le même trou chez les deux acteurs les plus connus : au mieux une alerte de budget, donc réactive, une fois le mal déjà commencé.On their serverless offerings there is no spend cap that truly cuts you off, no IP allowlisting, no short-lived token. An API key with these providers is a bearer token, permanent, with no hard ceiling. If it leaks, an attacker replays it from anywhere, as much as they want, until someone notices and revokes it by hand. Documentation in hand, I found the same gap at the two best-known players: at best a budget alert, which is reactive, once the damage has already begun.
Pour une brique aussi sensible, je trouve ça léger. Alors, plutôt que d'attendre qu'ils comblent le manque, je l'ai comblé moi-même.For such a sensitive component, I find that thin. So rather than wait for them to close the gap, I closed it myself.
Le principe tient en une phrase : sortir la clé des applications, et fabriquer à ma main les garde-fous que le fournisseur n'offre pas.The principle fits in one sentence: take the key out of the applications, and build by hand the guardrails the provider does not offer.
Une passerelle qui détient seule la cléA gateway that holds the key alone
Une passerelle interne, que j'appelle le broker, détient seule la clé. Les applications ne la voient jamais. Elles s'adressent au broker avec un jeton qui leur est propre, révocable en une seconde. Et le broker impose ce que le fournisseur ne fait pas :An internal gateway, which I call the broker, holds the key alone. The applications never see it. They talk to the broker with a token of their own, revocable in one second. And the broker enforces what the provider does not:
- Un plafond de dépense dur, par jour et par mois. Dépassement égale coupure, pas un simple e-mail.A hard spend cap, daily and monthly. Going over means cut off, not just an email.
- Une limite de débit et un quota par application.A rate limit and a quota per application.
- Un coupe-circuit pour tout arrêter d'un geste.A kill switch to stop everything at once.
- Un journal d'audit complet, que je reçois dans mon rapport quotidien.A full audit log, which I receive in my daily report.
Puis on durcit la passerelle elle-mêmeThen you harden the gateway itself
Authentification mutuelle par certificats (mTLS), avec des certificats courts renouvelés tout seuls : un jeton volé ne suffit plus à entrer. Clé d'API chiffrée au repos, présente en clair uniquement en mémoire vive : un disque ou une sauvegarde volés ne donnent rien d'exploitable. Et un garde-fou de modération, gratuit, qui filtre les tentatives d'injection avant même d'appeler le modèle payant. Effet de bord agréable : ça allège aussi la facture.Mutual TLS authentication, with short-lived certificates that renew on their own: a stolen token is no longer enough to get in. The API key encrypted at rest, in plaintext only in RAM: a stolen disk or backup yields nothing usable. And a moderation guard, free, that filters injection attempts before even calling the paid model. A pleasant side effect: it also trims the bill.
Le résultat change la donne. Une application compromise ne livre plus la clé, seulement un jeton bridé et révocable, et l'abus reste plafonné. La clé ne vit que sur une boîte minimale, sans surface web, joignable par mes seules applications.The result changes the game. A compromised application no longer hands over the key, only a throttled, revocable token, and abuse stays capped. The key lives only on a minimal box, with no web surface, reachable only by my own applications.
Un cerveau local qui choisit le bon modèleA local brain that picks the right model
Puisque toutes les requêtes passent désormais par ce point unique, autant le rendre malin. Un petit modèle exécuté en local, donc gratuit et sans rien envoyer à l'extérieur, lit chaque requête et décide vers quel modèle distant l'envoyer.Since every request now goes through this single point, it might as well be smart. A small model run locally, so free and sending nothing outside, reads each request and decides which remote model to send it to.
La décision combine deux logiques. Le besoin : une règle envoie le code vers un modèle spécialisé, une rédaction soignée vers un modèle premium, une extraction basique vers un modèle économique. Le coût : à mesure que le budget se remplit, le routeur bascule de lui-même vers des modèles moins chers. Cerveau local, muscle distant.The decision combines two logics. Need: a rule sends code to a specialized model, polished prose to a premium model, basic extraction to a cheap one. Cost: as the budget fills, the router shifts on its own to cheaper models. Local brain, remote muscle.
La limite de l'exercice, sans faux-semblantThe limit of the exercise, no pretending
Un jeton au porteur doit, au moment de l'appel, exister en clair en mémoire. Un attaquant qui obtient un accès administrateur vivant sur la bonne machine finira toujours par l'atteindre. Aucune architecture ne change cela. Mais entre une clé en clair posée sur des applications web exposées, sans le moindre plafond, et une clé isolée, chiffrée, plafonnée, tracée, derrière du mTLS, il y a un fossé. C'est ce fossé que je voulais creuser.A bearer token must, at call time, exist in plaintext in memory. An attacker who gets live administrator access to the right machine will always reach it in the end. No architecture changes that. But between a key sitting in plaintext on exposed web applications, with no cap at all, and a key that is isolated, encrypted, capped, logged, behind mTLS, there is a gulf. That gulf is what I set out to dig.
Un mot pour les fournisseurs souverains, que je continue d'utiliser et de recommander. Ajoutez le plafond de dépense dur et le filtrage par IP sur vos offres serverless. C'est précisément ce qui manque pour qu'un RSSI vous confie sereinement de la production.A word for the sovereign providers, which I keep using and recommending. Add a hard spend cap and IP allowlisting to your serverless offerings. That is exactly what is missing for a CISO to trust you with production.
En attendant, l'architecture ci-dessus fait le travail, et elle a le bon goût d'être agnostique : je change de fournisseur, ou de modèle, en un seul paramètre, sans toucher à une seule application. C'est d'ailleurs ce qui m'a permis de comparer plusieurs modèles sur mes propres cas d'usage avant de trancher.In the meantime, the architecture above does the job, and it has the good taste of being agnostic: I switch provider, or model, with a single parameter, without touching a single application. That is in fact what let me compare several models on my own use cases before deciding.
La souveraineté, ce n'est pas une case à cocher. C'est fermer les portes une par une, y compris celles que votre fournisseur a oublié de fermer.Sovereignty is not a checkbox. It is closing doors one by one, including the ones your provider forgot to close.