エージェントとツールのセキュリティ確保
AIがアクションを取れる(ツールを呼び出す、コードを実行する、APIを叩く)ようになった瞬間から、AIはセキュリティモデルを引き継ぎます。目標は、モデルを騙されないものにすることではなく、たとえ騙されたとしても、大きな被害を与えられないようにすることです。
中核となる原則: 最小権限
エージェントには、その仕事に必要な最小限のアクセス権を与え、それ以上は与えないようにします。
- ドキュメント要約ツールには読み取りが必要であり、書き込みやネットワークは不要です。
- レビュアーにはコードを読みコメントを投稿する権限が必要であり、プッシュやデプロイは不要です。
- ツール、APIキー、ファイルアクセスをタスクごとに範囲を絞ります。狭く範囲を絞られたエージェントがインジェクションを受けても、与えられる被害は狭い範囲に留まります。
混乱した代理人問題(confused deputy)
エージェントはしばしばあなたの権限で(あなたのトークン、あなたのセッションで)動作します。攻撃者が制御する入力がそれを操ると、攻撃者はあなたの権限を借りることになります — これが「混乱した代理人」です。防御策: エージェントに不要なアンビエント権限を渡さず、機微なツールには明示的で範囲を絞った認証情報を要求します。
防御の層
- コード実行とファイルアクセスをサンドボックス化する — コンテナ、エフェメラルなディレクトリを使い、広範なシステムやシークレットへのアクセスを与えない。
- 危険な接触面を許可リスト化する: どのコマンド、どのドメイン、どのパスを許すか。それ以外は拒否します。(Claude Codeでは、これが権限にあたります。)
- 不可逆的または重大なアクションにはヒューマン・イン・ザ・ループを: 送金、メール、削除、デプロイ、本番設定の変更。
- 信頼ゾーンを分離する。 一つのエージェントが、シークレットを保持し、信頼できないコンテンツを読み取り、任意の外向き通信を行うことを同時にできないようにします。
- エージェントが実際にどのツールを呼び出したかをログに記録しレビューする。
ツールにはスキーマがある — それを検証する
モデルが生成するツール入力は、誤っていたり操作されていたりすることがあります。実行前に引数を検証し、エージェントが闇雲にリトライするのではなく回復できるよう、エラーを結果として返しましょう。