この章の位置づけ — 「動くもの」を「本番に耐えるもの」へ
第 6 章で DLP・ガードレール・fail-closed の骨格を説明しました。本章は、社内 RAG や複数部署展開など 本番投入で法務・監査から指摘されやすい 4 点 を、実装担当が迷わないよう噛み砕いて整理します。
技術的な深掘りは、自社運用 LLM のセキュリティ実践(PII マスキング・監査・権限分離・ホスティング判断)および Microsoft Presidio・NIST・EU AI Act の公開情報を整理したものです。コードは第 12 章の実装フェーズで詳細化します。
本番前にクリアする 4 つの柱
| 柱 | 一言で | 第 6 章との関係 |
|---|---|---|
| PII マスキング | 個人情報を外に出さない | DLP L2/L3 の具体化 |
| 監査ログ | あとから説明できる | 第 4 章ログポリシーの強化版 |
| 権限分離 | 見ていい資料だけ見せる | RAG/MCP リスクの実装 |
| 出力の安全 | AI の返答が壊れない形 | ガードレールの構造化 |
[利用者] → ①マスキング → [ゲートウェイ] → [モデル]
↓
②監査ログ(誰・何・いつ・どのモデル・いくら)
↓
[RAG 検索] → ③権限フィルタ → ④出力チェック → [利用者 / 下流システム]
① PII マスキング — ルールと AI の併用
PII(Personally Identifiable Information) = 個人を特定できる情報(氏名、電話、マイナンバーなど)。
なぜ正規表現だけでは足りないか
| パターン | 正規表現 | 難しい例 |
|---|---|---|
| 電話・メール・マイナンバー | 得意 | — |
| 日本語の氏名・住所 | 苦手 | 「田中」は人名か地名か分からない |
おすすめの考え方(ハイブリッド)
| 種類 | 手法 | イメージ |
|---|---|---|
| 形式が決まっている情報 | ルール(正規表現) | 速い・確実 |
| 氏名・住所・組織名 | AI による判定(NER) | 文脈を見る |
Phase 1 ではルール中心、Phase 2 で Presidio 等の外部 DLP 連携を検討(第 12 章)。閾値(何点以上でマスクするか)は、200 件程度の手動チェックで業務に合う線を探すのが現実的です。
ファイルも忘れない
Excel・PowerPoint も社内文書の半分近くを占めます。取り込みパイプラインの上流でテキスト化してからマスキングします。名刺写真・ホワイトボードは「取り込まない」とルールで決めるのも有効です。
② 監査ログ — 答えるべき 5 つの問い
監査・法務から「どこまで残すの?」と聞かれたとき、次の 5 つに答えられれば足りることが多いです。
| # | 問い | ログに残す項目の例 |
|---|---|---|
| 1 | 誰が | user_id、ロール、仮想キー ID |
| 2 | 何を | 参照ドキュメント ID、DLP 判定、(本文は原則非保存) |
| 3 | いつ | UTC タイムスタンプ(ミリ秒) |
| 4 | どのモデルで | プロバイダ名、モデル名、バージョン |
| 5 | いくらか | 入力/出力トークン数、概算コスト |
プロンプト全文は残す?(第 4 章との整合)
| 方針 | メリット | デメリット |
|---|---|---|
| ハッシュのみ長期保存(推奨) | 漏洩時の被害が小さい | 全文再現はできない |
| 本文 30 日で自動削除 | 調査期間は足りる | ストレージ設計が必要 |
| 全文を何年も保存 | 監査には楽 | 事故時のリスク大 |
prompt_hash と retrieved_doc_ids があれば、「あの回答は何を根拠にしていたか」は多くの場合追えます(第 14 章 EU AI Act とも整合)。
保持期間は一律にしない
「全部 7 年」はコストが跳ね上がることがあります。文書分類ごとに法務・情シス・財務で合意してから決めます(第 14 章)。
③ 権限分離 — RAG は「検索の時点」で切る
LLM に渡す前にモデルは内容を読んでしまうため、ベクター DB 検索時に権限フィルタが必要です。
チャンク単位の権限(ACL)
各文書の断片(チャンク)に「誰が見られるか」のラベルを付けます。
例: ["role:sales", "tenant:acme", "clearance:general"]
検索時に、ログインしている人の属性と一致するチャンクだけ返します。第 4 章の「データ過剰取得」リスクへの直接的な対策です。
よくある落とし穴
| 問題 | 対策 |
|---|---|
| 文書単位だけ ACL を持っていた | チャンク単位に作り直す |
| 添付の機密度が本文より高い | 別紙は別 ACL で分割 ingest |
| 部署異動後も古い権限 | IdP 属性と定期同期(Phase 2) |
④ 出力ガードレール — 形の決まった答えは検証する
AI に JSON やチケット情報を返させ、それを kintone や Salesforce に流す場合、たまに壊れた形式が返ってきます(100 回に 2〜3 回程度は想定)。
対策の流れ(やさしい説明)
- 欲しい形を決める(例: タイトル 60 字以内、優先度は low/mid/high だけ)
- プログラムでチェック(Pydantic 等のスキーマ検証)
- ダメなら AI に直しを依頼(reask、最大 2 回程度)
- それでもダメなら人の確認へ
実測では 2 回のやり直しで大半が直る、という報告が多いです。最初から「たまに失敗する」前提で設計すると慌てません。
専有ホスティング — 全部オンプレにしなくていい
「全部自社サーバーに」は経営の安心感はあるが、必ずしも必要ではありません。次の 3 つの軸 で分けると話が進みます。
| 軸 | 自社・専用向き | クラウド API でよい例 |
|---|---|---|
| 機密度 | 人事・法務・未公開 M&A | 公開資料寄りの照会 |
| コスト | 月間トークンが非常に多い | 小〜中規模の利用 |
| 速さ | 対話で 2 秒切りたい | バッチ処理 |
KEEL の Phase 1 はクラウド API + ゲートウェイが現実的です。機密度の高い RAG は Phase 2 で Azure OpenAI Private や自社推論のハイブリッドを検討(第 8 章・第 5 章)。
どちらの経路に流したかは監査ログの provider フィールドに必ず残す。後から説明できないと本番会議が通りません。
本番切替前のチェックリスト(要約)
- [ ] PII: ルール +(Phase 2)NER の評価サンプル実施
- [ ] 監査: 5 つの問いに答えられるログスキーマ
- [ ] RAG: チャンク ACL と ingest パイプラインのテスト
- [ ] 出力: 下流連携がある場合はスキーマ検証 + reask
- [ ] ホスティング: 機密度別のルーティング方針が文書化されている
- [ ] 負荷: マスキングの遅延を並列数で確認(ワーカーごとのモデル読み込みに注意)
既存章へのマップ
| 本章 | 詳細章 |
|---|---|
| PII・Presidio | 第 6 章 DLP、第 12 章実装 |
| 監査 5 要素 | 第 4 章ログ、第 14 章コンプライアンス |
| RAG ACL | 第 4 章 RAG リスク、第 8 章ネットワーク |
| 出力検証 | 第 6 章ガードレール、第 12 章 |
| ホスティング判断 | 第 5 章選定、第 11 章投資判断 |
次に読む章
| 役割 | 推奨 |
|---|---|
| セキュリティ | 第 14 章 → 第 13 章運用 |
| SE・インフラ | 第 12 章 → 第 8 章 |
| PM | 第 10 章(本番判断のゲート) |
| 全社員(概要のみ) | 第 1 章で十分 — 本章は深読み不要 |
v1.7 補強 — RAG / Agent 本番化の追加ゲート
本番投入前のレビューでは、通常の DLP だけでなく、RAG と Agent の データ境界を明示する。特に、間接プロンプトインジェクションは「利用者が入力した文章」ではなく、AI が取得した外部コンテンツから発火するため、検索・取得・出力の各段階で止める。
| 段階 | 追加チェック | 実装例 |
|---|---|---|
| 取り込み | RAG 文書の出所、所有者、分類、削除期限 | データカタログ、文書分類タグ |
| 検索 | 利用者権限で chunk を絞ったか | ACL filter、tenant_id、project_id |
| 生成 | 取得文書とシステム指示の優先度を分離したか | prompt scope isolation |
| 出力 | 外部リンク・画像・コード・SQL を検査したか | output sandbox、URL allowlist |
| 実行 | Tool 呼び出し前に意図・権限を確認したか | OPA/Cedar、人間承認 |
「RAG に入っている情報だから社内利用なら安全」という整理は危険。検索結果がユーザー権限を超えて混入すると、LLM は自然文として回答してしまう。
v1.10 — プロンプト以外の露出経路(ツール・DB 結果)
自分がプロンプトに書いた覚えがなくても、エージェントの実行結果が次の推論のために事業者へ送信されます。ローカルの会話履歴(トランスクリプト)にも残ります。

