La sécurité chez RootSpend
Vous nous confiez les clés de vos factures. Voici exactement ce que nous en faisons, avec de quoi le vérifier, pas seulement des promesses.
- Lecture seule
- Clés chiffrées
- Données cloisonnées
- L’IA selon vos règles
- Chaque modification tracée
- Export ou suppression à tout moment
Nous ne faisons que lire
RootSpend lit des coûts et des usages. Il ne crée, ne modifie et ne supprime jamais rien dans vos outils. Voici chaque permission demandée par chaque connecteur, mot pour mot.
Facturés à l’usage
- Lire les rapports de coûts de l’organisation
- Lire les rapports d’usage de l’organisation
- Lire les workspaces et les noms des clés API (jamais les clés elles-mêmes)
- Lire les membres de l’organisation
- Lire les analytics (read:analytics) : rapports de coûts et d’usage, par utilisateur
- Lire les coûts de l’organisation
- Lire l’usage de l’organisation
- Lire les projets
- Lire les membres de l’organisation
- SELECT sur SNOWFLAKE.ORGANIZATION_USAGE.USAGE_IN_CURRENCY_DAILY, accordé avec GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE
- Lecture dans ACCOUNT_USAGE du metering des warehouses, de l’attribution des requêtes, de l’usage Cortex AI et des utilisateurs, pour afficher le coût par warehouse et par utilisateur (même autorisation)
- USAGE sur un petit warehouse, pour exécuter la requête en lecture seule
- BigQuery Data Viewer sur le dataset de l’export de facturation
- BigQuery Job User sur le projet où s’exécute la requête
Factures cloud
- ce:GetCostAndUsage (Cost Explorer, lecture seule)
- sts:AssumeRole sur le rôle que vous fournissez, si vous en fournissez un
- BigQuery Data Viewer sur le dataset de l’export de facturation
- BigQuery Job User sur le projet où s’exécute la requête
- Cost Management Reader sur l’abonnement ou le compte de facturation fourni
Facturés par siège
- Lire les attributions de sièges Copilot (manage_billing:copilot ou read:org)
- Lire le rapport d’usage de facturation de l’organisation
- Aucune. Rien n’est lu chez le fournisseur, vous saisissez vous-même le prix et les sièges.
Vos clés restent sous clé
Une clé est chiffrée avant d’entrer dans la base de données, et déchiffrée seulement le temps d’une synchronisation.
- 1Vous la collez et pouvez la tester par une lecture avant d’enregistrer.
- 2Elle est chiffrée avec Fernet : chiffrement AES 128, signé en HMAC SHA256. Une valeur altérée refuse de se déchiffrer.
- 3Elle est stockée chiffrée à côté de votre outil, jamais en clair.
- 4Elle est utilisée en mémoire uniquement pendant une synchronisation, puis oubliée.
- 5Elle ne ressort jamais Aucun écran, API, export ou journal ne la renvoie. Les clés IA affichent un indice masqué, rien de plus.
- 6Vous gardez la main Remplacez-la ou déconnectez l’outil à tout moment.
- En production, le serveur refuse de démarrer sans clé de chiffrement valide : il ne peut donc jamais se rabattre sur un stockage en clair.
- Les messages d’erreur des fournisseurs sont nettoyés de tout identifiant avant d’être journalisés.
- RootSpend n’appelle que les adresses officielles de chaque fournisseur. Par exemple, il ne suit pas un lien Azure vers un autre hôte que management.azure.com.
Vos données sont cloisonnées, deux fois
Chaque requête est liée à une seule entreprise. L’application filtre sur elle, et la base de données l’impose à nouveau, de son côté.
Chaque table qui contient des données d’entreprise porte cette règle, tirée telle quelle de notre base. Une requête qui ne précise pas pour quelle entreprise elle travaille ne voit rien du tout, et une écriture pour la mauvaise entreprise est refusée par la base elle-même, pas seulement ignorée par notre code.
ALTER TABLE tools ENABLE ROW LEVEL SECURITY;
ALTER TABLE tools FORCE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON tools
USING (org_id = NULLIF(current_setting('app.current_org_id', true), '')::uuid)
WITH CHECK (org_id = NULLIF(current_setting('app.current_org_id', true), '')::uuid);- FORCE signifie que la règle s’applique aussi à l’utilisateur de base de données de RootSpend, pas seulement aux autres.
- Les tâches de fond, comme les synchronisations et les analyses, tournent sous la même règle, une entreprise à la fois.
L’analyste IA, selon vos règles
Il lit un court résumé de vos dépenses et suggère des économies. Il n’agit jamais, et n’a jamais le dernier mot sur un chiffre.
Ce qu’il voit
- Les totaux de dépenses par outil, service, ressource, catégorie, équipe et projet
- L’évolution de chaque total par rapport à la période précédente
- La régularité de chaque coût d’un jour à l’autre
- Combien de personnes ont des dépenses sur un outil : un nombre, jamais qui
Ce qu’il ne voit jamais
- Les noms ou e-mails des personnes
- Les lignes de facture brutes
- Vos clés
- Vos tables, fichiers ou prompts
- Les notes de votre équipe, comme la raison d’écarter une piste
{
"currency": "USD",
"period": { "start": "2026-09-28", "end": "2026-10-27", "days": 30 },
"totals": { "spend": 18158.42, "change_pct": 4.6 },
"tools": [
{ "id": "t1", "name": "Snowflake", "connector": "snowflake",
"category": "Databases", "spend": 7906.10, "change_pct": 2.4,
"people_with_spend": 14 }
],
"services": [
{ "id": "s1", "tool": "t1", "name": "ANALYTICS_WH", "spend": 3120.50,
"active_days": 30, "period_days": 30, "daily_variation_pct": 8.2 }
],
"teams": [ { "name": "Data", "spend": 3688.00, "change_pct": 6.1 } ],
"daily_spend": [ { "day": "2026-10-27", "spend": 612.40 } ]
}- Les noms issus de vos outils sont envoyés comme des données que l’IA a ordre de ne jamais suivre : un texte caché dans le nom d’une ressource ne peut pas lui donner d’instructions.
- L’IA n’écrit jamais de montant. Elle écrit des emplacements, et RootSpend remplit chaque chiffre à partir de vos données.
- Chaque piste doit citer la dépense exacte qu’elle concerne. Tout ce qui cite une dépense inexistante est écarté, et aucune économie ne peut dépasser ce que vous dépensez réellement.
- Les liens et la mise en forme sont retirés de sa réponse avant que quiconque la voie.
- Il ne peut rien modifier dans vos outils. Les personnes décident, et RootSpend mesure le résultat 14 jours plus tard.
- Les dépenses IA sont plafonnées. Chaque requête réserve son coût maximal avant d’être envoyée, si bien qu’une enveloppe ne peut pas être dépassée.
- Un admin choisit RootSpend AI, votre propre clé Anthropic, OpenAI ou Gemini, ou la désactivation.
Les données sur les personnes sont à activer
Savoir ce que coûte chaque personne est utile, et sensible. C’est donc désactivé tant que vous n’en décidez pas autrement.
- Les coûts par personne restent désactivés tant qu’un propriétaire ne les active pas pour l’organisation.
- Même alors, seuls les rôles autorisés à voir les personnes y ont accès. Les autres voient les équipes et les outils.
- Les données sur les personnes ne sont jamais envoyées à l’analyste IA.
Comptes et connexion
Un mot de passe, et une seconde vérification par e-mail.
- Les mots de passe sont hachés avec bcrypt. Personne ne peut les lire, nous compris.
- Chaque nouveau compte confirme son e-mail avec un code à 6 chiffres avant que quoi que ce soit ne s’ouvre.
- Se connecter depuis un nouveau navigateur demande votre mot de passe et un code envoyé à votre e-mail. Chaque navigateur doit se reconfirmer tous les 3 jours.
- Les codes expirent au bout de 10 minutes, ne servent qu’une fois et sont bloqués après 5 essais erronés. Nous ne les conservons que sous une forme que personne ne peut relire.
- Réinitialiser ou changer votre mot de passe, ou vous déconnecter partout, oblige chaque navigateur à se reconfirmer avec un nouveau code.
- Connexion, inscription et réinitialisation du mot de passe acceptent 5 tentatives par minute depuis une même adresse, ce qui bloque les attaques par force brute.
- Votre session est conservée dans un cookie sécurisé httpOnly, illisible par les scripts de la page. Se déconnecter ou changer de mot de passe y met fin.
- En production, le cookie de connexion ne circule qu’en HTTPS.
- Les rôles déterminent qui peut voir les coûts, gérer les budgets, connecter des outils ou voir les personnes.
Notre propre accès est limité, et vous le voyez
Il nous arrive de devoir consulter une organisation pour l’aider. Cet accès est restreint et laisse une trace.
- 1
Sur la liste
Seuls les e-mails d’une liste conservée sur le serveur peuvent ouvrir la console. Aucun bouton de l’application n’y ajoute qui que ce soit.
- 2
Second facteur
Un code issu d’une application d’authentification, impossible à réutiliser.
- 3
30 minutes
Les sessions de la console se terminent après 30 minutes, ou quand la personne se déconnecte.
- Dans votre organisation, notre équipe peut seulement consulter. Tout ce qui modifierait vos données est refusé.
- Chaque visite est inscrite dans votre propre journal d’audit, sous platform_admin.viewed.
Chaque modification est tracée
Qui a fait quoi, et quand. Quelques-uns des événements enregistrés dans votre journal d’audit :
tool.connectedtool.reconnectedtool.deletedbudget.updatedalert_rule.createdgroup.people_setmember.updatedinvitation.createdai.settings_updatedai.key_deletedrecommendation.marked_appliedorg.exportedplatform_admin.viewed
Les clés ne sont jamais écrites dans le journal d’audit, pas même masquées.
Vos données, à exporter ou supprimer
Elles vous appartiennent. Vous pouvez les emporter, ou les supprimer définitivement.
- Les propriétaires peuvent tout exporter à tout moment : chaque table qui contient les données de leur organisation.
- L’export exclut les clés de vos connecteurs, et retire tout champ qui ressemble à un secret.
- Supprimer une organisation efface toutes ces tables d’un coup, après avoir saisi son nom exact.
Ce site
Le site que vous lisez est aussi soigné que l’application.
- Aucun cookie et aucun traceur publicitaire. Les visites sont comptées avec Cloudflare Web Analytics, qui ne dépose aucun cookie et ne vous identifie pas.
- Servi uniquement en HTTPS, avec des en-têtes de sécurité stricts, dont une Content Security Policy qui bloque les scripts d’autres sites.
- Le formulaire de contact est transmis par Web3Forms directement dans notre boîte mail. Nous ne vous ajoutons à aucune liste.
Signaler un problème de sécurité
Vous avez trouvé quelque chose ? Dites-le-nous, nous regardons immédiatement.
Écrivez à hello@rootspend.com en décrivant ce que vous avez trouvé et comment le reproduire.
Ou utilisez le formulaire de contactLes questions des équipes sécurité
Non. RootSpend lit uniquement des coûts et des usages. Dès qu’un fournisseur propose une clé, un rôle ou un utilisateur en lecture seule, c’est tout ce qu’il demande, et il ne crée, ne modifie et ne supprime jamais rien dans vos outils.
Non. Les clés sont chiffrées avant d’être stockées et ne sont déchiffrées qu’en mémoire, pendant une synchronisation. Aucun écran, API, export ou journal ne les affiche à nouveau : même notre équipe ne peut pas les relire.
Uniquement pour le support, uniquement en lecture seule, et seulement après trois contrôles : un e-mail sur une liste conservée sur le serveur, un code d’application d’authentification et une session qui expire après 30 minutes. Chaque visite est inscrite dans votre propre journal d’audit.
RootSpend n’entraîne jamais de modèle sur vos données. L’analyste IA ne reçoit que des totaux de dépenses, jamais de personnes, de factures brutes ni vos clés. Avec RootSpend AI, la requête passe par l’API professionnelle du fournisseur ; avec votre propre clé, c’est votre accord avec ce fournisseur qui s’applique. Un admin peut désactiver l’IA à tout moment.
Un propriétaire peut tout exporter à tout moment, puis supprimer l’organisation. La suppression efface d’un coup chaque table qui contient vos données, après avoir demandé le nom exact de l’organisation.
Posez-nous toutes vos questions de sécurité
Réservez une démo et venez avec vos questions de sécurité. Nous les passerons toutes en revue, à l’écran.
Ouverture prochaine. La liste d’attente passe en premier.