DSGVO-konformer LLM-Einsatz in deutschen Unternehmen — was du brauchst, bevor Claude oder GPT in Produktion gehen darf. Praktisches Setup mit PII-Maskierung, Audit-Logs, Zero Data Retention bei Anthropic / Google, und der AVV-Frage.
Die drei Pflicht-Bausteine
- PII-Maskierung vor dem Upstream-Aufruf — Du darfst Klartext-Personendaten nicht ungefiltert an US-Anbieter senden
- Auftragsverarbeitungsvertrag (AVV / Art. 28 DSGVO) — direkt mit dem Modellanbieter (Anthropic, Google, OpenAI); Kunavo bietet keinen AVV an
- Audit-Trail — Jeder Aufruf nachvollziehbar, mit Zweckbindung dokumentiert
1) PII-Maskierung — der praktische Teil
Bevor ein Prompt das eigene Backend verlässt, läuft er durch einen Maskierungsschritt. E-Mails, Telefonnummern, Personennamen, IBANs, Sozialversicherungsnummern werden durch Tokens ersetzt:
# 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 textDie Mapping-Tabelle bleibt nur lokal. Wenn die LLM-Antwort wieder eingefügte Personendaten zurückgeben muss (z. B. „Hallo Frau Schmidt"), machen wir die Substitution erst nach der Antwort. So sieht der Upstream immer nur anonymisierten Text.
2) AVV — wer braucht welchen Vertrag
- Du ↔ Kunavo: Kunavo bietet keinen AVV nach Art. 28 DSGVO an. Anfragen werden in den USA verarbeitet und an Upstream-Anbieter weitergeleitet; was diese mit den Inhalten tun, regeln deren eigene Datenschutz- und Aufbewahrungsbedingungen (siehe /legal/privacy)
- Du ↔ Modellanbieter: Braucht dein Workload einen AVV, schließt du ihn direkt mit Anthropic, OpenAI oder Google zu deren Geschäfts- bzw. Enterprise-Bedingungen ab und rufst das Modell dort direkt auf. Über Kunavo erbst du keine Sub-Verarbeiter-Kette
- Schrems-II-Risiko: Anthropic und OpenAI sitzen in den USA. Ohne AVV gibt es mit Kunavo auch keine Standardvertragsklauseln (SCC) für die Übermittlung in die USA. Wenn dein Risiko-Assessment einen reinen EU-Anbieter verlangt, ist Kunavo dafür nicht geeignet: Kein Anbieter in unserem Katalog sitzt in der EU, und jede Anfrage läuft über unser Gateway in US-East
3) Audit-Log — jeden Call protokollieren
Pro Anfrage: Request-ID, User-ID, Modell, gehashter Prompt, Token-Verbrauch, Latenz, Request-ID als Korrelationsschlüssel in deinen eigenen Logs:
# 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}Die X-Request-ID ist dein eigener Schlüssel: Kunavo wertet den Header nicht aus und speichert ihn nicht, und unser Usage-Dashboard zeigt nicht, welcher Upstream-Anbieter einen Call bedient hat. Dort siehst du pro Call Kunavos eigene Call-ID mit Zeitpunkt, Modell, Tokens, Kosten und Latenz; den Abgleich mit deinem Audit-Log machst du über Zeitpunkt und Modell.
Zero Data Retention (ZDR) — nur direkt beim Modellanbieter
Standardmäßig speichern Anthropic und Google Logs der Prompts für 30 Tage (Anthropic) bzw. 60 Tage (Google) für Abuse-Monitoring. Für DSGVO-sensible Workloads kannst du ZDR beim Anbieter selbst anfordern, im eigenen Vertrag. Kunavo bietet weder ZDR-Routing noch eine ZDR-Stufe: Anfragen über Kunavo werden in den USA verarbeitet und an Upstream-Anbieter weitergeleitet, für die deren eigene Aufbewahrungsregeln gelten.
- Anthropic ZDR: für Enterprise-Kunden im direkten Vertrag mit Anthropic. Über Kunavo nicht verfügbar
- Google Vertex AI: Ähnliche Bedingungen im eigenen Google-Cloud-Vertrag, plus die Möglichkeit, EU-Region zu wählen (europe-west4 / Niederlande). Kunavo routet nicht über eine EU-Region
- OpenAI: Zero Data Retention nur für Enterprise-Tier, im direkten Vertrag mit OpenAI. Über Kunavo nicht vermittelbar
Datenresidenz
- Kunavo-Routing: im Gateway, in einer einzigen Region (US-East, Ashburn). Nur der vorgeschaltete Anycast-Edge terminiert TLS in deiner Nähe
- Persistenz von Account-Daten: eine einzige primäre Datenbank in US-East mit täglichen verschlüsselten Volume-Snapshots. EU-only-Routing bieten wir nicht an
- Umsatzsteuer: Der Checkout weist keine USt aus und erstellt keine Rechnung; für einen Beleg zur Buchhaltung schreib an contact@kunavo.com
Was die meisten Compliance-Teams übersehen
- Prompt-Inhalt ist personenbezogen, wenn er Namen enthält — auch wenn der User nicht "Müller" eingegeben hat, sondern nur "ich heiße Petra". Maskierung sollte heuristisch erste Namen + Eigennamen erfassen
- Training auf deinen Daten ist bei Anthropic und Google per default ausgeschaltet (im Gegensatz zu ChatGPT-Konsumenten). Kunavo selbst trainiert nicht auf deinen Inhalten; was der Upstream-Anbieter damit tut, regeln dessen eigene Bedingungen. Eine vertragliche Zusicherung dazu gibt Kunavo nicht
- Output-Inhalte hashen — wir speichern bei dir nur den Hash, nicht den vollständigen Text, falls dein DPA das vorgibt
- Recht auf Löschung — bei einer DSGVO-Anfrage Art. 17 musst du den Prompt aus deinen Logs löschen können. Das funktioniert nur, wenn deine Audit-Logs deletable sind (also nicht in append-only-Blockchain-Strukturen)
Impressum & Cookie-Banner
Für eine vollständige Compliance-Strecke siehe unser /legal/impressum nach § 5 DDG sowie die Datenschutzerklärung unter /legal/privacy. Cookie-Banner pflegst du auf deiner eigenen Website (z. B. mit Usercentrics, Cookiebot oder Klaro) — Kunavo selbst setzt nur funktionale Cookies.
Bereit? Kostenlose Registrierung, ab $10 aufladen, Pay-as-you-go, Guthaben verfällt nie. Braucht dein Workload einen AVV, ZDR oder EU-Datenresidenz, schließ den Vertrag direkt mit dem Modellanbieter ab.