A propos Compétences Expérience Services Blog Contact

Donne une identité à ton agent IA, pas ta clé API Give Your AI Agent an Identity, Not Your API Key

Tu colles une clé API dans ton agent. Une ligne dans un fichier .env. Ça marche tout de suite.

Mais cette clé, c'est la tienne. Tes accès, ta portée, ton nom sur chaque appel.

Tu viens de donner ton identité à un logiciel qui écrit ses propres commandes.

Un agent n'est pas toi. C'est un nouvel acteur sur ton système. Il lui faut la sienne.

TL;DR : une clé API statique dans un agent, c'est ton identité que tu prêtes. Large, sans date de fin, partagée, impossible à tracer. Un agent IA est une identité non-humaine, un acteur à part entière. Donne-lui la sienne : un jeton court, limité à son besoin, révocable, et attribuable dans les logs. La direction de l'industrie porte un nom, l'identité de workload, type SPIFFE. Pas un secret partagé qui traîne dans un .env.

Cet article est pour les devs et les DevSecOps qui mettent un agent IA en production, avec accès à de vrais systèmes. Pas en démo.

Le contexte

Un agent IA, c'est un modèle de langage qui appelle des outils et agit à ta place. J'en construis un en Go, dans un projet perso.

La stack est classique. Go pour le code. Postgres pour les données. Un cluster Kubernetes pour l'héberger. Et l'API d'Anthropic pour le modèle.

Pour ses secrets, l'agent ne lit aucune clé écrite à la main. Il porte une identité machine dédiée. Elle est limitée à un projet, un environnement, un chemin. J'auto-héberge Infisical pour ça. Infisical est un gestionnaire de secrets : un coffre qui range et distribue les clés.

Je viens de la sécurité, et je suis un peu parano. Certifié pentester, ancien Top 1% sur TryHackMe. Donner mon identité à un agent, c'était non.

Une clé API statique, c'est ton identité que tu prêtes

Regarde ce que fait une clé API statique. Elle prouve qui tu es, une fois pour toutes. Et souvent, la même clé sert partout.

# .env : la mauvaise idée
ANTHROPIC_API_KEY=sk-ant-...
DATABASE_URL=postgres://app:motdepasse@db/prod
STRIPE_KEY=sk_live_...

Une clé comme ça a quatre défauts. Elle est large : elle ouvre tout ce que ton compte peut faire. Elle est éternelle : aucune date de fin. Elle est partagée : le même secret sert à dix endroits. Et elle est muette : un log dit « la clé a agi », jamais « l'agent a agi ».

Le problème explose en 2026. Les secrets liés à l'IA sont la catégorie de fuites qui grimpe le plus vite. GitGuardian en a compté 1,27 million rien qu'en 2025, soit 81 % de plus qu'en 2024. Pire : 64 % des secrets valides fuités en 2022 n'étaient toujours pas révoqués début 2026.

Pourquoi l'IA aggrave tout ? Parce qu'elle multiplie les acteurs. Plus d'agents, plus de services, plus de jetons qui traînent. Chaque clé posée à la main est une fuite qui attend son heure.

Ton agent est une identité non-humaine, traite-le comme tel

En sécurité, on sépare deux mondes. Les identités humaines : toi, tes utilisateurs. Et les identités non-humaines : les services, les scripts, les robots.

Une identité non-humaine, la NHI, c'est tout ce qui s'authentifie sans être une personne. Un agent IA en fait partie. C'est un acteur à part entière, comme un compte de service.

Et ces acteurs sont déjà les plus nombreux. Dans un cloud moderne, les machines dépassent les humains de plusieurs dizaines pour un. L'agent IA est juste le petit dernier. Le plus rapide, et le plus imprévisible.

Attention à ne pas confondre deux identités. Il y a l'utilisateur au nom de qui l'agent agit. Et il y a l'agent lui-même. Ce sont deux choses distinctes. L'agent a besoin de sa propre identité, séparée de la tienne et de celle de l'utilisateur.

Dans mes services, ça donne deux chemins. Quand l'agent agit pour un utilisateur, je propage le jeton de cet utilisateur, de bout en bout. Quand c'est une tâche système, sans personne derrière, un jeton de service à service prend le relais. Jamais les deux sur le même appel. L'agent n'invente jamais d'identité. Soit il porte celle de l'utilisateur, soit la sienne.

Donne-lui un jeton court, jamais un secret éternel

La première règle est simple. Remplace le secret éternel par un jeton court.

