Aller au contenu

agent-access

Ce que vos agents IA peuvent réellement atteindre : cartographier l'accès des agents sur une infrastructure réelle

Par Olivares AI 8 min de lecture

Un agent IA est, sur le plan opérationnel, un processus détenant des identifiants. Quelqu’un lui provisionne un compte de service, une clé d’API ou un rôle IAM pour qu’il fasse son travail, et dès cet instant il peut atteindre tout ce que ces identifiants atteignent. La fiche de poste disait « exporter les données de facturation chaque nuit ». L’identifiant, lui, disait « lire et écrire dans la base de production, le stockage objet et la file d’attente ». Personne n’a réconcilié les deux. Des mois plus tard, plus personne dans l’équipe ne sait répondre à une question qui devrait être triviale : que peut réellement atteindre cet agent, et que touche-t-il réellement ?

Cet écart n’a rien d’hypothétique. Une recherche indépendante du secteur (CSA/Token) a constaté qu’environ 82 % des organisations exécutent des agents IA dont elles ignorent l’existence, alors que seulement 21 % environ maintiennent un inventaire en temps réel de ces agents. On ne peut pas gouverner ce qu’on ne voit pas, et à l’heure actuelle la plupart des parcs ne voient pas du tout leurs agents — encore moins les arêtes reliant chaque agent aux ressources qu’il peut atteindre.

Trois questions différentes, régulièrement confondues

Si « que peut atteindre cet agent » est difficile à trancher, c’est que cette question en fusionne trois distinctes. Les garder séparées, c’est tout l’enjeu.

  • Détenu — les identifiants que possède l’agent. Un jeton, une clé, une liaison de rôle. C’est un fait d’identité : les portes dont l’agent a les clés.
  • Autorisé — ce que ces identifiants ont le droit de faire, selon la politique : les octrois IAM, les rôles de base de données, les règles réseau. C’est un fait de politique, et il est presque toujours plus large que ce dont on se souvient, parce que les octrois s’accumulent et que personne ne les révoque.
  • Observé — ce que l’agent a effectivement été vu en train de faire : quelles ressources il a atteintes, et si chaque accès était une lecture ou une écriture. C’est un fait comportemental, et tant que vous ne le collectez pas, il n’existe tout simplement nulle part.

La plupart des outils de sécurité s’arrêtent à l’autorisé. Ils lisent votre IAM et vous disent que l’agent pourrait écrire dans le bucket d’exports de facturation. C’est nécessaire mais insuffisant, car « pourrait » désigne un ensemble de milliers de capacités latentes, et un humain ne peut pas trier des milliers de « peut-être ». Ce qui change la donne, c’est de placer l’observé à côté de l’autorisé et d’en regarder la différence.

La carte d’accès

Une carte d’accès est le graphe de ces arêtes : pour chaque agent découvert, une arête vers chaque ressource qu’il peut atteindre, annotée de ce qui a réellement été observé sur cette arête. L’unité qui compte est l’arête, et l’annotation la plus importante sur l’arête est la distinction lecture/écriture.

R (lecture) signifie que l’agent a récupéré des données sans les modifier : un SELECT, un GET, une lecture de fichier. RW (lecture/écriture) signifie qu’il a muté l’état : un INSERT/UPDATE/DELETE, un PUT vers un stockage objet, une migration de schéma. Le rayon d’impact de ces deux cas n’est pas comparable. Une arête en lecture sur une table sensible est une question d’exposition. Une arête en écriture — surtout non voulue — est une question d’intégrité et d’incident. Les traiter comme un même « accès », c’est ainsi que les équipes passent à côté du constat qui comptait.

Voici à quoi ressemble la ligne d’un seul agent une fois la carte construite :

AgentRessourceAutoriséObservéConfiance
data-export-jobprod-postgresRWRWattribué
data-export-jobs3://billing-exportsRWRattribué
data-export-jobinternal-metrics-apiRapproximatif

Regardez la première ligne. Le travail d’export était censé lire depuis prod-postgres et écrire le résultat dans s3://billing-exports. Lire la source, écrire la destination. Mais l’identifiant qui lui a été remis octroie RW sur la base de données, et le collecteur l’a observé en train d’écrire dans prod-postgres — une mutation sur le système de référence de production que personne n’a examinée, voulue, ni ne sait actuellement expliquer. La colonne autorisé indiquait discrètement, depuis le début, que c’était permis. C’est le germe d’un incident, exposé au grand jour, et sans la colonne observé il n’y a rien à signaler.

Autorisé moins observé égale dérive

Le résultat caractéristique est le diff. La dérive du moindre privilège est ce que l’on obtient en soustrayant une colonne de l’autre, et elle joue dans les deux sens :

  • Autorisé mais jamais observé — l’agent peut atteindre internal-metrics-api mais ne l’a jamais fait pendant toute la fenêtre d’observation. C’est du périmètre mort : un octroi que vous pouvez proposer de révoquer en toute sécurité, réduisant la surface d’attaque sans toucher au comportement.
  • Observé au-delà de ce qui a été examiné — l’écriture dans prod-postgres que personne n’a validée. C’est le constat à fort signal : une action qui se produit et que, si l’on avait posé la question au moment du provisionnement, personne n’aurait approuvée.

