マルチエージェントAIセキュリティが壊れている理由(そして実際に機能するアイデンティティのパターン)

Dev.to / 2026/4/9

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisTools & Practical Usage

要点

  • この記事は、マルチエージェントAIのセキュリティ障害は、多くの場合モデルの能力不足ではなく、エージェント間における弱いアイデンティティ管理と権限取り扱いによって引き起こされると主張している。
  • よくある破綻パターンとして、複数のエージェントが同じAPIキー/トークン/MCPアクセスを共有してしまうことを挙げている。これにより、責任の所在(アトリビューション)、最小権限、監査可能性、失効、承認ワークフローが損なわれる。
  • 推奨される解決策は、各エージェントにそれぞれ固有の暗号学的アイデンティティを付与し、明示的な委任チェーンに結び付いた短寿命の委任アクセスを発行することだ。
  • GitHub/CI/クラウド/DB などの「ツール境界」でポリシーを強制し、すべてのアクションをエージェントのアイデンティティと委任の詳細とともに記録して、信頼性の高い事後インシデント調査(フォレンジック)を可能にすることを提案している。
  • チームは、大規模なプラットフォーム移行を待つのではなく、まずエージェントごとのアイデンティティ(例:Ed25519の利用)から段階的に改善を実装できると強調している。

先週の火曜日、ステージング環境で「無害」なコーディングエージェントがPRを開き、誤った環境からシークレットを取得し、触れてはいけないはずのデプロイを開始してしまいました。

私たちは何も「ハック」されませんでした。エージェントは、システムが許可しているとおりに動いただけです。

ここが、マルチエージェント構成で多くのチームが見落としがちな点だと思います。問題は通常、モデルの品質ではありません。問題はアイデンティティです。

エージェントが複数になると――プランナー、コーダー、レビュアー、デプロイヤー、サポートボット、など何であれ――非常に退屈な質問への答えが必要になります:

  • このエージェントは、正確には誰(何)ですか?
  • 何が許可されていますか?
  • 他の誰かの代わりに行動できますか?
  • 後で何が起きたかをどう証明しますか?

それに答えなければ、あなたの「AIフリート」は共有されたルートアカウントのような、雰囲気になってしまいます。

最初に壊れるパターン:共有クレデンシャル

多くのエージェントシステムは、今でもだいたいこんな見た目です:

Agent A ----\
Agent B -----+----> same API key / same GitHub token / same MCP access
Agent C ----/

これは次のいずれかが起きるまではうまく動きます:

  • どれか1つのエージェントがプロンプトインジェクションされる
  • どれか1つのワークフローで、より狭い権限が必要になる
  • 監査証跡(オーディットトレイル)が必要になる
  • リスクのある操作に対する承認が欲しくなる
  • どれか1つのエージェントだけを無効化したいが、すべてを壊したくない

共有クレデンシャルは便利ですが、アトリビューション(誰のせいか)と最小権限を破壊します。

実際に機能するアイデンティティのパターン

私たちが見てきた中で最も信頼できるパターンはこれです:

  1. 各エージェントに独自の暗号学的アイデンティティを付与する
  2. 短命の委任アクセス(デリゲートされた権限)を発行する
  3. ツールの境界でポリシーを強制する
  4. エージェントのアイデンティティ+委任チェーンとともに、すべての操作を記録する

実際には、だいたいこんな形になります:

[Human/User]
    |
    | delegates task
    v
[Planner Agent] -- short-lived token --> [Coder Agent]
    |                                        |
    | policy check                           | calls tool / MCP server
    v                                        v
[Approval / Policy Engine] -------------> [GitHub, CI, Cloud, DB]

Audit log = who delegated what to whom, for which action, when

これは「エージェントが何かをした」というのと、「リリースワークフローの代わりに行動するレビューエージェントは、10分間だけこのリポジトリを更新することだけが許可されていた」というのとの違いです。

まず実装するべきこと

これを改善するのに、巨大なプラットフォーム導入のロールアウトは不要です。