On appelle ça un jeton juste-à-temps, ou JIT. L'idée : l'agent ne garde pas une clé pour toujours. Il prouve qui il est, reçoit un jeton qui vit quelques minutes, puis ce jeton meurt.

Le gain se voit le jour d'une fuite. Un secret statique volé marche jusqu'à ce que tu le remarques. Souvent, des mois plus tard. Un jeton court, lui, est déjà mort quand le voleur arrive.

Dans mon projet, l'agent ne connaît aucune clé de prod. Il porte une identité machine. Avec elle, un opérateur va chercher ses secrets et les renouvelle tout seul, en continu.

# L'identité machine de l'agent, limitée à son périmètre
projectSlug: mimmo
envSlug: prod
secretsPath: /backend/mimmo-ai   # rien d'autre
resyncInterval: 60               # renouvelé en continu

Même logique côté outillage. Pour mes automatisations, je préfère une app qui fabrique un jeton à la volée, pas un jeton personnel qui traîne. L'app prouve son identité, reçoit un jeton qui vit une heure, agit, puis le jeton expire. Rien de permanent à stocker, rien à faire fuiter.

Deux réflexes vont avec. Un : fais tourner les identifiants souvent, c'est la rotation. Deux : garde un bouton rouge. Le jour où un agent part en vrille, tu dois pouvoir couper son identité en une commande, sans casser les neuf autres.

Limite l'identité à ce dont l'agent a besoin

Un jeton court, c'est bien. Un jeton court et étroit, c'est mieux.

Le principe est le moindre privilège : donne juste les droits utiles, rien de plus. Appliqué à l'identité, ça donne une règle nette. Une identité par agent. Pas une clé unique partagée par toute ta flotte.

Pourquoi ? Une injection, c'est un texte piégé qui détourne l'agent de sa tâche. Si elle réussit, l'attaquant hérite des droits de l'agent en cours. Avec une identité étroite, les dégâts s'arrêtent là. Avec la clé maîtresse, tout tombe.

J'ai vu l'autre approche de près, sur une plateforme d'identité à grande échelle. Les droits n'y étaient pas de simples rôles figés. Ils se décidaient par attributs, à chaque requête. On appelle ça l'ABAC. Qui es-tu, dans quel contexte, pour quelle ressource : la réponse se calcule à la demande.

Un agent mérite le même traitement. Son identité ne dit pas juste « c'est un agent ». Elle porte des attributs : quel agent, quel environnement, quel périmètre. Et l'accès se décide à partir de là.

Rends chaque action attribuable à l'agent

Une identité propre offre un cadeau : la traçabilité.

Avec une clé partagée, ton log dit « le compte de service a supprimé le dossier ». Merci, mais qui ? Quel agent, quelle session, sur ordre de quel humain ?

Avec une identité par agent, la réponse est dans la ligne de log. Tu sais quel acteur a agi, quand, et pour qui. C'est la non-répudiation : personne ne peut nier son action.

Ce n'est pas mon idée. Le NIST pousse un cadre pour l'identité des agents. Il tient en quatre mots : identifier l'agent, l'autoriser, l'auditer, et lier chaque action à l'humain qui l'a permise.

Concrètement, chaque appel de mon agent part dans un log structuré : quelle identité, quel outil, quelle décision. Le jour d'un incident, je réponds à une seule question. Qu'a fait cet agent, exactement ?

La cible : une identité de workload, type SPIFFE

Où va tout ça ? Vers une identité cryptographique pour chaque charge de travail. En anglais, workload identity.

Le standard qui monte s'appelle SPIFFE, avec sa mise en œuvre SPIRE. L'idée est belle. Chaque service reçoit une identité vérifiable, prouvée par la cryptographie, et à durée de vie courte. Plus de secret partagé à copier d'un endroit à l'autre.

# Une identité de workload, pas une clé partagée
spiffe://mimmo.app/agent/legal-advisor
# → un identifiant court, renouvelé tout seul, vérifiable

Et pour les agents IA ? La bascule est en cours, en haut lieu. Le NIST a lancé une initiative dédiée aux agents en février 2026. Son texte sur l'identité des agents cite OAuth, OpenID Connect et SPIFFE. Un brouillon à l'IETF décrit un modèle d'identité pour les agents, l'AIMS, bâti sur ces mêmes standards. Et l'OWASP classe l'excès d'autonomie parmi les grands risques des applications à agents.

Sois honnête sur la maturité. SPIFFE en production pour des agents, c'est jeune. Je regarde cette direction de près, sans prétendre l'avoir déployée partout. Mais le principe, lui, est déjà applicable. Identité courte, étroite, révocable, tracée. Tu n'as pas besoin d'un standard final pour arrêter de coller ta clé dans un .env.