La seconde catégorie est le risque principal, et la version honnête du produit ne l’invente jamais. Chaque arête observée porte un niveau de confianceattribué lorsque l’action est rattachée à une identité d’agent précise avec un signal corroborant, approximatif lorsque les preuves sont plus faibles. On montre la différence plutôt que de blanchir une supposition en certitude. Un constat que l’on ne peut pas assumer est pire que pas de constat du tout.

Découvert passivement, attribué par agent

Deux choix de conception rendent cela digne de confiance plutôt qu’un tableau de bord de plus.

D’abord, la découverte est passive. Le collecteur observe — journaux, traces OpenTelemetry, flux d’audit de base de données comme pgAudit de PostgreSQL, et eBPF au niveau du noyau comme filet de sécurité de référence — et il ne se place pas sur le chemin de données de l’agent. Il n’y a aucun proxy obligatoire. Si le collecteur tombe en panne, l’agent continue de fonctionner ; l’observabilité se dégrade, pas la production. Pour un système dont toute la raison d’être est de gouverner des infrastructures critiques, cette asymétrie est le principe de conception : faible inconvénient, fort signal.

Ensuite, chaque action est attribuée à une identité d’agent précise, et non à un compte de service partagé. C’est la différence entre un registre d’audit qui dit « le rôle d’export a écrit dans prod-postgres à 02h14 » et un registre qui dit quel agent l’a fait, sous la responsabilité de qui, par rapport à quel périmètre voulu. L’identité par agent est la condition préalable pour que le moindre privilège ait le moindre sens — sans elle, une action peut être vue mais jamais retracée jusqu’à un responsable.

Les arêtes et les faits de lecture/écriture sont la seule chose stockée. La carte enregistre des relations — agent vers ressource, R ou RW — pas les charges utiles, pas les lignes qui ont été lues, pas les secrets. Les entrées susceptibles de contenir des secrets ou des données personnelles sont caviardées et analysées à la recherche de secrets avant que quoi que ce soit ne soit écrit. Le graphe est sensible précisément parce que c’est une carte d’accès ; il est donc conçu pour ne contenir que le minimum qui rend la gouvernance possible, et rien de plus.

Les signaux issus de l’écosystème propre de l’agent aident, mais on ne leur fait pas confiance à eux seuls. Un serveur MCP peut annoncer qu’un outil est en lecture seule via des annotations comme readOnlyHint ; selon la spécification MCP, ces indications sont non fiables et doivent être corroborées, jamais crues aveuglément. C’est la vue au niveau du noyau qui repère un outil ayant prétendu être en lecture seule et qui a écrit malgré tout.

Une fois la carte établie, l’étape suivante est l’application : épingler le travail d’export en lecture seule sur la base de données, refuser l’écriture et alerter au lieu de simplement journaliser — une politique appliquée au moment de l’accès, et non reconstituée après l’incident.

agent "data-export-job" {
  resource "prod-postgres" {
    access = "read"        # périmètre voulu : lecture de la source uniquement
    deny   = ["write", "ddl"]
  }
  resource "s3://billing-exports" {
    access = "read-write"  # périmètre voulu : écriture de la destination
  }
  on_violation {
    action = "block"
    alert  = "secops"
  }
}

La carte vous indique la politique que vous auriez dû écrire, parce qu’elle vous montre le seul accès dont l’agent avait réellement besoin et la douzaine qu’il n’a jamais utilisés. C’est toute la différence entre deviner le moindre privilège et le déduire de la réalité du terrain.

Si c’est la question à laquelle votre parc ne sait pas répondre aujourd’hui — que peut atteindre chaque agent, et que touche-t-il réellement — c’est précisément à cela que sert la carte d’accès. La présentation du produit déroule la découverte et le diff autorisé-versus-observé ; l’architecture explique comment la collecte passive, l’identité par agent et le registre d’audit s’articulent sans jamais se placer sur le chemin de données de vos agents.

Questions fréquentes

Quelle est la différence entre l'accès autorisé d'un agent et son accès observé ?

L'accès autorisé est ce que votre politique, vos rôles IAM et vos octrois permettent à un agent de faire en théorie. L'accès observé est ce qu'un collecteur passif a réellement vu l'agent faire — quelles ressources il a atteintes et s'il a lu ou écrit. Les deux sont rarement identiques : l'autorisé est généralement bien plus large que l'observé (périmètre surprovisionné), et il arrive que l'observé dépasse ce que quiconque a examiné et voulu (dérive). C'est en comparant les deux que l'on détecte la dérive du moindre privilège plutôt que de la deviner.

Que signifient R et RW sur une carte d'accès des agents ?

R (lecture) signifie que l'agent a récupéré des données depuis une ressource sans les modifier — un SELECT, un GET, une lecture de fichier. RW (lecture/écriture) signifie qu'il a également muté l'état : un INSERT/UPDATE/DELETE, un PUT vers un stockage objet, un changement de schéma. La distinction importe car l'accès en lecture et l'accès en écriture comportent des rayons d'impact totalement différents. Un agent censé être en lecture seule sur une base de données de production que l'on observe en train d'y écrire constitue l'un des signaux les plus forts qu'une carte d'accès puisse produire.

Découvrez ce que vos agents peuvent atteindre

Olivares AI est la plateforme ouverte et auto-hébergée pour votre parc informatique d'IA. Déployez-la sur votre propre infrastructure et obtenez la cartographie des accès que réclament vos équipes de sécurité et de plateforme.