1) エージェントごとのアイデンティティ

すべてのエージェントプロセス、またはロールに対して、固有のアイデンティティを使ってください。理想的には、そのアイデンティティは設定中の単なる文字列ではなく、暗号学的なものです。

Ed25519キーは、速くて小さく、検証も簡単なので、この用途に適しています。

重要な理由:

  • 無効化(リボーク)が的を絞ってできる
  • 監査ログが役に立つようになる
  • ツールがネットワーク上の場所を信用するのではなく、呼び出し元を検証できる

2) クレデンシャル共有ではなく委任

エージェントAがエージェントBに作業をしてもらう必要がある場合、長寿命の秘密鍵を渡さないでください。委任された権利を表す、スコープ付きで短命のトークンを発行します。

ここでは OAuth のトークン交換/委任チェーンのパターンが堅実です。RFC 8693 のような標準をすでに使っているなら、それは素晴らしいです。そうでない場合でも、「デプロイトークンを単に使い回す」よりは、シンプルな社内の委任モデルのほうが良いです。

3) 境界(エッジ)でポリシーを適用

あなたのツールは、すべての「社内」呼び出し元を同じようには信用すべきではありません。

MCP サーバ、ゲートウェイ、またはエッジプロキシでポリシーチェックを置きます:

  • このエージェントは課題(イシュー)を読み取れる
  • あのエージェントは PR を開ける
  • 承認されたエージェントだけがデプロイをトリガーできる
  • 本番操作は人間の承認が必要

OPA がスタックに合うなら、OPA を使ってください。真面目な話、これのためにポリシーエンジンを作り直す必要はありません。

4) 破壊的操作のための承認ワークフロー

deletedeployrotatepublish、およびchargeを特別扱いにしてください。

エージェントはスピードを出すのが得意です。だからこそ、リスクのある操作には明示的な承認ゲートが必要です。

小さく動かせる例:エージェントのアイデンティティを生成する

ここでは Ed25519 を使った最小の Node 例を示します:

npm install tweetnacl tweetnacl-util
node agent-id.js
// agent-id.js
const nacl = require("tweetnacl");
const util = require("tweetnacl-util");

const keypair = nacl.sign.keyPair();

const publicKey = util.encodeBase64(keypair.publicKey);
const secretKey = util.encodeBase64(keypair.secretKey);

console.log("Agent public key:", publicKey);
console.log("Store secret key securely:", secretKey.slice(0, 24) + "...");

これは完全なアイデンティティシステムではありませんが、正しい方向性です。すべてのエージェントが独自のキーペアを持ち、下流のシステムが呼び出し元が誰かを検証できるようにします。

よくある間違い:モデルを守ることに集中して、ワークフローを守らない

チームはモデルのガードレールに多くの時間を費やしすぎ、実行境界(execution boundaries)への対策が十分ではないことがよくあります。

しかしマルチエージェントシステムでは、被害範囲(ブラスト半径)は通常、エージェントが何を言えるかではなく、何をできるかから生まれます。

セキュアなフリートは、ほとんどが退屈なインフラでできています:

  • アイデンティティ
  • スコープ付きトークン
  • ポリシーチェック
  • 承認
  • 監査ログ
  • 信頼できない実行のための分離(アイソレーション)

これは、コーディングエージェントをオーケストレーションしていようが、サポートエージェントであろうが、バックグラウンドタスクランナーであろうが、同じです。

自分で試してみる

まず何かを購入することなく、エージェントのセキュリティを強化したいなら:

最終的に残りを自分で構築することになったとしても、これらは役立つ出発点です。

大きな転換はシンプルです。エージェントを「機能」として考えるのをやめ、アイデンティティを持つワークロードとして扱い始めましょう。

そのとき、マルチエージェントシステムは謎ではなく統制可能になります。

あなたのスタックでは、現在どのようにエージェントのアイデンティティを扱っていますか? 下にあなたのアプローチを投稿してください。

-- Authora team

この記事はAIの支援を受けて作成されました。