Le blog

Infrastructure

Un agent efface la production : combien de temps pour revenir ?

Une suppression par l’API tient en une requête. Une restauration jamais répétée prend un temps que personne ne connaît. Deux mesures, une liste de ce que la sauvegarde oublie et un exercice d’une semaine répondent à la question avant l’incident.

Portrait de Raphaël Prasquier

Raphaël Prasquier

Infrastructure & sécurité applicative

Publié
Lecture
7 min
Un sablier couché sur une boîte d’archives en carton mat, sur un fond papier ; le sable indigo s’est arrêté au milieu du verre.
Illustration conçue avec l’IA

Une suppression par l’API prend le temps d’une requête. Une restauration que personne n’a jamais jouée prend un temps que personne ne connaît. Entre les deux se tient la question qu’un directeur technique doit pouvoir trancher avant de laisser un agent travailler sur ses environnements : s’il efface la production demain, combien de temps pour revenir, et avec quelles données ?

Nous partons d’un cas documenté par l’hébergeur lui-même. Nous en tirons deux mesures à connaître, une liste de ce que les sauvegardes oublient, et un exercice à mener cette semaine.

Ce que Railway a raconté, et ce qu’il a changé

Le 29 avril 2026, Railway a publié le récit d’un incident chez l’un de ses clients, sans le nommer. Un agent d’IA a trouvé sur le poste de l’utilisateur un jeton d’API de longue durée, doté d’un accès « à l’échelle du compte, le plus large possible », et a jugé que supprimer un volume était une étape raisonnable pour réparer autre chose[1]. Il a appelé l’ancien point d’accès de l’API. À cette date, une suppression demandée par l’API s’exécutait immédiatement, sans retour possible, alors que la même action dans le tableau de bord laissait 48 heures pour se raviser[1]. La suppression en cascade a même fait paraître les sauvegardes indisponibles dans l’interface[1].

Railway a récupéré la base, et le client a retrouvé « toutes ses données »[1]. Le billet ne dit pas en combien de temps. L’hébergeur a ensuite rendu toutes les suppressions de l’API annulables pendant 48 heures, retardé la suppression des sauvegardes elles-mêmes et donné à son serveur MCP des jetons de courte durée. Il reconnaît aussi que la bonne portée de jeton existait, mais que rien n’aidait à la choisir[1]. Son principe tient en une ligne : rendre lente l’action destructrice, rapide l’action qui répare[1].

Chiffre clé

48 h

pendant lesquelles une suppression demandée à l’API de Railway reste annulable depuis fin avril 2026. Auparavant, elle était immédiate.[1]

Railway n’est pas un cas isolé. En juillet 2025, l’agent de Replit a effacé une base de production pendant un gel du code, puis a affirmé à tort que le retour arrière ne fonctionnerait pas[2]. Replit a ensuite séparé la base de développement de la base de production, en reconnaissant que ses applications utilisaient jusque-là une seule base pour les deux[3]. Chez Amazon, le Financial Times, repris par The Register, a attribué une panne de 13 heures à des changements confiés à l’agent Kiro. Amazon conteste, parle d’une erreur humaine de configuration des droits, et dit avoir ajouté une revue obligatoire par un pair pour l’accès à la production[4]. Dans les trois récits, la même question revient : qui avait le droit de supprimer, et qu’est-ce qui permettait de revenir ?

Deux mesures à connaître avant l’incident

Les plans de continuité les nomment depuis longtemps. Le NIST définit l’objectif de point de reprise comme le moment jusqu’auquel les données doivent être récupérées après une panne, et l’objectif de délai de reprise comme la durée pendant laquelle un système peut rester en reprise avant de nuire à la mission de l’organisation[5]. Dit autrement : combien de données acceptez-vous de perdre, et combien de temps acceptez-vous d’être arrêté ?

Ces objectifs se fixent avec le métier ; les résultats se mesurent lors d’un exercice, pas sur la fiche commerciale de l’hébergeur. Chez Supabase, la restauration à un instant donné permet de choisir le point à la seconde près, dans la fenêtre de restauration disponible[6]. Cette précision ne garantit pas, à elle seule, une perte maximale, et ne dit rien du temps qu’il faudra à votre équipe pour détecter l’erreur, choisir l’instant, restaurer et vérifier. Pendant une restauration, le projet est d’ailleurs inaccessible, et la documentation demande de prévoir l’interruption[6].

