Skip to content

エアギャップ環境でアノテーションを行う方法

アノテーションツールにとって「オフライン」が何を意味しなければならないか、なぜスタイルシート内の @import が多くのエアギャップ監査をすり抜けるのか、そして外部への経路がないマシンにモデルを持ち込む方法。

「オフラインで動く」というアノテーションツールは、たいていアノテーションページが表示されるという意味です。それは配備全体が外向きのリクエストを出さないことと同じではなく、その差のところにプライバシーの問題が住んでいます。 セキュアな研究環境、臨床現場、政府ネットワークに配備するなら、確認すべきはここです。

ソースではなく、レンダリング後のページを監査する

信頼できる唯一の検査は実地の検査です。DevTools のネットワークパネルをサードパーティのリクエストで絞り込んだ状態でアノテーション画面を開き、数えてください。

テンプレートを読むだけでは足りません。そしてこれは仮定の区別ではありません。Potato 自身の styles.css は Google Fonts の @import で始まっており、過去三回のエアギャップ監査を生き延びていました。どの検査もテンプレート内の <script src><link href> を見ており、スタイルシート内部の @import はそのどちらでもなかったからです。

オフラインで壊れるだけでなく、これはページ読み込みのたびに全アノテーターの IP アドレスと User-Agent を第三者へ送っていました。しかも、データを自分たちのインフラから出さないためにこそ自前でホストしているツールから、です。

主要ページだけでなく全ページを確認する

ログイン、サインアップ、パスワードリセット、エラーページはもっとも監査されず、もっとも重要です。ログインページ上の第三者 favicon は、ユーザーが認証情報を入力するページから他社のサーバーへ飛ぶリクエストです。

Potato は現在 14 テンプレートすべてをローカルから配信します。実測での検証結果は 62 リクエスト、外部ゼロです。

何がローカルになければならないか

すべてのスタイルシート、スクリプト、フォント、アイコンです。Potato の場合は Fabric.js、jQuery、Bootstrap、Font Awesome、インターフェース書体、three.js、OpenSeadragon、d3、Peaks.js、PDF.js が該当します。

このうち二つは装飾ではなく必須です。jQuery がなければスパンアノテーションは動作せず、Fabric.js がなければ画像キャンバスが初期化されないため、描画ツールは表示されるのに何も描けません。表示はされるのに黙ってアノテーションできないエアギャップ配備は最悪の結果です。問題なく見えてしまうからです。

同梱ファイルを検証する

同梱ファイルはコミットされるため、検証されていないダウンロードはそのリリースの全ユーザーに届きます。各ファイルをその CDN が公開しているハッシュと照合し、一致しなければ拒否してください。

ガードの許可リストは空のままにし、エントリが何にも一致しなくなったらガードが失敗するようにしてください。そうしないと一時的な例外が黙って恒久化します。

モデルは別途の転送になる

アプリケーションがネットワークを必要としないことと、モデルがそこにあることは別です。

bash
# On a connected machine
potato download-models --list
potato download-models mobile_sam
potato download-models grounding_dino_tiny
 
# Then copy the model directory to the air-gapped machine

したがって正確な主張は「セットアップ不要でエアギャップ」ではなく、**「重みがマシン上にあればエアギャップ」**です。設定したホスト型 AI エンドポイントは当然ながら外部への経路を必要とし、この配備では無効にしておくべきです。

転送する前にライセンスを確認する

まだブラウザが使えるうちに済ませてください。download-models --list は非商用モデルに印を付け、download-models--accept-licence なしにそれを取得することを拒みます。隔離ネットワーク上でデータセットを構築した後にライセンス上の制約を発見するのは、非常に高くつく気づき方です。

参考文献