3行でいうと
- 各社のフィルタは、文章の中から個人情報などを見つけ、動作を選べます。遮断(ブロック)、置き換え(マスク)、検出だけして記録(何もしない)の3つが基本で、入力と出力で別々に決められる製品もあります。
- 公式の文書自身が、限界を書いています。検出は確率的で完全ではないこと、AIが道具を呼ぶときの引数や結果は対象外のものがあること、元の文章がログに残る場合があること、直接アップロードしたファイルは検査されない場合があることなどです。
- 入口のフィルタは、対策の一部です。OWASPは、入力の無害化に加えて、アクセス制御と利用者への教育を並べています。システムへの指示だけで守ろうとすると、プロンプトインジェクションで回避されうる、とも書かれています。
この記事は、実際に使って確かめた記録ではありません。この記事は公式の文書を読んでまとめたもので、実際に使って確かめた記録ではありません。情報は2026年10月16日に確認しました。製品の機能や状態(プレビューなど)は変わることがあります。
先に結論
- 「AIの入口にDLPを置く」とは、利用者やアプリがAIに送る文章(と、返ってくる文章)を、AIに届く前に検査して、機密情報があれば止める・伏せる・記録する、という設計です。AWSは、モデルを呼ばずに文章だけを検査するAPIを用意しています。
- 公式の資料を読むと、フィルタは「置けば安心」というものではありません。検出が確率的であること(AWS)や、対象外の経路(道具の呼び出し、アップロードされたファイル、ログ)があることが、各社の文書に書かれています。
- 日本の事情として、僕らが読んだ範囲では、日本固有の識別子(マイナンバーなど)を組み込みで検出すると書いた公式の記載は見つかりませんでした。日本の組織で使うなら、独自の検出ルールを足す設計になる可能性があります(見立て)。
前提:DLPとは、AIの入口とは
DLP(Data Loss Prevention、情報漏えい防止)は、機密情報が外へ出るのを、検出して防ぐ考え方や製品の総称です(ここは一般的な説明で、読んだ文書からの要約ではありません)。AIの場合、出ていく道が増えます。利用者がAIの入力欄に貼る、アプリがユーザーの文章をそのままAIのAPIに送る、AIの返事に機密が混ざる、などです。
OWASP(Webの安全を扱う団体)のLLM向けリスク一覧には、「機密情報の漏えい」(LLM02:2025)があります。説明によると、AIが出力を通じて個人データ、財務や健康の記録、事業の秘密、認証情報などを出してしまうことで、利用者が入力した機密があとで応答に現れる場合も含みます。対策として挙がっているのは、次のものです。
- データの無害化:学習に入る前に洗い、入力も検査する。
- アクセス制御:必要最小限のデータだけを使えるようにする。
- 利用者への教育と透明性:機密を入力しないよう伝え、保持と削除の方針を示す。
- トークン化やパターンによる伏せ字で、処理の前に機密を取り除く。
同じ文書は注意も書いています。システムプロンプトで返してよいデータの種類を制限しても、プロンプトインジェクションなどで回避されうる、というものです。つまり、フィルタはAIへの指示とは別に、AIの外側に置く必要があります。
3つの動作:遮断・置換・検出のみ
製品ごとに言葉は違いますが、動作は3つに整理できます。
| 動作 | AWS Bedrock Guardrails | Google Model Armor | 意味 |
|---|---|---|---|
| 遮断 | BLOCK | 検査して遮断 | 全体を止めて、設定した定型の文言を返す |
| 置換 | ANONYMIZE(マスク) | (詳細設定のSensitive Data Protectionで非識別化) | 検出した部分を{NAME}のような種類名や伏せ字に置き換える |
| 検出のみ | NONE | 検査のみ | 止めずに、検出の結果を返す・ログに残す |
Bedrock Guardrailsは、入力と出力で別の動作を設定できます(項目名はinputActionとoutputActionなど)。たとえば、メールアドレスを入力では遮断し、出力では置換する、という設定が考えられます。
小さな設定例(公式の項目名をもとにこの記事で組んだ形、動作確認はしていません)
AWSの文書にある項目名(inputAction、outputAction、inputEnabled、outputEnabledなど)を使った、設定の形の例です。外側のsensitiveInformationPolicyConfigやpiiEntitiesConfigなどの名前は、読んだ記録では確認できていないため、実際の仕様で確かめてください。
"sensitiveInformationPolicyConfig": {
"piiEntitiesConfig": [{
"type": "EMAIL",
"action": "ANONYMIZE",
"inputAction": "BLOCK",
"inputEnabled": true,
"outputAction": "ANONYMIZE",
"outputEnabled": true
}]
}
また、ApplyGuardrailというAPIは、文章をsource(INPUTかOUTPUT)つきで送ると、actionがGUARDRAIL_INTERVENEDかNONEで返ります。マスクした場合は、置換後の文章がoutputsに入ります。ただし、読んだページでは、例とスキーマの間に、項目名の食い違い(outputとoutputsなど)がありました。実際に使うときは、APIの正式な仕様で確かめる必要があります。
3つの製品の見比べ
| AWS Bedrock Guardrails | Google Model Armor + Sensitive Data Protection | Microsoft Purview DLP(Copilot向け) | |
|---|---|---|---|
| 置き場所 | モデルとは独立のAPI(ApplyGuardrail)で任意の場所から |
プロンプトと応答を検査するサービス | Microsoft 365のCopilotの場所(ポリシーの対象) |
| 検出 | 組み込みのPII種類 + 独自の正規表現 | 基本は決まった種類の検査のみ。詳細設定でテンプレート | 機密情報の種類(組み込みと独自)、機密ラベル |
| 動作 | 遮断/マスク/検出のみ | 検査のみ/検査して遮断。詳細設定で非識別化 | プロンプトの処理のブロック(プレビュー)、Web検索のブロック、ラベル付きの除外 |
| 明記された限界 | ツール呼び出しは対象外、ログに元の文が残る | 1ターンずつ検査、エンコードは見ない | アップロードしたファイルは検査されない、反映に最大4時間 |
Microsoftの文書は、Microsoft 365のCopilotやCopilot Chat向けです。自前で作るAIアプリの入口ではなく、Microsoftの製品に組み込まれたAIを管理する仕組みなので、他の2つとは対象が違います。
オープンソースの選択肢として、Presidioがあります。公式のページによると、テキストや画像の中の私的なデータを見つける分析(Analyzer)と、伏せる処理(Anonymizer)があり、固有表現認識、正規表現、ルール、チェックサム、文脈を組み合わせて検出します。多言語に対応し、独自の検出器や外部のモデルをつなげられます。HTTPサービスとして動かせる、とも書かれています。
各社が書いている検出の範囲と制限の数字
AWS Bedrock Guardrails(Sensitive information filters)
- 組み込みのPII種類(一部):一般(
NAME、EMAIL、PHONE、ADDRESS、PASSWORDなど)、金融(CREDIT_DEBIT_CARD_NUMBER、PIN、SWIFT_CODEなど)、IT(IP_ADDRESS、AWS_ACCESS_KEY、AWS_SECRET_KEYなど)、米国5種、カナダ2種、英国3種。日本固有の項目は、一覧にありませんでした。 - 独自の正規表現:名前は1〜100文字、パターンは1〜500文字、説明は1〜1000文字。ルックアラウンド(前後を見る指定)には対応しません。
- 検出の性格:機械学習による確率的で、文脈に依存します。文脈が多いほど正確になるので、単語や短い句の単独の検査は避けるよう、文書が注意しています。
- コードや文字列リテラルの中の機密も検出対象と書かれています。
Google Model Armor(Overview)
- Sensitive Data Protectionの基本設定は検査のみで、クレジットカード番号、米国の社会保障番号、金融口座番号、米国の個人納税者番号、Google Cloudの認証情報とAPIキーが対象です。詳細設定はテンプレートで細かく指定でき、非識別化にも対応します。
- 各プロンプトと応答は、会話の履歴なしの1ターンとして検査されます。
- Base64、16進、URLエンコード、暗号文は、復号も検査もされません。
- 画像はJPEG、PNG、BMPで4 MBまで、ファイルも4 MBまで。1回のリクエストでテキストと画像は併用できません。音声と動画は非対応です。
- 応答の読み方:
SanitizeUserPromptの応答にはfilterMatchState(MATCH_FOUNDかNO_MATCH_FOUND)が含まれます。検査を飛ばした場合はEXECUTION_SKIPPEDなどが返りますが、その扱い方をアプリ側でどうすべきかは、再確認したページに書かれていませんでした。
Microsoft Purview DLP(Copilot向けの場所)
- 「プロンプトの処理のブロック」と「外部メールの除外」はプレビューと表示されています。機密情報の種類と機密ラベルの条件は、同じルールで併用できません。
- ブロックされたプロンプトには応答が返らず、検索にも使われません。
- ファイルをプロンプトに直接アップロードした場合は、DLPの検査対象外で、入力した文字だけが検査されます。
- ポリシーの更新が反映されるまで、最大4時間かかります。
抜け道:公式が書いている「守れない場所」
3社の文書に共通して見られる限界を、僕らが整理しました。
- 検出は完全ではない。 AWSは確率的な検出と書き、Presidioは自動の検出なので、すべての機密を見つける保証はなく、追加の安全策を勧める、と書いています。見逃し(機密が通る)と、誤検知(問題ない文章が止まる)の両方が起きうる、と考えるのが無難です。
- 道具の呼び出しは別の経路。 AWSの文書は、モデルが道具に渡す引数や、道具が返す結果のPIIは評価しない、と明記しています。AIが外部のシステムを操作する構成では、入口のフィルタを通らない流れが残ります。
- ログと記録に元の文章が残る。 AWSの文書では、モデルの呼び出しログの入力は元のまま残り、診断用の出力の
matchにも元のPIIの値が入ります。マスクしても、ログに残ればそこから漏れる可能性があります。ログを守る別の対策が要ります。 - エンコードやファイルは見ない場合がある。 Model Armorは、エンコードされた内容は検査しません。Purviewは、直接アップロードしたファイルを検査しません。
- 会話全体では見ない場合がある。 Model Armorは1ターンずつ検査します。複数回に分けて少しずつ入れる流れは、1回ごとの検査では見えにくくなります(これは僕らの推測です)。
- 未対応の言語や形式。 Model Armorは、テキストか画像の片方だけを指定したときや、地域によって多言語検出が限られる場合に、検査が飛ばされた結果(EXECUTION_SKIPPEDやSkipped Detection)を返すことがあります。その結果を通すか止めるかは、アプリ側で決めることになる、というのは僕らの見立てです。
設計の考え方
ここからは僕らの見立てです。公式の資料から、設計の論点を整理しました。
- 置く場所は、AIとの間の1か所に。 アプリごとにフィルタを作ると、抜けが出ます。社内のAIの入口(ゲートウェイ)を1つにして、そこで入力と出力を検査する形が考えやすいです。AWSの
ApplyGuardrailのように、モデルと切り離して使える形は、この設計に合います。 - 止める・伏せる・記録するは、データの種類で変える。 認証情報やカード番号は遮断、氏名は置換、といった使い分けです。最初は検出のみで始めて、誤検知の量を見てから、遮断に上げる進め方もあります(Google、AWSともに検出のみを選べます)。
- 検査が失敗したときの扱いを決める。 検査が飛ばされたとき、通すか止めるかを、あらかじめ決めておきます。Model Armorは検査を飛ばした結果を返すことがあるので、その扱いを決めておく必要がある、と考えます(文書にこの助言そのものが書かれているわけではありません)。
- 記録には、元の文章を残さない。 何を検出したか(種類と回数)は記録し、検出した値そのものはログに残さない設計が望ましい、と考えます。公式の文書が、ログに元の値が残る点を注意していることと合います。
- 日本語と日本の識別子を、自分のデータで確かめる。 組み込みの一覧に日本固有の項目がなかったので、正規表現などで補い、日本語の文章でどこまで見つかるかを、自分たちの例文で測る必要があります。日本語での精度は、各社の文書に書かれていませんでした。
- フィルタ以外の対策と組み合わせる。 OWASPの一覧のとおり、アクセス制御と利用者への教育は別に必要です。入口で止められなかった機密が、どこまで届くかを小さくする設計です。
個人情報保護法の扱いは、別の記事で扱っています。この記事は、法律の解釈ではなく、技術の設計の話です。
気をつけること
- この記事は、実際に使って確かめた記録ではありません。内容は公式の文書の記載です。JSONの例は、AWSの文書の項目名をもとにこの記事で組んだもので、動作確認はしていません。
- 取得の仕組みはページを要約して返すため、細部を取りこぼしている可能性があります。AWSのストリーミング応答への対応は、読んだページに書かれておらず、確認できていません。「ない」とは断定できません。
- 検出の精度(見逃しと誤検知の割合)は、どの文書にも数字がなく、日本語の文章での性能も確認できていません。
- Microsoft Purviewは、Microsoft 365のCopilot向けの文書です。プレビューの機能が含まれ、ライセンスの条件はページに書かれていませんでした。状態は変わることがあります。
- Google Model Armorの具体的なクォータ(上限)は別のページで、読んでいません。
- Presidioは「コミュニティ主体のプロジェクトへ移行中」と書かれていました。ライセンスはページに書かれておらず、確認していません。使う前に公式のリポジトリで確かめてください。
- 製品名や機能名は変わることがあります。Googleの旧Cloud DLPは、現在はSensitive Data Protectionの一部です。
- 見立ての部分は、僕らの整理で、公式が勧める手順そのものではありません。
- 法律や契約の判断は、この記事の範囲外です。助言ではありませんので、専門家や社内の担当にご相談ください。
出典
- Sensitive information filters(Amazon Bedrock User Guide、AWS、10月16日確認)
- Use the ApplyGuardrail API(Amazon Bedrock User Guide、AWS、10月16日確認)
- Model Armor overview(Google Cloud、Google、10月16日確認)
- Sanitize prompts and responses(Model Armor、Google Cloud、Google、10月16日確認)
- Sensitive Data Protection overview(Google Cloud、Google、10月16日確認)
- Microsoft Purview DLP for Microsoft 365 Copilot(Microsoft Learn、Microsoft、10月16日確認)
- LLM02:2025 Sensitive Information Disclosure(OWASP GenAI Security Project、OWASP、10月16日確認)
- Presidio(Presidioプロジェクト、10月16日確認)
更新履歴
- 2026年10月25日 書き方を直しました。
- 前:運営者が使っていないと読める書き方 → いま:「この記事は、実際に使って確かめた記録ではありません」。公式の資料を読んでまとめた記事で、使い心地は書いていない、という意味に直した
