Sécurité
Sécurité et données
Les principes
- Le service ne se connecte jamais à GLPI. Seul le plugin émet des appels, sortants, vers l'API Tiqo. Aucun identifiant GLPI ne quitte votre serveur et aucun port entrant n'est nécessaire.
- Rien n'est envoyé au demandeur. Les suggestions sont écrites dans un suivi privé, réservé aux techniciens, sans notification.
- Pseudonymisation avant le modèle. E-mails, numéros de téléphone et IBAN sont remplacés par des jetons dans le plugin, avant l'envoi ; dans les articles de la base de connaissances et les solutions, par des mentions neutres.
- Options désactivées par défaut. La synchronisation de la base de connaissances et la mémoire des tickets résolus (offre Pro) ne fonctionnent que si vous les activez dans l'application et dans le plugin ; désactivées d'un côté ou de l'autre, elles cessent aussitôt de servir aux analyses.
- Minimisation. Le texte brut des tickets n'est pas conservé par défaut, les journaux ne contiennent jamais de contenu de ticket et sont supprimés après 30 jours.
Flux de données
À la création d'un ticket (ou quand un technicien clique sur « Régénérer ») :
- le plugin convertit le titre et la description en texte, puis les pseudonymise ;
- il appelle
POST /api/v1/analyzeen HTTPS, avec la clé API et une signature HMAC-SHA256 de la requête ; - l'API vérifie la clé, la signature et l'horodatage, applique le quota, pseudonymise une seconde fois par sécurité et envoie le texte à Mistral AI ;
- la réponse du modèle est validée (catégorie de votre liste uniquement, confiances bornées) puis renvoyée ;
- le plugin restaure les valeurs pseudonymisées dans le brouillon et écrit le suivi privé [Tiqo] dans GLPI.
Avec l'offre Pro et pendant l'essai, l'étape 3 cherche aussi, dans votre seul espace, les passages de la base de connaissances et les solutions les plus proches du ticket, limités aux articles visibles dans son entité et aux solutions de la même entité, et les tickets créés dans GLPI ces 7 derniers jours qui lui ressemblent, hors tickets résolus, clos ou supprimés (doublons possibles). Seuls les passages des FAQ publiques sont transmis au modèle avec le ticket, comme données de référence et jamais comme instructions ; le modèle peut s'appuyer sur ces FAQ dans le résumé et le brouillon. Les solutions de tickets résolus ne lui sont jamais transmises : elles sont seulement montrées aux techniciens. Un article interne (hors FAQ) n'est jamais envoyé au modèle pour rédiger les suggestions : il est seulement retrouvé par similarité (son texte est indexé à la synchronisation) et signalé aux techniciens dans le panneau du plugin et le suivi privé [Tiqo]. Le panneau du plugin n'affiche un doublon ou une solution similaire qu'au technicien qui a le droit de voir le ticket concerné ; le suivi privé [Tiqo] ne cite que le numéro et le score des tickets de la même entité, sans titre ni extrait.
Quatre autres envois existent, tous à l'initiative du plugin et sans bloquer GLPI (file d'attente envoyée par l'action automatique tiqoAnalyze, sauf la base de connaissances) :
- Retours des techniciens (
POST /api/v1/feedback) : catégorie ou urgence appliquée ou remplacée, réponse insérée, modifiée, ou ignorée à la résolution. Aucun texte. - Statut des tickets (
POST /api/v1/tickets/events) : numéro d'un ticket analysé et événement (résolu, clos, rouvert, supprimé). Aucun texte. Un ticket supprimé définitivement dans GLPI est effacé de Tiqo avec ses analyses, ses retours et sa solution, et retiré des doublons et solutions similaires enregistrés avec les autres analyses. Le plugin garde cet événement en file jusqu'à son envoi, 30 jours au plus, même pendant une erreur de clé ou de configuration. - Base de connaissances (
POST /api/v1/kb/sync, une fois par jour et quelques minutes après chaque modification d'un article dans GLPI, sur activation) : titre et texte des articles partagés avec les entités du périmètre du plugin, entités où chacun est visible et statut FAQ, et la liste des articles retirés. - Solutions (
POST /api/v1/solutions, sur activation) : titre d'un ticket analysé par Tiqo, texte de sa solution et entité, quelques minutes après sa résolution ou sa clôture.
| Envoyé à Tiqo | Jamais envoyé |
|---|---|
| Numéro et entité du ticket, titre et description pseudonymisés (les noms et prénoms écrits dans le texte ne sont pas remplacés), type, catégorie, urgence et statut actuels, date de création, type de demandeur (utilisateur ou groupe), liste des catégories de l'entité, langue, options du plugin (synchronisation de la base de connaissances, envoi des solutions) ; en en-têtes, nom de l'instance (par défaut le nom d'hôte du serveur GLPI) et versions de GLPI et du plugin. Retours des techniciens sur les suggestions et changements de statut des tickets analysés, sans texte. Sur activation : articles de la base de connaissances (avec leurs entités) et solutions des tickets analysés puis résolus, avec des mentions neutres. | Fiches demandeur et techniciens de GLPI, pièces jointes, utilisateurs GLPI, identifiants et mots de passe, table de correspondance des jetons, articles hors du périmètre d’entités du plugin. |
- Envoyé à Tiqo
- Numéro et entité du ticket, titre et description pseudonymisés (les noms et prénoms écrits dans le texte ne sont pas remplacés), type, catégorie, urgence et statut actuels, date de création, type de demandeur (utilisateur ou groupe), liste des catégories de l'entité, langue, options du plugin (synchronisation de la base de connaissances, envoi des solutions) ; en en-têtes, nom de l'instance (par défaut le nom d'hôte du serveur GLPI) et versions de GLPI et du plugin. Retours des techniciens sur les suggestions et changements de statut des tickets analysés, sans texte. Sur activation : articles de la base de connaissances (avec leurs entités) et solutions des tickets analysés puis résolus, avec des mentions neutres.
- Jamais envoyé
- Fiches demandeur et techniciens de GLPI, pièces jointes, utilisateurs GLPI, identifiants et mots de passe, table de correspondance des jetons, articles hors du périmètre d’entités du plugin.
Pseudonymisation
Le plugin remplace les adresses e-mail, les numéros de téléphone et les IBAN valides par des jetons numérotés. Les adresses IP et les noms d'hôte sont conservés, car les techniciens en ont besoin pour diagnostiquer. La pseudonymisation ne remplace pas les noms et prénoms écrits dans le texte : ce n'est pas une anonymisation.
Avant : Rappelez-moi au 06 12 34 56 78 ou sur marie.dupont@example.fr (poste 192.168.10.57)
Après : Rappelez-moi au <phone_1> ou sur <email_1> (poste 192.168.10.57)La correspondance entre jetons et valeurs reste dans votre GLPI, avec l'analyse : elle sert à restaurer le brouillon de réponse. Le serveur Tiqo ne la reçoit jamais. Côté serveur, un second filet de sécurité applique les mêmes règles, avec une correspondance gardée en mémoire le temps de la requête seulement.
Si vous désactivez la pseudonymisation dans les réglages de l'application, le modèle peut voir le texte d'origine, mais tout ce que Tiqo conserve reste pseudonymisé.
Base de connaissances et solutions : des mentions neutres
Les articles de la base de connaissances et les solutions servent à plusieurs tickets : des jetons numérotés y seraient confondus avec ceux du ticket en cours au moment de restaurer le brouillon. Le plugin y remplace donc les adresses e-mail, numéros de téléphone et IBAN valides par des mentions neutres, jamais restaurées : [adresse e-mail], [numéro de téléphone], [IBAN]. Les adresses IP et les noms d'hôte sont conservés, les noms et prénoms ne sont pas remplacés. L'API applique de nouveau les mêmes règles à la réception, par sécurité.
Avant : Écrire à support-imprimantes@example.fr ou appeler le 01 23 45 67 89 (serveur PRINT-01)
Après : Écrire à [adresse e-mail] ou appeler le [numéro de téléphone] (serveur PRINT-01)Authentification et intégrité
- La clé API est affichée une seule fois ; Tiqo n'en conserve qu'une empreinte SHA-256 et un préfixe visible.
- Le secret HMAC est un secret aléatoire distinct par espace, affiché une seule fois et illisible depuis le navigateur. Chaque requête est signée en HMAC-SHA256 sur l'horodatage, la clé d'idempotence et le corps exact de la requête.
- Un horodatage décalé de plus de 5 minutes est refusé, la signature couvre la clé d'idempotence, et une clé d'idempotence ayant produit une analyse n'est plus acceptée : une requête capturée ne peut ni produire une seconde analyse, ni être rejouée au-delà de 5 minutes. Une clé dont l'analyse a échoué est libérée pour permettre une nouvelle tentative.
- Limites : 60 requêtes par minute et par espace, 5 analyses par ticket et par jour.
- Dans GLPI, la clé et le secret sont chiffrés avec la clé propre à votre installation (GLPIKey) et ne sont jamais réaffichés.
- Dans l'application, chaque table est cloisonnée par espace de travail (Row-Level Security de Postgres). Connexion par lien magique, sans mot de passe à voler.
Le détail de la signature est décrit dans la documentation de l'API.
Hébergement et sous-traitants
| Sous-traitant | Rôle | Localisation |
|---|---|---|
| PulseHeberg | Hébergement de l’application web et de l’API | France (Marseille) |
| OVHcloud | Stockage des sauvegardes chiffrées de la base (export hebdomadaire) | France |
| Supabase | Base de données Postgres et authentification | AWS eu-west-3, Paris (France) |
| Mistral AI | Analyse des tickets (modèle de langage et empreintes vectorielles) | Union européenne |
| Stripe | Paiements et factures, sans aucune donnée de ticket | Union européenne et États-Unis (Data Privacy Framework et clauses contractuelles types) |
| Resend | Liens de connexion, e-mails de service et rapport hebdomadaire, sans contenu de ticket | Envoi depuis l’Irlande (UE) ; compte, métadonnées et journaux d’envoi aux États-Unis (clauses contractuelles types) |
| Sentry | Suivi des erreurs techniques, uniquement s’il est activé, sans contenu de ticket | Union européenne (Francfort, Allemagne) |
- Sous-traitant
- PulseHeberg
- Rôle
- Hébergement de l’application web et de l’API
- Localisation
- France (Marseille)
- Sous-traitant
- OVHcloud
- Rôle
- Stockage des sauvegardes chiffrées de la base (export hebdomadaire)
- Localisation
- France
- Sous-traitant
- Supabase
- Rôle
- Base de données Postgres et authentification
- Localisation
- AWS eu-west-3, Paris (France)
- Sous-traitant
- Mistral AI
- Rôle
- Analyse des tickets (modèle de langage et empreintes vectorielles)
- Localisation
- Union européenne
- Sous-traitant
- Stripe
- Rôle
- Paiements et factures, sans aucune donnée de ticket
- Localisation
- Union européenne et États-Unis (Data Privacy Framework et clauses contractuelles types)
- Sous-traitant
- Resend
- Rôle
- Liens de connexion, e-mails de service et rapport hebdomadaire, sans contenu de ticket
- Localisation
- Envoi depuis l’Irlande (UE) ; compte, métadonnées et journaux d’envoi aux États-Unis (clauses contractuelles types)
- Sous-traitant
- Sentry
- Rôle
- Suivi des erreurs techniques, uniquement s’il est activé, sans contenu de ticket
- Localisation
- Union européenne (Francfort, Allemagne)
Stripe et Resend opèrent en partie aux États-Unis et ne reçoivent aucune donnée de ticket. Mistral AI peut conserver les requêtes de l'API jusqu'à 30 jours pour détecter les abus, sauf si l'option de conservation nulle est accordée ; Tiqo la demande à Mistral AI. Le détail figure dans l'accord de sous-traitance.
L'application n'utilise aucun script d'analyse d'audience tiers. Les polices sont servies depuis le même domaine.
Conservation et suppression
| Donnée | Conservation |
|---|---|
| Texte complet des tickets | Non conservé par défaut (option « Conserver le texte des tickets », désactivée). |
| Titre, résumé, réponse proposée, tags et empreinte vectorielle, pseudonymisés | Pendant le contrat ou jusqu'à la purge, puis au plus 90 jours après la fin de l'essai ou de l'abonnement. |
| Journaux d'API (point d'accès, statut, durée, code d'erreur, jamais de contenu) | 30 jours. |
| Base de connaissances synchronisée (texte des articles découpé en passages, avec mentions neutres ; empreintes vectorielles) | Tant que la synchronisation est active, jusqu'à la dépublication ou la suppression de l'article dans GLPI (synchronisation suivante). Supprimée dès la désactivation de l'option dans l'application, sous quelques minutes quand elle est désactivée dans le plugin, au passage à l'offre Starter, à la purge, ou au plus 90 jours après la fin de l'essai ou de l'abonnement. |
| Solutions mémorisées (titre et solution avec mentions neutres, empreinte vectorielle) | Jusqu'à la suppression définitive du ticket dans GLPI, la désactivation de l'option dans l'application, le passage à l'offre Starter ou la purge, puis au plus 90 jours après la fin de l'essai ou de l'abonnement. Désactiver l'option dans le plugin arrête leur envoi et leur usage par ce serveur GLPI, sans les supprimer. |
| Doublons et solutions similaires enregistrés avec chaque analyse (numéro, score, titre ou extrait d'un autre ticket) | Avec l'analyse. Un ticket supprimé définitivement dans GLPI en est retiré dans toutes les analyses de l'espace ; la désactivation de la mémoire des tickets résolus dans l'application ou le passage à l'offre Starter vide les solutions similaires. |
| Retours des techniciens (accepté, modifié, ignoré ; aucun texte) | Pendant le contrat ou jusqu'à la purge, puis au plus 90 jours après la fin de l'essai ou de l'abonnement. |
| Rapports hebdomadaires (statistiques agrégées) | Pendant le contrat ou jusqu'à la purge, puis au plus 90 jours après la fin de l'essai ou de l'abonnement. |
| Correspondance de pseudonymisation | Jamais chez Tiqo : uniquement dans votre GLPI. |
| Compte (adresse e-mail) et espace | Pendant le contrat, puis jusqu’à la suppression du compte, sur simple demande. |
| Sauvegardes de la base de données (quotidiennes chez son hébergeur, export hebdomadaire chiffré en AES-256 conservé en France) | Une donnée supprimée disparaît de toutes les sauvegardes au plus tard 30 jours après sa suppression. |
- Donnée
- Texte complet des tickets
- Conservation
- Non conservé par défaut (option « Conserver le texte des tickets », désactivée).
- Donnée
- Titre, résumé, réponse proposée, tags et empreinte vectorielle, pseudonymisés
- Conservation
- Pendant le contrat ou jusqu'à la purge, puis au plus 90 jours après la fin de l'essai ou de l'abonnement.
- Donnée
- Journaux d'API (point d'accès, statut, durée, code d'erreur, jamais de contenu)
- Conservation
- 30 jours.
- Donnée
- Base de connaissances synchronisée (texte des articles découpé en passages, avec mentions neutres ; empreintes vectorielles)
- Conservation
- Tant que la synchronisation est active, jusqu'à la dépublication ou la suppression de l'article dans GLPI (synchronisation suivante). Supprimée dès la désactivation de l'option dans l'application, sous quelques minutes quand elle est désactivée dans le plugin, au passage à l'offre Starter, à la purge, ou au plus 90 jours après la fin de l'essai ou de l'abonnement.
- Donnée
- Solutions mémorisées (titre et solution avec mentions neutres, empreinte vectorielle)
- Conservation
- Jusqu'à la suppression définitive du ticket dans GLPI, la désactivation de l'option dans l'application, le passage à l'offre Starter ou la purge, puis au plus 90 jours après la fin de l'essai ou de l'abonnement. Désactiver l'option dans le plugin arrête leur envoi et leur usage par ce serveur GLPI, sans les supprimer.
- Donnée
- Doublons et solutions similaires enregistrés avec chaque analyse (numéro, score, titre ou extrait d'un autre ticket)
- Conservation
- Avec l'analyse. Un ticket supprimé définitivement dans GLPI en est retiré dans toutes les analyses de l'espace ; la désactivation de la mémoire des tickets résolus dans l'application ou le passage à l'offre Starter vide les solutions similaires.
- Donnée
- Retours des techniciens (accepté, modifié, ignoré ; aucun texte)
- Conservation
- Pendant le contrat ou jusqu'à la purge, puis au plus 90 jours après la fin de l'essai ou de l'abonnement.
- Donnée
- Rapports hebdomadaires (statistiques agrégées)
- Conservation
- Pendant le contrat ou jusqu'à la purge, puis au plus 90 jours après la fin de l'essai ou de l'abonnement.
- Donnée
- Correspondance de pseudonymisation
- Conservation
- Jamais chez Tiqo : uniquement dans votre GLPI.
- Donnée
- Compte (adresse e-mail) et espace
- Conservation
- Pendant le contrat, puis jusqu’à la suppression du compte, sur simple demande.
- Donnée
- Sauvegardes de la base de données (quotidiennes chez son hébergeur, export hebdomadaire chiffré en AES-256 conservé en France)
- Conservation
- Une donnée supprimée disparaît de toutes les sauvegardes au plus tard 30 jours après sa suppression.
Le propriétaire de l'espace peut purger à tout moment les données issues des tickets depuis Paramètres > Zone dangereuse : la suppression dans la base de données est immédiate, et une demande écrite est exécutée sous 24 heures. Sans purge, ces données sont supprimées automatiquement 90 jours après la fin de l'essai ou de l'abonnement ; l'espace et ses compteurs d'usage sont conservés. Un export des données est possible sur demande.
RGPD et accord de sous-traitance
Vous êtes responsable du traitement des données de vos tickets ; Tiqo agit en tant que sous-traitant au sens de l'article 28 du RGPD. L'accord de sous-traitance (DPA), fondé sur les clauses types de la CNIL, décrit les traitements, les mesures de sécurité et les sous-traitants ultérieurs.
Lire l'accord de sous-traitance · Politique de confidentialité
Signaler une vulnérabilité