Une frise horizontale en cinq jalons : dernière sauvegarde, erreur de l’agent, détection, restauration testée, reprise du service. Sous la frise, une première accolade relie la dernière sauvegarde à l’erreur et porte la mention « données perdues : à mesurer » ; une seconde accolade relie l’erreur à la reprise et porte la mention « durée d’arrêt : à mesurer ». À droite, un encadré en deux parties. « Ce qu’elle ne ramène pas » : les fichiers stockés à part, l’état chez les prestataires, les mots de passe des rôles personnalisés. « Ce qu’elle fait revenir à tort » : les comptes et les droits révoqués depuis la sauvegarde, les tâches planifiées qui repartent.
Schéma 1 La perte de données et la durée d’arrêt se mesurent en jouant la restauration, puis se comparent aux objectifs fixés avec le métier. Aucune durée n’est donnée ici : c’est la vôtre qu’il faut mesurer.

Ce que la sauvegarde ne ramène pas

Une sauvegarde de base contient une base. Le reste de l’application vit ailleurs, et c’est là que les restaurations surprennent.

  • Les fichiers. Chez Supabase, les sauvegardes de la base n’incluent pas les objets déposés par l’API de stockage[6] : factures en PDF, pièces jointes, photos de profil.
  • Les accès techniques. Les sauvegardes quotidiennes de Supabase ne conservent pas les mots de passe des rôles personnalisés, à redéfinir après restauration[6].
  • L’état chez les autres. Le prestataire de paiement, l’outil d’envoi d’e-mails et le CRM ont continué de vivre. Un abonnement souscrit après la sauvegarde existe chez le premier, plus dans votre base.
  • Ce qui revient à tort. Une base restaurée retrouve les comptes, adhésions et consentements supprimés depuis. Sur le forum de Supabase, un développeur demandait le 15 octobre comment éviter qu’une restauration ne réactive des droits révoqués, ou que des tâches planifiées et des appels sortants ne repartent au redémarrage[7]. La question vaut pour toute base restaurée.
  • Le lieu. Chez Railway, une sauvegarde de volume ne se restaure que dans le même projet et le même environnement, et réinitialiser un volume supprime toutes ses sauvegardes[8].

D’où une règle simple : restaurer d’abord à côté, avec ce que permet votre hébergeur. Supabase recommande de restaurer dans un nouveau projet pour préserver les données actuelles[6]. Chez Railway, où la sauvegarde de volume reste attachée à son projet et à son environnement[8], l’exercice passe par un export indépendant chargé dans une base de test. Neutralisez les tâches planifiées et les appels sortants avant de démarrer la copie, puis comparez les deux bases, listez les écarts et décidez de la bascule à froid.

Qui peut supprimer, et ce qu’il emporte

Le cas Railway le montre : la question n’est pas le modèle, c’est le jeton. Un jeton de compte Railway peut mener toute action d’API autorisée à son titulaire, sur toutes ses ressources et tous ses espaces de travail ; un jeton de projet est limité à un environnement d’un projet[9]. Chez Supabase, un jeton d’accès personnel se limite désormais à des organisations, des projets et des permissions. Le jeton à accès complet subsiste, marqué « hérité », et l’éditeur recommande de restreindre chaque jeton, « en particulier ceux des agents d’IA »[10].

Le second point est plus brutal. Chez Supabase, supprimer un projet efface définitivement toutes ses données, sauvegardes comprises[6]. Un jeton qui peut supprimer le projet peut donc supprimer ce qui permettrait de revenir. Une copie qui protège vraiment vit hors de portée de ce jeton : un autre compte, un autre stockage, d’autres identifiants.

Deux chaînes horizontales superposées. En haut, « avant » : un jeton de compte de longue durée, trouvé sur le disque, permet à l’agent d’appeler l’API ; la suppression du volume est immédiate ; la cascade masque les sauvegardes ; le retour dépend de l’hébergeur. En bas, « après » : un jeton limité à un projet et de courte durée ; la même demande de suppression est différée de 48 heures et reste annulable ; une copie vit hors de portée du jeton ; la restauration a été jouée et chronométrée.
Schéma 2 La ligne du haut suit le récit de Railway[1]. Dans celle du bas, l’agent est le même ; seuls changent la portée du jeton, le délai de la suppression et l’endroit où vit la copie.

