AIエージェントは本番運用へ向かっています。そして、その多くには下支えとなるセキュリティ層がありません。
過去8か月間、共同創業者のオロボサと私は、AIエージェントのためのランタイムセキュリティと行動監視であるVaultakを構築してきました。この記事では、私たちが何を作ったのか、なぜそれを作ったのか、そしてその道のりで行った技術的な判断について説明します。
**
私たちが何度も見続けた問題
**
パターンはいつも同じです。あるチームがAIエージェントを本番に投入します。エージェントはデータベースに書き込み、メールを送信し、外部APIを呼び出します。テストではうまくいきます。ところが本番では、エージェントが想定外のことをします。レコードが削除される。PIIが送られるべきでない場所に送信される。条件が一度も満たされないためにループが何百回も回る。
腹立たしいのは、こうしたことが起きること自体ではありません。被害が出る前にそれを捕まえるための層が用意されていなかったことです。
従来のアプリケーションセキュリティは、人間が行うことを前提に作られています。ファイアウォール、WAF、アクセス制御。これらはすべて、予測可能で構造化されたリクエストのために設計されています。AIエージェントはそれと違います。非決定的です。同じ入力でも、文脈、モデルの状態、利用可能なツールによって異なる行動をとり得ます。標準的なセキュリティツールは、このモデルを持っていません。
そのギャップを埋めるのがVaultakです。
Vaultakが実際に行うこと
Vaultakの中核は、行動のインターセプトとポリシー強制のための層です。これは、あなたのエージェントと、そのエージェントが制御するシステムの間に位置し、次の4つを行います:
エージェントが行うすべてのアクションをリアルタイムで監視
複数の次元で0〜10スケールの行動リスクをスコアリング
ポリシーを強制。許容範囲外の行動をブロックするか、承認を要求
リスク閾値が破られたとき、自動的にロールバックする
SDK連携はたった2行のコードです:
pythonfrom vaultak import Vaultak
vt = Vaultak(api_key="vtk_...")
with vt.monitor("my-agent"):
# あなたのエージェントコードここに
pass
monitorのコンテキスト内のすべてはラップされます。Vaultakはアクションをインターセプトし、スコアを付け、あなたのポリシーを適用し、その結果として許可するか、ブロックするか、ロールバックします。これらは本番システムに触れる前に行われます。
リスクスコアリングエンジン
ここが最も作るのが難しかった部分です。
素朴なアプローチは、ルールベースのシステムを作ることです。危険なアクションのブロックリスト。ですが、ルールベースは脆いです。エージェントは、単体ではまったく無害に見える行動で、大きな被害を引き起こし得ます。1つの行の削除は低リスクです。本番テーブル全体で、ループにより行削除を繰り返すのはそうではありません。
私たちは5次元のスコアリングモデルを構築しました:
- アクションタイプ これはどんなカテゴリのアクションですか?読み取り操作は低くスコアされます。書き込み操作は高くスコアされます。削除、drop、truncateの操作が最も高くスコアされます。私たちは、アクションタイプの分類と、そのベースとなるリスクスコアを維持しています。
- リソースの感度 何に対して作用しているのですか?ログテーブルに書き込むエージェントと、ユーザーの資格情報テーブルに書き込むエージェントでは違います。リソースは感度ティアで分類します。public、internal、sensitive、criticalです。
- ブラス トライム(影響範囲) このアクションがうまくいかなかった場合、どれだけの被害を与え得ますか?1行に影響するアクションは影響範囲が小さい。テーブルの全行に影響するアクションは影響範囲が大きい。私たちは、操作のスコープから影響範囲を推定します。
- 頻度 このアクションはどれくらいの頻度で行われますか?単発の書き込みは想定されます。10秒で100回の書き込みはシグナルです。私たちは、ローリング時間ウィンドウでアクションの頻度を追跡し、異常をスコアリングします。
- 文脈からの逸脱
このアクションは、このエージェントについて私たちが観測してきた行動パターンに合っていますか?これまで外部メールを送信したことがないエージェントが、突然送ろうとするなら、それはフラグすべき逸脱です。たとえメール送信が明示的にブロックされていなくても。
各次元はサブスコアを生成します。全体のリスクスコアは加重平均です。スコアが設定した閾値を超えると、Vaultakが介入します。
ポリシー強制
ポリシー層とは、チームが「エージェントに何を許可する/許可しないか」について意図を表明する場所です。
pythonvt = Vaultak(
api_key="vtk_...",
policy={
"block": ["delete", "drop_table", "send_external_email"],
"require_approval": ["write_production_db"],
"max_risk_score": 7.0
}
)
ポリシーモードは3つです:
ブロック;アクションは即座に停止され、エージェントはポリシー違反の応答を受け取ります
承認を要求;アクションは一時停止され、実行が継続する前に人間による承認リクエストが送られます
アラート;アクションは許可されますが、ログに記録され、ダッシュボード上で優先度の高いイベントとして表示されます
承認ワークフローは、セキュリティチームと話した後に追加したものです。彼らは単にエージェントをブロックしたいわけではありません。高リスクな操作ではループの外にいたくない一方で、あまりにも摩擦が大きくなってエージェントが使い物にならなくなることも避けたかったのです。一時停止して承認を求めるパターンが、その課題を解決しました。
自動ロールバック
ブロックは反応型です。ロールバックは復旧です。
エージェントが操作の途中でリスク閾値を超えた場合、Vaultakはそれを止めるだけではありません。すでに行われたことを元に戻そうとします。監視されたコンテキスト内のすべてのアクションは、完全な状態コンテキスト付きでログに記録されます。つまり、アクション前の状態、何が変わったのか、そしてそれを元に戻すために何が必要か、です。
この仕組みはアクションタイプによって難易度が異なります。データベースへの書き込みは、ロールバックが比較的簡単です。すでに送信済みのメールはそうではありません。私たちは、インターセプトの時点でアクションを可逆/不可逆に分類し、不可逆のアクションに対しては実行前により厳しい閾値を適用することで対処しています。
PIIマスキング
私たちが最もよく観測した失敗パターンの1つは、エージェントが出力を通じて機微データを漏らすことでした。PIIを外部APIへ送る、平文でログに記録する、あるいはLLMプロンプトに含めてしまうといったケースです。
私たちは、エージェントの入力と出力で動作するPIIマスキング層を構築しました:
pythonfrom vaultak import mask_pii
safe_output = mask_pii(agent_output)
SSN、メールアドレス、クレジットカード番号、電話番号、氏名は自動的にマスクされます
内部では、構造化されたPII(SSN、クレジットカード番号、電話番号)については正規表現パターンの組み合わせを使い、非構造化のPII(氏名、住所)については軽量なNERモデルを使います。マスキングは、データが監視されたコンテキストの外へ出る前に適用されます。
MCPゲートウェイスキャン
モデルコンテキストプロトコル(MCP)は、エージェントがツールに接続する方法の標準になりつつあります。MCPでは、エージェントは単一のインターフェースを通じて何百もの外部ツールを呼び出せます。これは強力である一方、重要な攻撃面にもなります。
私たちは、実行される前のすべてのツール呼び出しをインターセプトし、ポリシールールセットに照らしてチェックするMCPゲートウェイスキャナーを構築しました。ツール応答に埋め込まれたプロンプトインジェクションの試み、不正なツールへの呼び出し、異常なツール利用パターンは、すべてゲートウェイのレベルで検出されます。
Vaultak Sentry;ゼロコード統合
すべてのチームがエージェントコードに触れたくないわけではありません。特にセキュリティエンジニアは、すべての開発チームがSDK統合を終えるのを待つことなく、環境内で動いているものすべてを横断して可視化したいのです。
Sentryはデスクトップのデーモンで、システムレベルでエージェントのアクティビティを監視します。インストールして、Vaultakのダッシュボードに接続すれば、コードの変更なしで、このマシン上で動いているすべてのエージェントに対して完全な行動可視性が得られます。
動作は、システムレベルのネットワークとプロセスの活動をインターセプトし、既知のエージェント行動シグネチャと相関付けることで行います。その結果、エージェントコードの1行も触れずに、SDKから得られるのと同じリスクスコアリングとアラートが得られます。
vaultak.com/downloadからダウンロードできます。macOS、Windows、Linuxで利用可能です。
GitHub Action
最近リリースしたところ、好評だったもののひとつ:すべてのプルリクエストに対してエージェントのコードをセキュリティリスクの観点からスキャンするGitHub Actionです。
yaml- name: Vaultak Security Scan
uses: samueloladji-beep/vaultak-action@v1
with:
api_key: ${{ secrets.VAULTAK_API_KEY }}
このアクションは、エージェントのコードに対して静的解析を実行し、リスクの高いパターンを検出し、重大なセキュリティ問題を導入するマージをブロックします。PR段階で問題を見つけることは、本番で見つけるよりもはるかにコストがかかりません。
私たちが学んだこと
ビルド中にいくつか驚いたことがありました:
エントリーポイントはCTOではなくセキュリティエンジニアです。最初はトップダウンで売れると想定していました。しかし実際には、問題に最も近い開発者やセキュリティエンジニアがVaultakを見つけ、導入し、その後社内でそれを推奨します。この分野ではボトムアップの配布が機能します。
観測可能性(オブザーバビリティ)だけでは不十分です。多くのツールは「エージェントが何をしたか」は教えてくれます。しかし、「してはいけないことをしないように止める」ツールは多くありません。私たちが話をしているチームは、単なるログではなく、能動的な介入を求めています。
被害範囲(ブラストレイジ)の考え方がしっくりきます。私たちが「このエージェントが誤動作した場合に最悪どんなことをしうるか」という形で問題を説明し、その後に「被害範囲(ブラストレイジ)」の問いを投げると、エンジニアはなぜセキュリティレイヤーが必要なのかを即座に理解します。この切り口が、多くの議論を切り開いてくれました。
試してみてください
Vaultakは現在稼働しており、すぐに利用できます。
SDK: pip install vaultak
Sentry: vaultak.com/download
Docs: docs.vaultak.com
GitHub: github.com/samueloladji-beep/Vaultak
スタータープランは無料です。クレジットカードは不要です。
本番環境でAIエージェントをデプロイしていて、下にセキュリティレイヤーがない場合、Vaultakは評価するのに10分かける価値があります。これを間違えたときの被害範囲は大きいのです。
Samuel OladjiはVaultakのCEO兼共同創業者です。Orobosa EkhatorはCTO兼共同創業者です。