La checklist avant de donner un accès

Avant de brancher ton agent IA sur de vrais systèmes, passe son identité au crible.

  • L'agent a sa propre identité, séparée de la tienne et de celle de l'utilisateur
  • Aucune clé statique dans un .env ni dans le code
  • Un jeton court à la place du secret éternel, renouvelé tout seul
  • Une identité par agent, jamais une clé maîtresse partagée
  • L'identité est limitée : un projet, un environnement, un périmètre
  • L'accès se décide par attributs, pas par un rôle figé (ABAC)
  • Un bouton rouge : tu peux révoquer une identité en une commande
  • Rotation régulière des identifiants
  • Chaque action est loggée avec l'identité de l'agent, pour la non-répudiation
  • Les secrets vivent dans un gestionnaire dédié, scannés à chaque commit
  • La cible : une identité de workload vérifiable, type SPIFFE

Ce qu'il faut retenir

Une clé API répond à « quel accès ». Une identité répond à « qui agit ». Ton agent a besoin de la seconde.

Ne lui prête pas ton identité. Donne-lui la sienne : courte, étroite, révocable, tracée. C'est la différence entre un acteur que tu contrôles et un secret que tu pries de ne pas voir fuiter.

Les standards arrivent. Les identités machines explosent. Les devs qui savent donner une identité propre à un agent, et pas juste une clé, vont rester rares un moment.

Tu mets un agent IA en production ? Tu veux revoir comment il s'authentifie, avant qu'une clé ne fuite ? C'est exactement ce que je fais. Écris-moi.

You paste an API key into your agent. One line in a .env file. It works right away.

But that key is yours. Your access, your reach, your name on every call.

You just handed your identity to a piece of software that writes its own commands.

An agent is not you. It is a new actor on your system. It needs its own.

TL;DR: a static API key in an agent is your identity, on loan. Broad, no end date, shared, impossible to trace. An AI agent is a non-human identity, an actor in its own right. Give it its own: a short-lived token, scoped to its need, revocable, and traceable in the logs. The industry has a name for the target, workload identity, like SPIFFE. Not a shared secret sitting in a .env.

This article is for developers and DevSecOps folks who put an AI agent in production, with access to real systems. Not in a demo.

The setup

An AI agent is a language model that calls tools and acts for you. I build one in Go, in a personal project.

The stack is standard. Go for the code. Postgres for the data. A Kubernetes cluster to host it. And the Anthropic API for the model.

For its secrets, the agent reads no hand-typed key. It carries a dedicated machine identity. That identity is scoped to one project, one environment, one path. I self-host Infisical for this. Infisical is a secret manager: a vault that stores and hands out keys.

I come from security, and I am a bit paranoid. Certified pentester, former Top 1% on TryHackMe. Handing my identity to an agent was a no.

A static API key is your identity, on loan

Look at what a static API key does. It proves who you are, once and for all. And often, the same key is used everywhere.

# .env: the bad idea
ANTHROPIC_API_KEY=sk-ant-...
DATABASE_URL=postgres://app:password@db/prod
STRIPE_KEY=sk_live_...

A key like that has four flaws. It is broad: it opens everything your account can do. It is eternal: no end date. It is shared: the same secret serves ten places. And it is mute: a log says "the key acted", never "the agent acted".

The problem is exploding in 2026. Secrets tied to AI are the fastest-growing leak category. GitGuardian counted 1.27 million of them in 2025 alone, up 81% from 2024. Worse: 64% of the valid secrets leaked in 2022 were still not revoked by early 2026.

Why does AI make it worse? Because it multiplies the actors. More agents, more services, more tokens lying around. Every key placed by hand is a leak waiting to happen.

Your agent is a non-human identity, treat it as one

In security, we split two worlds. Human identities: you, your users. And non-human identities: services, scripts, bots.

A non-human identity, or NHI, is anything that authenticates without being a person. An AI agent is one of them. It is a full actor, like a service account.

And those actors are already the majority. In a modern cloud, machines outnumber humans by dozens to one. The AI agent is just the newest arrival. The fastest, and the most unpredictable.

Be careful not to mix up two identities. There is the user the agent acts for. And there is the agent itself. They are two different things. The agent needs its own identity, separate from yours and from the user's.

In my services, that means two paths. When the agent acts for a user, I propagate that user's token, end to end. When it is a system task, with no one behind it, a service-to-service token takes over. Never both on the same call. The agent never invents an identity. It carries the user's, or its own.

Give it a short-lived token, never an eternal secret