Les garde-fous des plateformes aident, sans dispenser de ce tri. Le serveur MCP de Supabase demande confirmation avant un SQL qui peut supprimer des données, mais l’éditeur précise que ce n’est « pas une garantie » et que le client de l’agent doit savoir afficher la demande[11]. La frontière entre essai et production n’est pas toujours là où on la croit : chez Lovable, les brouillons lancés en septembre fonctionnent sur la base de données de l’application publiée[12].

Jouer la restauration avant d’en avoir besoin

Le jour de l’incident, la procédure de reprise ne se demande pas à l’agent qui vient de casser : celui de Replit affirmait que le retour arrière était impossible[2]. Elle s’écrit avant, sur une page, et se répète.

La page tient en quatre lignes : qui décide de restaurer, depuis quelle sauvegarde, dans quel ordre on rebranche les tâches planifiées et les prestataires, comment on prévient les clients. Une fiche écrite après un exercice vaut mieux qu’un plan écrit pour un audit. L’exercice lui-même tient dans la semaine.

Le résultat tient sur une page : deux durées mesurées, une liste de manques, le nom de celui qui décide. Ce n’est pas un plan de continuité complet. C’est la réponse à la question du titre, écrite avant que quelqu’un ne la pose en pleine nuit.

Sources

  1. Railway (Mahmoud Abdelwahab) — Your AI wants to nuke your database. Guardrails fix that.

    blog.railway.com · publié le · consulté le · Récit de l’hébergeur ; le client et l’agent ne sont pas nommés, aucune durée de reprise n’est donnée. Citations traduites par nos soins.

  2. Fortune (Beatrice Nolan) — AI-powered coding tool wiped out a software company’s database in ‘catastrophic failure’

    fortune.com · publié le · consulté le · Article de presse, qui reprend le récit de l’utilisateur et la réponse du dirigeant de Replit.

  3. Replit — Introducing a safer way to Vibe Code with Replit

    replit.com · publié le · consulté le · Séparation des bases de développement et de production, en bêta au lancement. Le billet ne mentionne pas d’incident.

  4. The Register (Dan Robinson) — Amazon’s vibe-coding tool Kiro reportedly vibed too hard

    theregister.com · publié le · consulté le · Article de presse qui rapporte la version du Financial Times (non lue, accès payant) et la réponse d’Amazon. L’attribution de la panne est contestée.

  5. NIST — SP 800-34 Rev. 1, Contingency Planning Guide for Federal Information Systems

    csrc.nist.gov · publié le · consulté le · Révision 1 publiée en mai 2010, mise à jour du 11 novembre 2010. Définitions reprises du glossaire du NIST (recovery point objective, recovery time objective).

  6. Supabase Docs — Database Backups

    supabase.com · non daté · consulté le · Documentation vivante, non datée : contenu des sauvegardes, restauration à un instant donné, suppression d’un projet.

  7. Supabase, GitHub Discussions n° 51810 — How to safely restore a Supabase backup without reactivating revoked permissions or external jobs?

    github.com · publié le · consulté le · Question d’un développeur sur le forum public de Supabase, paraphrasée.

  8. Railway Docs — Backups

    docs.railway.com · non daté · consulté le · Documentation vivante, non datée ; fonction décrite comme encore en développement.

  9. Railway Docs — Public API

    docs.railway.com · non daté · consulté le · Documentation vivante, non datée : jetons de compte, d’espace de travail et de projet.

  10. Supabase Docs — Personal Access Tokens

    supabase.com · non daté · consulté le · Documentation vivante, non datée. Citation traduite par nos soins.

  11. Supabase — Operate with confidence

    supabase.com · publié le · consulté le · Citation traduite par nos soins.

  12. Lovable — Introducing drafts: an easier way to collaborate and explore new ideas

    lovable.dev · publié le · consulté le

Le scan gratuit

Et chez vous,
qu’est-ce qui est exposé ?

Nous examinons ce que vos équipes et prestataires livrent avec l’IA : code, infrastructure et accès aux données. Un humain relit chaque constat.

Demander le scan gratuit

Scan gratuit. Des failles détectées ? Le rapport détaillé est payant.