Passer au contenu
Finanly

Sécurité et déploiement

Une seule entrée. Rien ne sort.

Finanly fonctionne sur une infrastructure que vous contrôlez, avec une seule API publique, un réseau privé pour tout le reste, une isolation appliquée dans la base de données et un journal d’audit qui ne peut pas être modifié. Voici exactement ce qui est en place — et ce qui ne l’est pas encore.

Hébergé par vousRLS par entrepriseNon certifié SOC 2 — indiqué

Contrôles

Neuf contrôles, tous traçables jusqu’au code.

La note sous chaque carte nomme le mécanisme. Votre équipe de sécurité peut demander le fichier.

Isolation des locataires

Chaque table de locataire comporte une politique de sécurité au niveau des lignes fondée sur le contexte de locataire de la requête; le rôle de l’application ne peut pas la contourner. L’application filtre aussi explicitement par locataire — deux couches.

RLS Postgres · forcée

Secrets chiffrés

Les identifiants des connecteurs sont chiffrés avec AES-GCM sous une clé principale; les données associées lient chaque texte chiffré à son locataire et à son identifiant de clé afin qu’il ne puisse pas être permuté entre locataires.

AES-GCM · tenant-bound AAD

Audit en ajout seulement

Un déclencheur de base de données rejette les opérations UPDATE et DELETE sur audit_events. Chaque action irréversible écrit l’auteur, l’événement, la référence et sa clé d’idempotence.

audit_events · trigger

Effets de bord idempotents

Les points de terminaison avec effet de bord exigent une clé Idempotency-Key. Une reprise retourne la réponse enregistrée; une charge utile modifiée sous la même clé est rejetée; le connecteur du grand livre utilise la même clé pour qu’une écriture soit créée une seule fois.

Idempotency-Key · 409 en cas de conflit

Passerelle du modèle réservée à l’interne

La passerelle du modèle n’a aucun port hôte et est appelée par core-api à l’aide d’un jeton de courte durée lié à un seul locataire et à un seul public. Elle n’atteint jamais un connecteur ni la base de données.

JWT interne · aucune API d’IA publique

Périphérie et limites de débit

TLS et routage à la périphérie; les routes publiques d’écriture sont soumises à des limites de débit par IP et par courriel; les points de terminaison administratifs se trouvent derrière une liste d’autorisation IP supplémentaire.

rate_limit.py · liste d’autorisation admin

Rôles et droits

Les adhésions portent un rôle par entreprise (propriétaire, admin, membre). Chaque fonction est une clé enregistrée vérifiée au point de terminaison et dans l’interface; les plans l’attribuent.

memberships · plan_features

Réversibilité

Les catégorisations et les écritures peuvent être annulées par le même chemin idempotent; l’action initiale et l’annulation sont des événements d’audit distincts.

txn_undo_categorization

Contrôles de parité

Le bilan, l’état des résultats et la balance de vérification sont redérivés du magasin canonique et comparés au grand livre de référence toutes les heures. La dérive est visible, pas silencieuse.

financial_statements · hourly

Multi-entreprise

Plusieurs sociétés, une seule connexion, zéro fuite.

Chaque entreprise est un locataire. Le changement définit le contexte de locataire pour chaque requête; la sécurité au niveau des lignes de Postgres l’applique sous l’application, et pas seulement dans celle-ci. Locataires illustratifs ci-dessous.

EntrepriseEntreprise A
  • Mercury · Plaid
  • grand livre ERPNext
  • Centres de coûts
WHERE tenant_id = current_setting('app.tenant_id')
EntrepriseEntreprise B
  • Shopify · Flexport
  • coût rendu
  • COGS sync
WHERE tenant_id = current_setting('app.tenant_id')
EntrepriseEntreprise C
  • Plaid · comptes EUR
  • FX revaluation
  • Comptabilité simple
WHERE tenant_id = current_setting('app.tenant_id')
ParticulierEspace personnel
  • montant disponible à dépenser
  • Paniers
  • Abonnements
WHERE tenant_id = current_setting('app.tenant_id')

Journal d’audit

Chaque action est au dossier.

Lignes illustratives avec les vrais noms d’événements : catégoriser, élément d’exportation créé, rejouer retourne le résultat enregistré, charge utile modifiée rejetée, annuler, vérification horaire de parité.

audit_events · append-only · tenant 9f26…0021
heureacteurévénementréférence
09:41:03luca@…txn.categorizeIdempotency-Key 7f3a…c1
09:41:03core-apiexport_batch.item_createderpnext JE-2026-00412
09:41:09luca@…txn.categorize (replay)même clé → réponse 200 mémorisée
09:42:17luca@…txn.categorize (changed payload)même clé → 409 idempotency_conflict
09:44:52luca@…txn.undo_categorizationreversal JE-2026-00413
09:45:00jobs-beatfinancial_statements.parity_checkBS / P&L / TB · pass

Lignes à titre d’exemple — les structures sont de vrais noms d’événements de core-api; les valeurs sont des données d’exemple.

Déploiement

Votre hébergement. Une seule pile.

Une seule pile Docker Compose : edge, UI, core-api, passerelle du modèle, connecteurs, tâches, Postgres, Redis et le moteur sémantique. Seuls edge, UI et core-api sont joignables; tout le reste se trouve sur un réseau privé sans ports hôtes.

