COLUMN — 保守・運用

会議に出るAIの設定で、最初に書いたのは禁止する側のリストでした

オンラインの打ち合わせに音声で参加して、社内の資料や業務データベースを調べ、声で答えるAIを作っています。最初に手を入れたのは、答えさせる中身ではありません。設定ファイルを開いて、使わせないツールの名前を並べるところから始めました。並べ終えたあとで、そこに抜けがあることに気づいています。

#保守・運用 約4分で読めます

設定ファイルを開いて、拒否リストに並べた名前を数えていました。

オンラインの打ち合わせに音声で参加するAIを、社内向けに作っています。会議中に名前を呼ぶと、こちらの資料や業務データベースを調べて、声で返してくる。そういうものです。

答えの精度より先に決めることがありました。何を触らせないか、です。

最初に禁止したのは、書き換えるためのツールでした。危ないのは書き込みだと思っていたからです

拒否リストの先頭に置いたのは、ファイルを書き込むもの、既存の行を編集するもの、ノートブックを書き換えるものです。

続けて、別のAIを起動するもの、外へ通知を送るもの、予約実行を仕込むものを並べました。使えるのは読むためのものだけ。ファイルを開く、中を検索する、名前で探す。この3つに絞りました。

許可したツールの名前は、設定に1行で書いてあります。起動したときにその行に無い名前が現れたら、壁が破れたとみなして黙る。そういう作りにしました。

ここまで書いて、いったん安心しています。

読み取りだけに絞っても、外へ出す道は残ります

残していた読み取り用のツールの中に、任意のURLを取りに来るものがありました。

ページを取ってきて中身を読む。動作としては読み取りです。書き込みは一切しません。ただし、取りに行く先はこちら側で自由に組み立てられます。調べた内容をURLの後ろにつなげて外部へ投げれば、それは読み取りのまま、社内の文字列が外に出たことになります。

読み取り専用は、安全の言い換えではありませんでした。

そのツールは許可しませんでした。設定ファイルのその行に、任意のURLを取れてしまうから入れない、と理由を書いて残してあります。ネット検索のほうは別で、こちらは行き先が検索エンジンに固定されるので解禁しました。

線を引く場所は、触れる範囲ではなく出口でした

それまで私は、権限を「何を読めるか」で設計していました。読める範囲を狭めるほど安全になる、という考え方です。

これが違いました。読める範囲をどれだけ狭めても、外へ出る口がひとつ開いていれば、そこから同じだけ出ていきます。逆に出口を全部塞いでしまえば、読める範囲は広いままでかまわない。

権限の設計は、入口ではなく出口の側で組み直しました。

データベースへの問い合わせは、文頭を見るだけでは足りませんでした。語のほうも見ています

業務のデータベースには、その場で問い合わせを投げて答えます。最初に書いた検査は、文の先頭がSELECT・SHOW・DESCRIBE・EXPLAINのいずれかで始まるものだけを通す、というものでした。

読み取りの構文だから安全、という判断はどこまで通用するのか?

通用しませんでした。SELECTで始まる文の中には、結果をサーバー上のファイルへ書き出す構文が書けます。サーバーのファイルを読み込んで返す関数もあります。時間のかかる処理を差し込んで、応答を止めることもできます。文頭だけを見る検査は、そのどれも止めません。

そこで語の側の拒否リストを足しました。ファイルへの書き出し、読み込みの関数、追加・更新・削除、権限の変更。あわせて、セミコロンで文を継ぎ足せないようにし、ダブルクォートも通さないことにしています。パスワードやトークンといった語を含む問い合わせも、その時点で弾きます。

接続情報は、答える側に持たせていません

AIが動いている側には、データベースの接続先もパスワードも置いていません。持っているのは合言葉だけです。

実際の接続は、こちらのパソコンで動いている別のプロセスが握っています。AIができるのは、そのプロセスに問い合わせを渡して結果を受け取ることだけ。検査もそちら側で行うので、AI側の設定を書き換えても検査は外れません。

ソースも、書き込みできない状態で見せています。

冒頭の拒否リストは、あれから1行だけ増えました。ネット検索を許可した行です。

直していないものが2つ残っています。ひとつは、会議中に固有名詞を聞き違えること。読み間違えた語を書き留めて直す表は用意しましたが、中身はまだ空のままです。実際の会話で崩れた語を見てから足すことにしていて、まだ十分な数が集まっていません。

もうひとつは、接続を握っている側のプロセスが、パソコンを再起動すると消えることです。決まった手順で起動すれば立ち上がりますが、手順を外れると認証が切れて、会議の途中で答えられなくなります。起動の入口をひとつに絞って回避しているだけで、消えること自体はそのままです。

社内のデータをAIに見せるときの権限の切り分けについては、お問い合わせでご相談いただけます。

FAQよくある質問

Q読み取り専用にしておけば、社内のデータをAIに見せても安全ですか。
A読み取りに絞るだけでは足りませんでした。任意のURLを取りに行けるツールが1つ残っていると、読んだ内容をURLに乗せて外へ出せます。動作としては読み取りのままです。私は、読める範囲を狭める設計から、外へ出る口を塞ぐ設計へ切り替えました。
Qデータベースへの問い合わせは、SELECTだけ通せば大丈夫ですか。
A文頭を見るだけでは足りません。SELECTで始まる文の中に、結果をサーバー上のファイルへ書き出す構文が書けます。サーバーのファイルを読んで返す関数もあります。私のところでは、文頭の検査に加えて語の拒否リストを持たせ、複数の文を継ぎ足せないようにしています。
Q接続情報はどこに置いていますか。
AAIが動いている側には置いていません。持たせているのは合言葉だけです。実際の接続は別のプロセスが握っていて、検査もそちらで行います。AI側の設定を書き換えても検査は外れない、という置き方にしています。

「うちの場合は?」に、お答えします。

見積もりは何度でも無料。
他社との比較用でも歓迎です。
しつこい営業はしません。

無料で見積もりを頼む

お返事について

1営業日以内に、
メールでお返事します。

受付 10:00〜18:00