KEEL

本番品質

第07章 本番投入のセキュリティ実践

PII マスキング・監査ログ 5 要素・RAG 権限分離・出力検証・ホスティング判断を、本番移行で必要な水準まで噛み砕いて示す。

主な読者: セキュリティSEインフラ

この章の位置づけ — 「動くもの」を「本番に耐えるもの」へ

第 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_hashretrieved_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 回程度は想定)。

対策の流れ(やさしい説明)

  1. 欲しい形を決める(例: タイトル 60 字以内、優先度は low/mid/high だけ)
  2. プログラムでチェック(Pydantic 等のスキーマ検証)
  3. ダメなら AI に直しを依頼(reask、最大 2 回程度)
  4. それでもダメなら人の確認へ

実測では 2 回のやり直しで大半が直る、という報告が多いです。最初から「たまに失敗する」前提で設計すると慌てません。


専有ホスティング — 全部オンプレにしなくていい

「全部自社サーバーに」は経営の安心感はあるが、必ずしも必要ではありません。次の 3 つの軸 で分けると話が進みます。

自社・専用向きクラウド API でよい例
機密度人事・法務・未公開 M&A公開資料寄りの照会
コスト月間トークンが非常に多い小〜中規模の利用
速さ対話で 2 秒切りたいバッチ処理

KEEL の Phase 1 はクラウド API + ゲートウェイが現実的です。機密度の高い RAG は Phase 2 で Azure OpenAI Private や自社推論のハイブリッドを検討(第 8 章・第 5 章)。

どちらの経路に流したかは監査ログの provider フィールドに必ず残す。後から説明できないと本番会議が通りません。


本番切替前のチェックリスト(要約)


既存章へのマップ

本章詳細章
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 結果)

自分がプロンプトに書いた覚えがなくても、エージェントの実行結果が次の推論のために事業者へ送信されます。ローカルの会話履歴(トランスクリプト)にも残ります。

プロンプトに書かなくても実行結果から個人情報が露出する経路と4段階対策
プロンプトに書かなくても実行結果から個人情報が露出する経路と4段階対策

*出典: 開発現場の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 の適用
1DB 設計で PII を隔離(customers / customer_details 分離)最強(新規設計向け)顧客案件の新規 DB 設計時に提案
2エージェント専用 DB ユーザー + GRANT / マスクビュー技術的強制Phase 2 · 本番接続時必須
3クエリ設計ルール(SELECT * 禁止・カラム指定)習慣頼み第 9 章開発者ルール
4値そのものが必要な調査は人間が実行最終手段SQL 作成まで Agent、実行は人間

エージェント専用シークレット・DB ユーザー

アプリ本体用とエージェント用の認証情報を分離します(should、本番 DB 接続時は推奨)。

アプリ用とエージェント用シークレット・DBユーザーの分離
アプリ用とエージェント用シークレット・DBユーザーの分離

*出典: 開発現場のAIセキュリティを見直す(nenene01 / Zenn)*

効果説明
影響範囲の分離エージェント側漏洩時は専用シークレットだけローテーション
DB 権限の絞り込み参照専用ユーザー、PII テーブル GRANT なし
監査の識別DB 監査ログで「エージェント」と「アプリ」を区別

Azure では Key Vault の別シークレット + Entra ID アプリ登録を分ける。AWS 案件では Secrets Manager + 専用 IAM ロール(第 8 章付録)。

KEEL