Navigateurfinanly.ai · app.finanly.ai
edgeTLS · routage · limites de débit
core-apile point d’application unique
réseau privé · JWT interne · aucun port hôte
ai-gatewaymodèle privé · usage interne seulement
jobs · beattravailleurs Celery + planification
conformitébilan de masse · traçabilité
connector-*mercury · plaid · shopify · flexport · paypal · wise · ga4 · erpnext
Postgresmagasin canonique · RLS par locataire
Cubecouche sémantique · 26 cubes
audit_eventsajout seulement (déclencheur BD)
Redisfiles d’attente · verrous d’idempotence

Où cela s’exécute

Un seul hôte ou VPS que vous contrôlez — sur site ou dans votre compte infonuagique. Le modèle est exécuté sur le même hôte. Nous n’exploitons pas un nuage partagé multi-clients.

Où se trouvent les données

Postgres et Redis sur des volumes locaux sous un chemin que vous choisissez; sauvegardes planifiées vers un disque séparé; secrets dans un fichier d’environnement qui n’est jamais validé dans le dépôt.

Comment c’est mis à jour

Les images sont construites à partir du dépôt et balisées; un déploiement correspond à la recréation d’un conteneur; le retour arrière consiste à revenir à la balise précédente. Les migrations sont versionnées et à sens unique.

Ce qui est observable

Des ID de requête et de corrélation sur chaque réponse; les synchronisations, les reçus de webhook et les exports écrivent des événements d’audit; une sonde publique d’état; des contrôles de synchronisation réservés aux administrateurs.

Ce qui sort de l’hôte

Les appels des connecteurs vers les sources que vous reliez (votre banque, votre boutique, votre transitaire, votre grand livre) et la recherche Web auto-hébergée pour l’enrichissement des fournisseurs. Aucune ligne du grand livre n’est envoyée à une API d’IA.

Ce que vous pouvez inspecter

La surface OpenAPI de core-api, le contrat du connecteur, l’historique des migrations et le fichier Compose. La documentation est rédigée comme une exigence de chaque service.

État de certification

Ce qui est en place. Ce qui ne l’est pas encore.

Nous préférons vous le dire plutôt que de le laisser entendre.

En place et documenté

  • Sécurité au niveau des lignes par locataire, forcée pour le rôle d’application
  • Secrets chiffrés AES-GCM liés à leur locataire
  • Événements d’audit en ajout seulement imposés par un déclencheur de base de données
  • Clés d’idempotence sur chaque point de terminaison ayant un effet de bord
  • Passerelle du modèle réservée à l’interne; aucune API d’IA publique; aucun repli vers le nuage
  • Limites de débit sur les routes publiques d’écriture; liste d’autorisation IP admin
  • Déploiement auto-hébergé avec migrations versionnées et retour arrière par balise d’image
  • Sauvegardes planifiées des bases de données et des secrets vers un disque séparé

Pas encore

  • Rapport SOC 2 Type I ou Type II — contrôles documentés, audit non lancé
  • Rapport de test d’intrusion par un tiers
  • SLA formel et historique de disponibilité (la page d’état est une sonde en direct, pas des antécédents)
  • Authentification unique (SAML / OIDC) pour les fournisseurs d’identité institutionnels
  • Clés de chiffrement gérées par le client
  • Programme public de prime aux bogues

FAQ

Réponses claires

Finanly peut-il voir nos données?

Pas sans que vous accordiez l’accès. La pile fonctionne sur votre hébergement; il n’existe pas de nuage exploité par Finanly qui héberge vos données. Le soutien se fait avec vous, selon vos conditions.

Comment une entreprise est-elle tenue à l’écart d’une autre?

Les politiques de sécurité au niveau des lignes dans Postgres filtrent chaque table de locataire selon le contexte de locataire de la requête, et l’application applique aussi un filtrage explicite par-dessus. Les secrets sont chiffrés par locataire. Le modèle ne voit qu’un seul locataire par appel.

Et si une synchronisation ou une exportation s’exécute deux fois?

Chaque appel à effet de bord porte une Idempotency-Key. Une répétition renvoie la réponse enregistrée; le connecteur du ledger utilise la même clé, de sorte qu’une écriture est créée une seule fois; une charge utile modifiée sous la même clé est rejetée.

Qui peut modifier le journal d’audit?

Personne. Un déclencheur de base de données rejette les mises à jour et les suppressions sur audit_events. L’annulation est un nouvel événement, pas une modification.

Quels ports sont ouverts?

L’edge (TLS), l’interface et core-api. Les connecteurs, la passerelle du modèle, les workers, Redis, Postgres et le moteur sémantique n’ont aucun port hôte et sont accessibles uniquement sur le réseau Docker privé.

Y a-t-il de l’authentification unique?

Pas encore. L’authentification repose sur le courriel et le mot de passe avec des jetons d’accès de courte durée et des sessions de rafraîchissement, plus des jetons à usage unique pour la réinitialisation du mot de passe. L’authentification unique pour les fournisseurs d’identité institutionnels est prévue.

L’IA représente-t-elle un risque de sécurité?

Ce n’est pas le cas par conception : elle ne peut pas lire des lignes, appeler des connecteurs ni enregistrer d’écritures. Elle reçoit une question et un vocabulaire, puis retourne un plan que la plateforme valide. Elle s’exécute sur votre hébergement.

Pouvons-nous examiner le code et les contrôles?

Oui, dans le cadre d’une entente. L’architecture, la surface OpenAPI, les migrations et le fichier Compose constituent les principales preuves; nous les passons en revue avec votre équipe.