Utiliser un LLM conforme au RGPD dans les entreprises allemandes — ce qu’il vous faut avant d’autoriser Claude ou GPT en production. Configuration pratique avec masquage des données personnelles, journaux d’audit, conservation nulle des données chez Anthropic / Google et questions relatives au contrat de sous-traitance.
Les trois éléments obligatoires
- Masquage des données personnelles avant l’appel au fournisseur amont — vous ne pouvez pas envoyer sans filtrage des données personnelles en clair à des fournisseurs américains
- Accord de traitement des données (AVV / article 28 du RGPD) — directement avec le fournisseur du modèle (Anthropic, Google, OpenAI) ; Kunavo ne propose pas d’AVV
- Piste d’audit — chaque appel doit être traçable et documenté avec une finalité déterminée
1) Masquage des données personnelles — l’aspect pratique
Avant qu’un prompt ne quitte votre propre backend, il passe par une étape de masquage. Les adresses e-mail, numéros de téléphone, noms de personnes, IBAN et numéros de sécurité sociale sont remplacés par des tokens :
# Vor jedem LLM-Aufruf PII maskieren — niemals Klartext-Personendaten
# an die Upstream-API senden.
import re
from openai import OpenAI
PII_PATTERNS = [
(re.compile(r"[\w.+-]+@[\w-]+\.[\w.-]+"), "<EMAIL>"),
(re.compile(r"\b\d{4,}\b"), "<NUMBER>"),
(re.compile(r"\b(?:\+49|0)\s*\d{2,4}\s*\d{4,8}\b"), "<PHONE_DE>"),
]
def redact(text: str) -> tuple[str, dict[str, str]]:
redacted = text
mapping: dict[str, str] = {}
for i, (pat, tag) in enumerate(PII_PATTERNS):
for match in pat.finditer(text):
key = f"{tag}_{i}_{match.start()}"
mapping[key] = match.group(0)
redacted = redacted.replace(match.group(0), f"[{key}]")
return redacted, mapping
def restore(text: str, mapping: dict[str, str]) -> str:
for key, original in mapping.items():
text = text.replace(f"[{key}]", original)
return textLa table de correspondance reste uniquement en local. Si la réponse du LLM doit réinsérer des données personnelles (par exemple « Bonjour Mme Schmidt »), nous effectuons la substitution uniquement après la réponse. Ainsi, le fournisseur amont ne voit toujours que du texte anonymisé.
2) AVV — qui a besoin de quel contrat
- Vous ↔ Kunavo : Kunavo ne propose pas d’AVV au titre de l’article 28 du RGPD. Les requêtes sont traitées aux États-Unis et transmises à des fournisseurs upstream ; la manière dont ceux-ci traitent les contenus est régie par leurs propres conditions de confidentialité et de conservation (voir /legal/privacy)
- Vous ↔ fournisseur du modèle : si votre workload nécessite un AVV, concluez-le directement avec Anthropic, OpenAI ou Google selon leurs conditions commerciales ou enterprise, puis appelez directement le modèle auprès de ce fournisseur. En passant par Kunavo, vous n’héritez pas d’une chaîne de sous-traitants
- Risque Schrems II : Anthropic et OpenAI sont établis aux États-Unis. Sans AVV, Kunavo ne fournit pas non plus de clauses contractuelles types (SCC) pour le transfert vers les États-Unis. Si votre évaluation des risques exige un fournisseur exclusivement européen, Kunavo ne convient pas : aucun fournisseur de notre catalogue n’est établi dans l’UE et chaque requête passe par notre passerelle dans US-East
3) Journal d’audit — journaliser chaque appel
Pour chaque requête : ID de requête, ID utilisateur, modèle, prompt haché, consommation de tokens, latence, et ID de requête comme clé de corrélation dans vos propres journaux :
# Jeder LLM-Aufruf wird in einem unveränderlichen Audit-Log festgehalten
import json, time, uuid
from datetime import datetime
def call_with_audit(user_id: str, prompt: str, model: str) -> dict:
request_id = str(uuid.uuid4())
redacted_prompt, mapping = redact(prompt)
# Audit-Log VOR dem Call schreiben
audit_log.write({
"request_id": request_id,
"user_id": user_id,
"timestamp": datetime.utcnow().isoformat(),
"model": model,
"prompt_redacted": redacted_prompt,
"prompt_hash": hashlib.sha256(prompt.encode()).hexdigest(),
"pii_tags_count": len(mapping),
})
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": redacted_prompt}],
extra_headers={
"X-Request-ID": request_id, # nur für deine eigenen Logs; Kunavo wertet ihn nicht aus
},
)
response_text = resp.choices[0].message.content
# Bei Bedarf PII zurück mergen (nur in der lokalen DB)
final_text = restore(response_text, mapping)
audit_log.write({
"request_id": request_id,
"response_redacted": response_text,
"tokens": resp.usage.model_dump(),
"duration_ms": int((time.time() - start) * 1000),
})
return {"text": final_text, "request_id": request_id}X-Request-ID est votre propre clé : Kunavo n’analyse pas cet en-tête et ne le stocke pas, et notre tableau de bord d’utilisation n’indique pas quel fournisseur upstream a traité un appel. Vous y voyez, pour chaque appel, l’ID d’appel propre à Kunavo, avec l’horodatage, le modèle, les tokens, le coût et la latence ; vous effectuez la correspondance avec votre journal d’audit au moyen de l’horodatage et du modèle.
Zero Data Retention (ZDR) — uniquement directement auprès du fournisseur du modèle
Par défaut, Anthropic et Google conservent les journaux des prompts pendant 30 jours (Anthropic) et 60 jours (Google) pour la surveillance des abus. Pour les workloads sensibles au RGPD, vous pouvez demander la ZDR directement au fournisseur, dans votre propre contrat. Kunavo ne propose ni routage ZDR ni niveau ZDR : les requêtes passant par Kunavo sont traitées aux États-Unis et transmises à des fournisseurs upstream, auxquels s’appliquent leurs propres règles de conservation.
- ZDR Anthropic : disponible pour les clients enterprise dans le cadre d’un contrat direct avec Anthropic. Non disponible via Kunavo
- Google Vertex AI : conditions similaires dans votre propre contrat Google Cloud, avec en plus la possibilité de choisir une région de l’UE (europe-west4 / Pays-Bas). Kunavo ne route pas via une région de l’UE
- OpenAI : Zero Data Retention uniquement pour le niveau Enterprise, dans le cadre d’un contrat direct avec OpenAI. Impossible de l’obtenir via Kunavo
Résidence des données
- Routage Kunavo : dans la passerelle, au sein d’une seule région (US-East, Ashburn). Seul le réseau périphérique Anycast en amont termine le TLS à proximité de votre emplacement
- Persistance des données du compte : une seule base de données primaire dans US-East, avec des instantanés chiffrés quotidiens des volumes. Nous ne proposons pas de routage exclusivement européen
- TVA : le processus de paiement n’affiche pas de TVA et ne génère pas de facture ; pour obtenir un justificatif comptable, écrivez à contact@kunavo.com
Ce que la plupart des équipes chargées de la conformité négligent
- Le contenu du prompt est une donnée personnelle s’il contient des noms — même si l’utilisateur n’a pas saisi « Müller », mais seulement « je m’appelle Petra ». Le masquage devrait détecter heuristiquement les prénoms et noms propres en premier
- La formation sur vos données est désactivée par défaut chez Anthropic et Google (contrairement aux offres grand public de ChatGPT). Kunavo ne s’entraîne pas lui-même sur vos contenus ; la manière dont le fournisseur upstream les traite est régie par ses propres conditions. Kunavo ne fournit aucune garantie contractuelle à ce sujet
- Hacher le contenu des sorties — nous ne conservons chez vous que le hash, et non le texte complet, si votre DPA l’exige
- Droit à l’effacement — en cas de demande RGPD au titre de l’art. 17, vous devez pouvoir supprimer le prompt de vos journaux. Cela ne fonctionne que si vos journaux d’audit sont supprimables (et non stockés dans des structures blockchain en ajout uniquement)
Mentions légales & bannière de cookies
Pour un parcours de conformité complet, consultez notre /legal/impressum au titre du § 5 DDG, ainsi que la politique de confidentialité sur /legal/privacy. Vous gérez les bannières de cookies sur votre propre site (par exemple avec Usercentrics, Cookiebot ou Klaro) — Kunavo n’utilise lui-même que des cookies fonctionnels.
Prêt ? Inscription gratuite, recharge à partir de $10, paiement à l’usage, solde qui n’expire jamais. Si votre workload nécessite un AVV, une ZDR ou une résidence des données dans l’UE, concluez le contrat directement avec le fournisseur du modèle.