この記事で分かること
- AIアプリ開発で見落とされがちなPII漏洩リスクの実態
- PII Firewall SDKをNode.js/TypeScriptアプリに組み込む手順
- REST APIによるバックエンド統合のアーキテクチャパターン
- プロンプトインジェクション防御をパイプラインに組み込む方法
AIアプリ開発者が見落とすPIIリスク
LLMを使ったアプリケーションを開発する際、多くの開発者はプロンプト設計・レスポンス品質・コストの最適化に集中します。しかし「ユーザーが入力した情報にPIIが含まれていたらどうなるか」を考慮している開発者は少ないのが現状です。
たとえば、カスタマーサポートチャットボットを開発したとします。ユーザーが「山田太郎です。注文番号12345の件で問い合わせたい」と入力した場合、その氏名と注文番号がそのままOpenAIやAnthropicのAPIに送信されます。このデータは開発者が意図しない形でログに残ったり、サードパーティサービスに転送されたりする可能性があります。
個人情報保護法・GDPRのもとでは、ユーザーの個人情報を適切に保護する責任は、アプリケーション開発者(データ処理者)にも課されます。
PII Firewall SDKの基本的な使い方
インストール
npm install @pii-firewall/core
基本的なPIIマスキング
import PiiFirewall from '@pii-firewall/core';
const fw = new PiiFirewall({ lang: 'ja' });
// ユーザー入力をマスク
const { masked, detections, map } = fw.mask(userInput);
// maskedをLLMに送信
const response = await openai.chat.completions.create({
messages: [{ role: 'user', content: masked }]
});
// レスポンスのプレースホルダーを元の値に復元
const restored = fw.restore(response.choices[0].message.content, map);
detections には検出されたPIIの種類・位置・値が含まれます。これをログに記録することで、監査証跡も自動生成できます。
プロンプトインジェクション検出
const threats = fw.detectInjection(userInput);
if (threats.detected) {
// インジェクション攻撃を遮断
console.log('攻撃カテゴリ:', threats.categories);
return res.status(400).json({ error: 'Invalid input' });
}
155以上のパターンで、ジェイルブレイク・ロールプレイ攻撃・間接インジェクションなどを検出できます。
RESTful APIによるバックエンド統合
フロントエンドやマイクロサービスからHTTPで利用する場合は、REST APIを使います。
PII検出エンドポイント
POST https://pii-firewallproxy-production.up.railway.app/api/detect
{
"text": "山田太郎さん(03-1234-5678)から問い合わせがありました",
"lang": "ja"
}
レスポンス例:
{
"detections": [
{ "type": "name", "value": "山田太郎", "start": 0, "end": 4 },
{ "type": "phone", "value": "03-1234-5678", "start": 8, "end": 20 }
],
"riskScore": 0.85
}
マスキング→LLM→復元のプロキシパターン
このアーキテクチャにより、LLMはPIIを一切受け取らず、ユーザーには自然なレスポンスが返ります。アプリコードの変更を最小限に抑えながら、GDPR・個人情報保護法対応を実現できます。
ユーザー → [PII Firewall: マスク] → LLM API → [PII Firewall: 復元] → ユーザー
RAGパイプラインへの組み込み
Retrieval Augmented Generation(RAG)システムでは、ベクトルストアへのインデックス時にもPIIが混入するリスクがあります。PII Firewallの Secure RAG エンドポイントを使うと、文書のインデックス前に自動でPIIを除去できます。
POST /api/rag/secure-store
{
"documents": [...],
"pii_handling": "mask"
}
TypeScript型定義
SDKはTypeScriptファーストで設計されており、型定義が付属しています。
import type {
MaskResult,
Detection,
InjectionResult,
PiiType
} from '@pii-firewall/core';
PiiType には 'name' | 'email' | 'phone' | 'address' | 'mynumber' | 'creditcard' | ... など24種類の型が定義されています。
まとめ
AIアプリ開発においてPII保護は後付けではなく、設計段階から組み込むべきセキュリティ要件です。PII Firewall SDKを使えば、数行のコードでPIIマスキングとインジェクション防御をパイプラインに追加できます。npm installから動作確認まで5分もかかりません。まずは無料プランでお試しください。
関連用語
- PII(個人識別情報): 特定の個人を識別できる情報。氏名・メール・電話番号・マイナンバーなど24種類。
- プロンプトインジェクション: 悪意ある入力でAIの動作を乗っ取る攻撃手法。LLMアプリの最大のセキュリティリスクの一つ。
- マスキング: PIIをプレースホルダーに置換してAIへの送信前に秘匿する処理。
- RAG(Retrieval Augmented Generation): 外部ドキュメントを検索してLLMに渡すことで回答精度を高める手法。