*出典: 開発現場のAIセキュリティを見直す(nenene01 / Zenn)*
本番 DB 調査の例
-- NG: 結果に氏名・メールが載り、そのままコンテキストへ
SELECT * FROM customers WHERE customer_id = 12345;
-- OK: 状態カラムだけ — 個人情報は載らない
SELECT customer_id, status, withdrawn_at FROM customers WHERE customer_id = 12345;
線を引く場所は「クエリを任せるか」ではなく 「結果に個人情報カラムが載るか」 です。
本番 DB 調査 — 強い順 4 段階
| 段階 | 手法 | 効き目 | KEEL の適用 |
|---|---|---|---|
| 1 | DB 設計で PII を隔離(customers / customer_details 分離) | 最強(新規設計向け) | 顧客案件の新規 DB 設計時に提案 |
| 2 | エージェント専用 DB ユーザー + GRANT / マスクビュー | 技術的強制 | Phase 2 · 本番接続時必須 |
| 3 | クエリ設計ルール(SELECT * 禁止・カラム指定) | 習慣頼み | 第 9 章開発者ルール |
| 4 | 値そのものが必要な調査は人間が実行 | 最終手段 | SQL 作成まで Agent、実行は人間 |
エージェント専用シークレット・DB ユーザー
アプリ本体用とエージェント用の認証情報を分離します(should、本番 DB 接続時は推奨)。

*出典: 開発現場のAIセキュリティを見直す(nenene01 / Zenn)*
| 効果 | 説明 |
|---|---|
| 影響範囲の分離 | エージェント側漏洩時は専用シークレットだけローテーション |
| DB 権限の絞り込み | 参照専用ユーザー、PII テーブル GRANT なし |
| 監査の識別 | DB 監査ログで「エージェント」と「アプリ」を区別 |
Azure では Key Vault の別シークレット + Entra ID アプリ登録を分ける。AWS 案件では Secrets Manager + 専用 IAM ロール(第 8 章付録)。