ドイツ企業でGDPRに準拠してLLMを使用するには — ClaudeまたはGPTを本番環境で利用する前に必要なこと。PIIマスキング、監査ログ、Anthropic/GoogleでのZero Data Retention、AVVに関する実践的な設定。
必須の3要素
- 上流呼び出し前のPIIマスキング — 平文の個人データをフィルタリングせずに米国プロバイダーへ送信してはなりません
- データ処理契約(AVV/GDPR第28条) — モデルプロバイダー(Anthropic、Google、OpenAI)と直接締結。KunavoはAVVを提供しません
- 監査証跡 — 目的制限を記録し、すべての呼び出しを追跡可能にすること
1) PIIマスキング — 実践編
プロンプトが自社バックエンドから出る前に、マスキング処理を通します。メールアドレス、電話番号、個人名、IBAN、社会保障番号をトークンに置き換えます:
# 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 textマッピングテーブルはローカルにのみ保持します。LLMの回答に再挿入された個人データを返す必要がある場合(例:「シュミット夫人、こんにちは」)、回答後にのみ置換します。これにより、上流プロバイダーには常に匿名化されたテキストだけが表示されます。
2) AVV — 誰がどの契約を必要とするか
- あなた ↔ Kunavo:KunavoはGDPR第28条に基づくAVVを提供しません。リクエストは米国で処理され、アップストリームプロバイダーに転送されます。プロバイダーがコンテンツをどう扱うかは、各社のプライバシーおよび保存条件で定められています(/legal/privacy参照)
- あなた ↔ モデルプロバイダー:ワークロードにAVVが必要な場合は、Anthropic、OpenAI、Googleと各社のBusinessまたはEnterprise条件で直接契約し、モデルを直接呼び出してください。Kunavo経由でサブプロセッサーの連鎖を引き継ぐことはありません
- Schrems IIリスク:AnthropicとOpenAIは米国に所在します。AVVがないため、Kunavoには米国への移転に関する標準契約条項(SCC)もありません。リスク評価で純粋なEUプロバイダーが必要とされる場合、Kunavoは適していません。カタログ内にEU所在のプロバイダーはなく、すべてのリクエストはUS-Eastのゲートウェイを経由します
3) 監査ログ — すべての呼び出しを記録する
リクエストごと:Request-ID、User-ID、モデル、ハッシュ化されたプロンプト、トークン使用量、レイテンシー、独自ログ内の相関キーとしてのRequest-ID:
# 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はあなた自身のキーです。Kunavoはこのヘッダーを評価も保存もしません。また、利用状況ダッシュボードには、どのアップストリームプロバイダーが呼び出しを処理したかは表示されません。ここでは各呼び出しについて、時刻、モデル、トークン、コスト、レイテンシーを含むKunavo独自のCall-IDを確認できます。監査ログとの照合は時刻とモデルで行います。
ゼロデータ保持(ZDR)— モデルプロバイダーと直接契約した場合のみ
デフォルトでは、AnthropicとGoogleは不正利用監視のため、プロンプトのログをそれぞれ30日間(Anthropic)または60日間(Google)保存します。GDPR上センシティブなワークロードでは、プロバイダー自身にZDRを申請し、独自契約に含めることができます。KunavoはZDRルーティングもZDRレベルも提供しません。Kunavo経由のリクエストは米国で処理され、各アップストリームプロバイダーの保存規則が適用されます。
- Anthropic ZDR:Anthropicとの直接契約を結ぶEnterprise顧客向け。Kunavo経由では利用できません
- Google Vertex AI:独自のGoogle Cloud契約で同様の条件を設定でき、EUリージョン(europe-west4/オランダ)を選択できます。KunavoはEUリージョン経由でルーティングしません
- OpenAI:Zero Data RetentionはOpenAIとの直接契約におけるEnterprise tierでのみ利用できます。Kunavo経由では仲介できません
データレジデンシー
- Kunavoのルーティング:ゲートウェイ内の単一リージョン(US-East、Ashburn)で行われます。手前に配置されたAnycast edgeだけが、あなたの近くでTLSを終端します
- アカウントデータの永続化:US-Eastに単一のプライマリデータベースがあり、ボリュームの暗号化された日次スナップショットを保存します。EU-onlyルーティングは提供していません
- 付加価値税:チェックアウトではVATを表示せず、請求書も作成しません。会計用の証憑については contact@kunavo.com に連絡してください
ほとんどのコンプライアンスチームが見落とすこと
- プロンプトに氏名が含まれる場合、その内容は個人データである — ユーザーが「Müller」と入力していなくても、「私はPetraです」と入力しただけで該当します。マスキングでは、ヒューリスティックにファーストネームと固有名詞を検出すべきです
- データを使ったトレーニングは、AnthropicとGoogleではデフォルトで無効です(ChatGPTの個人ユーザー向けとは異なります)。Kunavo自身はコンテンツを使ってトレーニングしません。アップストリームプロバイダーがコンテンツをどう扱うかは各社の条件で定められています。Kunavoはこれについて契約上の保証を提供しません
- 出力内容のハッシュ化 — DPAで定められている場合、当社は完全なテキストではなくハッシュのみを保存します
- 消去権 — GDPR第17条に基づく請求があった場合、ログからプロンプトを削除できなければなりません。これは、監査ログが削除可能である場合にのみ機能します(append-onlyのブロックチェーン構造に保存してはいけません)
ImpressumとCookieバナー
完全なコンプライアンス対応については、§5 DDGに基づく/legal/impressumと、/legal/privacyのプライバシーポリシーをご覧ください。Cookieバナーは自社サイトで管理してください(例:Usercentrics、Cookiebot、Klaro)。Kunavo自身が設定するのは機能Cookieのみです。
準備はできましたか?無料登録後、$10からチャージして従量課金で利用できます。残高に有効期限はありません。ワークロードにAVV、ZDR、またはEUデータレジデンシーが必要な場合は、モデルプロバイダーと直接契約してください。