開発者向け
· 10分で読めます

セルフホスト型の個人情報黒塗りAPI:自社サーバーの外に出る通信

執筆:Amine Gaaliche · Claudeで下書きを作成し、内容は人が確認したうえで手作業で編集しています

文書を外部のクラウドに送らなくても、個人情報の検出と黒塗りは自動化できます。promptShieldのAPIは、デスクトップアプリと同じ検出エンジンを、自社のサーバーでREST APIとコマンドラインツールとして動かします。文書は自社のネットワークの中にとどまります。外に出るのは、6時間ごとに当社のサーバーへ送るライセンスの確認だけです。

クラウドのAPIに文書を送るということ

AWS、Google Cloud、Microsoft Azureは、いずれも個人情報を検出するAPIを提供しています。どれもよくできたサービスで、仕組みは共通です。文書を送ると事業者のサーバーで検出が行われ、結果が返ってきます。処理は自動で、量が増えても対応できます。

その代わり、文書は自社の管理の外に出ます。個人情報保護法第25条は、委託する場合には「委託を受けた者に対する必要かつ適切な監督を行わなければならない」と定めています。委託に伴ってデータを受け取る委託先は第三者には当たりませんが(第27条第5項第1号)、監督の責任は委託元に残ります。委託先が外国にある場合は、第28条の規定も確認する必要があります。

顧客の契約書や人事の書類を扱うなら、この整理と監督が、APIを呼び出すたびに関わってきます。処理の仕組みが一度動き出すと、呼び出しのたびに文書を外へ送っていることは忘れられがちです。大切なのは、検出が動く時点で文書を誰が持っているかです。

同じエンジンを、自社のサーバーで動かす

このAPIを当社が運用することはありません。動くのは、デスクトップアプリと同じ自社開発の検出エンジンで、パターン、固有名詞の検出、既定ではオフのAI詳細分析で構成されています。呼び出すのは、自社の環境の中にある自社のコードです。

提供はDockerイメージ(promptshield/promptshield-api)で、docker compose upで起動します。APIは自社のサーバーでRESTのエンドポイントとして待ち受け、同じイメージにCLIも含まれています。パッケージは、まだPyPIでは公開していません。公開中のイメージ(1.3.6、2026年10月11日公開)には、日本語の検出はまだ入っていません。

APIキーは、Proプランのアカウントで、promptShieldのダッシュボードから発行します。リクエストにはこのキーをAuthorizationヘッダーで付けます。キーなしで応答するのは/healthだけです。そのため/docsはブラウザーで直接開けず、APIのスキーマは/openapi.jsonから、ヘッダーを付けたcurlで取得します。

外に出る通信と、その間隔

外部への通信は1つだけです。コンテナーは起動時と、その後6時間ごとに、APIキーを当社のライセンスサーバーで確認します。この確認に文書の内容は含まれず、当社が文書の処理を受け持つこともありません。

ライセンスサーバーに接続できないときは、最後に確認した結果を使って動き続けます。ただしそれも最長3日間で、その後はAPIが止まります。ファイアウォールでこの通信を遮断することもできますが、その場合も3日後に止まります。

つまり、このAPIは当社のサーバーに依存していて、ネットワークから完全に切り離した環境で動かす形態はありません。情報セキュリティの担当部署が最初に確認することの多い点なので、導入の前にご確認ください。ネットワークから切り離して使えるのはProプランのデスクトップアプリで、ライセンスの確認もクラッシュレポートの送信も行わない、別の仕組みで動いています。

項目クラウドの検出APIpromptShieldのAPI
検出を行う場所事業者のサーバー自社のサーバー
ネットワークの外に出るもの処理したいすべての文書文書は出ない。6時間ごとのライセンス確認だけ
一連の文書でのコードサービスと設定によって異なる同じフォルダーの中では、同じ値に同じコード
返ってくるものサービスごとの検出結果や処理の結果確認できる検出結果と、コード化した出力
ネットワークに接続できないとき使えない最長3日間は動く

コードはフォルダーごとに決まる

同じフォルダーにまとめた文書では、同じ人物に同じコードが使われます。1件ずつ別々に送った文書はそれぞれ独立していて、同じ人物でも次の呼び出しでは別のコードになります。一連の文書でコードをそろえたい場合は、同じフォルダーにまとめてください。デコードも同じサーバーの中で行い、外部のサービスは使いません。

人による確認を省いてよい場面

当社は、影響の大きい文書では、ソフトウェアは候補を示し、判断は人が行うべきだと考えています。匿名化の失敗は目に見えないため、誰かが結果に責任を持つ必要があります。無人で動くAPIには、その人がいません。

判断の基準は二つです。1件の見落としがどれだけの損失になるかと、どこまで確実である必要があるかです。どちらも大きければ人が確認し、どちらも小さければ自動の処理で十分です。1,000万行のログを人に読ませるのは、時間の使い方として適切ではありません。

APIが向いているのは、テストデータから個人情報を除く作業、ログや問い合わせ記録の処理、大量の文書の一次的な仕分けです。APIは確認できる検出結果を返すので、取り消せない処理の前に人の承認を挟むこともできます。重要そうな文書をAPIで選び出し、デスクトップアプリで人が確認するという組み合わせも使えます。どの段階でも、文書は自社の中で処理されます。開発者向けツールのもう一つの側面は、スキャンした書類の黒塗りについての記事で取り上げています。

よくある質問

APIは文書をどこかへ送りますか?

送りません。検出は自社のサーバーで行い、外に出る通信は6時間ごとのライセンス確認だけです。この確認に文書の内容は含まれません。

ネットワークにまったく接続しないで使えますか?

使えるのは最長3日間です。ライセンスサーバーに接続できない間は最後の確認結果で動き続け、3日を過ぎると止まります。ネットワークから切り離して使えるのは、Proプランのデスクトップアプリです。

APIのドキュメントはブラウザーで開けますか?

/docsもAPIキーのヘッダーが必要なため、ブラウザーでは直接開けません。スキーマは、ヘッダーを付けたcurlで/openapi.jsonから取得します。

インストールはどうすればよいですか?

Dockerイメージを取得し、docker compose upで起動します。APIキーは環境変数で渡します。PyPIでは、まだパッケージを公開していません。

役に立った場合は、拍手でお知らせください。

共有