The first rule is simple. Replace the eternal secret with a short-lived token.

We call it a just-in-time token, or JIT. The idea: the agent does not keep a key forever. It proves who it is, gets a token that lives for a few minutes, then that token dies.

The payoff shows up on the day of a leak. A stolen static secret works until you notice. Often, months later. A short-lived token is already dead when the thief arrives.

In my project, the agent knows no production key. It carries a machine identity. With it, an operator fetches its secrets and renews them on its own, continuously.

# The agent's machine identity, scoped to its perimeter
projectSlug: mimmo
envSlug: prod
secretsPath: /backend/mimmo-ai   # nothing else
resyncInterval: 60               # renewed continuously

Same logic on the tooling side. For my automations, I prefer an app that mints a token on the fly over a personal token left lying around. The app proves its identity, gets a token that lives for an hour, acts, then the token expires. Nothing permanent to store, nothing to leak.

Two reflexes come with it. One: rotate the credentials often. Two: keep a red button. The day an agent goes rogue, you must be able to kill its identity in one command, without breaking the other nine.

Scope the identity to what the agent needs

A short-lived token is good. A short-lived and narrow token is better.

The principle is least privilege: grant only the rights that are useful, nothing more. Applied to identity, it gives a clear rule. One identity per agent. Not a single key shared by your whole fleet.

Why? An injection is a booby-trapped text that steers the agent off task. If it succeeds, the attacker inherits the current agent's rights. With a narrow identity, the damage stops there. With the master key, everything falls.

I saw the other approach up close, on a large-scale identity platform. Rights were not simple fixed roles. They were decided by attributes, on every request. This is called ABAC. Who are you, in what context, for which resource: the answer is computed on demand.

An agent deserves the same treatment. Its identity does not just say "this is an agent". It carries attributes: which agent, which environment, which perimeter. And access is decided from there.

Make every action attributable to the agent

A proper identity comes with a gift: traceability.

With a shared key, your log says "the service account deleted the record". Thanks, but who? Which agent, which session, on whose orders?

With one identity per agent, the answer is in the log line. You know which actor acted, when, and for whom. This is non-repudiation: no one can deny what they did.

This is not my idea. NIST is pushing a framework for agent identity. It fits in four words: identify the agent, authorize it, audit it, and tie every action to the human who allowed it.

In practice, every call from my agent goes to a structured log: which identity, which tool, which decision. The day of an incident, I answer one question. What did this agent do, exactly?

The target: a workload identity, like SPIFFE

Where is all this going? Toward a cryptographic identity for each workload.

The rising standard is SPIFFE, with its implementation SPIRE. The idea is elegant. Each service gets a verifiable identity, proven by cryptography, and short-lived. No more shared secret to copy from one place to another.

# A workload identity, not a shared key
spiffe://mimmo.app/agent/legal-advisor
# → a short-lived identifier, self-renewing, verifiable

And for AI agents? The shift is under way, at a high level. NIST launched an initiative dedicated to agents in February 2026. Its text on agent identity cites OAuth, OpenID Connect, and SPIFFE. A draft at the IETF describes an identity model for agents, AIMS, built on those same standards. And OWASP ranks excessive agency among the top risks for agentic applications.

Be honest about maturity. SPIFFE in production for agents is young. I watch this direction closely, without claiming I have deployed it everywhere. But the principle already applies. Short, narrow, revocable, traced identity. You do not need a final standard to stop pasting your key into a .env.

The checklist before granting access

Before you wire your AI agent to real systems, run its identity through this list.

  • The agent has its own identity, separate from yours and from the user's
  • No static key in a .env or in the code
  • A short-lived token instead of the eternal secret, self-renewing
  • One identity per agent, never a shared master key
  • The identity is scoped: one project, one environment, one perimeter
  • Access is decided by attributes, not by a fixed role (ABAC)
  • A red button: you can revoke an identity in one command
  • Regular rotation of credentials
  • Every action is logged with the agent's identity, for non-repudiation
  • Secrets live in a dedicated manager, scanned at every commit
  • The target: a verifiable workload identity, like SPIFFE

What to remember

An API key answers "what access". An identity answers "who acts". Your agent needs the second one.

Do not lend it your identity. Give it its own: short, narrow, revocable, traced. That is the difference between an actor you control and a secret you pray never leaks.

The standards are coming. Machine identities are exploding. Developers who can give an agent a proper identity, and not just a key, will stay rare for a while.

Are you putting an AI agent into production? Do you want a second look at how it authenticates, before a key leaks? That is exactly what I do. Get in touch.