メインコンテンツまでスキップ

エージェントとツールのセキュリティ確保

上級
What you'll learn
  • 最小権限を適用する — エージェントには、その仕事に必要なアクセス権だけを与える
  • 混乱した代理人問題を認識する: エージェントがあなたの権限を借用する
  • エージェントが騙されたときに被害範囲を縮小する5つの防御層を積み重ねる
  • どのアクションに人間の関与が必要かを判断する
  • 不正または操作された引数が実行されないよう、ツールの入力を検証する

AIがアクションを取れる(ツールを呼び出す、コードを実行する、APIを叩く)ようになった瞬間から、AIはセキュリティモデルを引き継ぎます。目標は、モデルを騙されないものにすることではなく、たとえ騙されたとしても、大きな被害を与えられないようにすることです。

中核となる原則: 最小権限

エージェントには、その仕事に必要な最小限のアクセス権を与え、それ以上は与えないようにします。

  • ドキュメント要約ツールには読み取りが必要であり、書き込みやネットワークは不要です。
  • レビュアーにはコードを読みコメントを投稿する権限が必要であり、プッシュやデプロイは不要です。
  • ツール、APIキー、ファイルアクセスをタスクごとに範囲を絞ります。狭く範囲を絞られたエージェントがインジェクションを受けても、与えられる被害は狭い範囲に留まります。

混乱した代理人問題(confused deputy)

エージェントはしばしばあなたの権限で(あなたのトークン、あなたのセッションで)動作します。攻撃者が制御する入力がそれを操ると、攻撃者はあなたの権限を借りることになります — これが「混乱した代理人」です。防御策: エージェントに不要なアンビエント権限を渡さず、機微なツールには明示的で範囲を絞った認証情報を要求します。

防御の層

これらを積み重ねましょう — 単一の層だけでは不十分です。各層は、その上の層が失敗する可能性を前提としています。

Guided walkthrough1 of 5
  1. コードやファイル操作を、広範なシステムやシークレットにアクセスできないコンテナやエフェメラルなディレクトリ内で実行します。エージェントが騙されても、箱の中で遊ぶだけになります。

許可リストを文書化する

「危険な接触面を許可リスト化する」は、うなずくのは簡単で、飛ばすのも簡単です。Claude Codeではこれが具体的になります: タスクに必要な狭いコマンドとドメインの集合を許可し、それ以外は拒否する settings.json です。制限的な状態から始め、実際のタスクが行き詰まったときにのみ広げましょう。

最小権限の Claude Code 権限ブロック

{
"permissions": {
  "allow": [
    "Read",
    "Edit",
    "Bash(npm test:*)",
    "Bash(npm run build:*)",
    "Bash(git status)",
    "Bash(git diff:*)"
  ],
  "deny": [
    "Bash(git push:*)",
    "Bash(rm:*)",
    "Bash(curl:*)",
    "Read(./.env)",
    "Read(./secrets/**)"
  ]
}
}

deny リストは allow より優先されるため、.envsecrets/** のブロックは、広範な Read が付与されていても有効です。完全なルール構文と優先順位については権限を参照してください。

ツールにはスキーマがある — それを検証する

モデルが生成するツール入力は、誤っていたり操作されていたりすることがあります。実行前に引数を検証し、エージェントが闇雲にリトライするのではなく回復できるよう、エラーを結果として返しましょう。

中核用語を反復学習
Enter キーまたはスペースキーでカードを裏返します。左右の矢印キーでカードを移動できます。用語を表示しました。
1 / 5

理解度チェック

0/3
  1. 最小権限の原則は、エージェントを設定する際に何をするよう求めていますか?
  2. あなたのトークンで動作するエージェントが「混乱した代理人」のリスクとなるのはなぜですか?
  3. Claude Codeの権限ブロックにおいて、エージェントがシークレットファイルを読むのを確実に防ぐエントリはどれですか?
Key takeaways
  • まず最小権限を: ツール、キー、ファイルアクセスをタスクごとに範囲を絞り、騙されたエージェントが狭い範囲の被害しか与えられないようにする
  • エージェントはあなたの権限で動作する — 不要なアンビエント権限を渡してはいけない(混乱した代理人問題)
  • 5つの層を積み重ねる: サンドボックス、許可リスト、ヒューマン・イン・ザ・ループ、信頼ゾーンの分離、ログ記録とレビュー
  • Claude Codeでは、deny ルールが allow ルールに勝つ — .env とシークレットのパスを明示的にブロックする
  • 実行前にツールの引数を検証し、エラーを結果として返すことで、エージェントが闇雲にリトライするのではなく回復できるようにする

次のステップ