承認と権限の管理
Visual Studio Codeのエージェントは、タスクを完了するためにツールやターミナルコマンドを実行できます。ユーザーが制御を維持できるように、VS Codeでは、ファイルを変更する、コマンドを実行する、または外部リソースにアクセスするアクションをエージェントが実行する前に、承認を求めます。
この記事では、エージェントの権限レベルの設定、ツールとURLの承認の管理、ターミナルコマンドの自動承認、およびエージェントコマンドのサンドボックス化について説明します。チャットでのツールの使用に関する情報については、チャットでのツールの使用を参照してください。これらのコントロールが存在する背景については、信頼と安全性を参照してください。
VS Codeには、エージェントが実行できることを管理するためのいくつかのコントロールが用意されています。権限レベルはセッションの高レベルな調整ダイヤルであり、その他のメカニズムにより、特定のアクションに対するきめ細かい制御が可能になります。
| メカニズム | 制御内容 | 主な設定 |
|---|---|---|
| 権限レベル | セッション全体のエージェントの自律性 | chat.permissions.default |
| ツールの承認 | 個別のツールを実行できるタイミング | chat.tools.eligibleForAutoApproval この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 |
| URLの承認 | 特定のURLやドメインへのアクセス | chat.tools.urls.autoApprove |
| ターミナルコマンドの承認 | 自動的に実行されるターミナルコマンド | chat.tools.terminal.autoApprove |
| サンドボックス化 | エージェントコマンドのファイルシステムおよびネットワークアクセス | chat.agent.sandbox.enabled この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 |
権限レベル
権限レベルは、セッション中にエージェントがどの程度の自律性を持つかを決定する高レベルの制御です。これらは、この記事の残りの部分で説明する、ツール承認、URL承認、ターミナルコマンドの自動承認などのきめ細かい承認設定の上に位置します。
チャット入力エリアの権限ドロップダウンから権限レベルを選択して、ツール呼び出しと承認の処理方法を決定します。
権限レベルは現在のチャットセッションに適用され、いつでも変更できます。新しいセッションはデフォルトの権限レベルで開始されます。これは chat.permissions.default 設定で構成できます。
支援付き権限(Assisted permissions)は実験的機能であり、エージェントホスト上で実行されるエージェントでのみ使用できます。権限ピッカーにこのオプションを表示するには、 chat.assistedPermissions.enabled を有効にします。
| 権限レベル | 説明 |
|---|---|
| デフォルトの承認(Default Approvals)(デフォルト) | 構成された承認設定を使用します。承認が必要なツールは、実行前に確認ダイアログを表示します。不明な点がある場合、エージェントは確認の質問をします。 |
| 支援付き権限(Assisted permissions)(実験的) | LLMジャッジを使用して、各ツール呼び出しのリスクを評価します。ジャッジが承認した呼び出しは自動的に実行されます。その他の呼び出しでは、確認のためのダイアログが表示されます。 |
| 承認をバイパス | 確認ダイアログを表示せずに、すべてのツール呼び出しを自動承認します。不明な点がある場合、エージェントは確認の質問をします。 |
| オートパイロット(Autopilot) | 確認ダイアログを表示せずに、すべてのツール呼び出しを自動承認します。質問が生じた場合、エージェントは確認の質問に自動的に応答します。 |
権限レベルによって、よりきめ細かい設定が適用されるかどうかが決まります。デフォルトの承認は、次のセクションで構成するツールごと、URL、ターミナル、およびサンドボックスの設定を尊重します。支援付き権限は、個別の承認判断をLLMジャッジに委任します。承認のバイパス(Bypass Approvals)とオートパイロットはそれらの設定を上書きし、すべてを自動的に承認します。
支援付き権限レベルにより承認の中断は減りますが、ユーザーの判断に代わるものではありません。モデルベースのリスク評価には間違いが含まれる可能性があります。このレベルを初めて選択すると、確認を求める警告ダイアログが表示されます。エージェントのサンドボックス化を使用してファイルシステムとネットワークのアクセスを制限し、引き続き承認が必要なツール呼び出しを確認してください。
承認のバイパス(Bypass Approvals)とオートパイロットは、ファイルの編集、ターミナルコマンド、外部ツールの呼び出しなどの潜在的に破壊的なアクションを含め、手動の承認プロンプトをバイパスします。いずれかのレベルを初めて有効にすると、確認を求める警告ダイアログが表示されます。セキュリティ上の影響を理解している場合にのみ、これらのレベルを使用してください。詳細については、セキュリティに関する考慮事項を参照してください。
オートパイロットの仕組み
オートパイロットの権限レベルを選択すると、エージェントは標準のエージェントセッションとは異なる動作をします
- 継続的な反復:エージェントは、タスクが完了したと判断するまで自律的に作業を続けます。
- すべてのツールの自動承認:承認のバイパスレベルと同様に、すべてのツール呼び出しが自動的に承認されます。
- エラー時の自動リトライ:エラーが発生した場合、エージェントは自動的にリトライします。
- 質問への自動応答:明確化のための質問など、通常はブロックして入力を求めるツールが自動応答するため、エージェントが返信を待って停止することがありません。この動作はオートパイロット特有のものであり、承認のバイパスには適用されません。
オートパイロットでは、エージェントはタスクが完了したと見なすまで反復を続けます。高度なオートパイロット(プレビュー)を有効にすると、この判断を別のモデルに委任できます。各オートパイロットのターン後、小さく高速なモデルが、元のリクエストが完了しているかどうかを評価します。完了していない場合、オートパイロットは作業を続け、その評価を次のターンのガイダンスとして使用します。
高度なオートパイロット(プレビュー)機能を使用するには、 chat.autopilot.advanced.enabled を true に設定します。
オートパイロットは、インタラクティブな方法でチャットを使用するのと同様にAIクレジットを消費します。従量制課金の詳細については、こちらをご覧ください。
ツールの承認
一部のツールは、実行する前に承認が必要です。これは、ツールがファイルを変更したり環境を変更したりする可能性があるため、セキュリティ対策として行われます。さらに、ツールが返すデータには、エージェントを操作しようとするプロンプトインジェクションの試みが含まれている可能性があります。
ツールに承認が必要な場合、ツール名とその入力パラメータを示す確認ダイアログが表示されます。この情報を注意深く確認し、承認のスコープ(1回のみ、現在のセッション、現在のワークスペース、または今後のすべての呼び出し)を選択します。

ワークスペース内の .env ファイルや設定ファイルなどの一部のファイルには、シークレットや機密性の高い設定が含まれている場合があります。機密ファイルの編集に対して明示的な承認を要求する方法については、こちらをご覧ください。
特にファイルを変更する、コマンドを実行する、または外部サービスにアクセスするツールについては、承認する前に必ずツールパラメータを注意深く確認してください。VS CodeでのAIの使用に関するセキュリティに関する考慮事項を参照してください。
ツールの承認の管理
コマンドパレット(⇧⌘P (Windows, Linux Ctrl+Shift+P))から Chat: Manage Tool Approval コマンドを使用して、ツールの承認を一元的に確認および構成します。クイックピックには、MCPサーバーや拡張機能などのソースごとにグループ化されたすべてのツールが表示されます。
各ツールについて、2種類の承認を構成できます。
- 事前承認(Pre-approval)(「承認なし」):ツールが実行される前の確認ダイアログをスキップします。
- 事後承認(Post-approval)(「結果を確認しない」):ツールの出力がチャットコンテキストに追加される前に、その出力の確認をスキップします。これは、コンテンツにプロンプトインジェクションの試みが含まれている可能性がある、外部データを返すツールに関連しています。
ソースを展開して個々のツールの承認を構成するか、トップレベルのチェックボックスを選択して、特定のMCPサーバーまたは拡張機能からのすべてのツールを一括して信頼します。
ツールが自動承認されるのを防ぐ
ツールが承認を求めたときに、今後のすべての呼び出しに対して承認することを選択できます。これにより、以降は自動承認されます。機密性の高いツールの場合、誤って自動承認されないように、そのオプションを削除して常に手動承認を必要とするようにしたい場合があります。
chat.tools.eligibleForAutoApproval この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 設定を使用して、自動承認の対象となるツールを制御します。ツールを false に設定すると、常に手動承認が必要になります。
組織では、デバイス管理ポリシーを使用して、特定のツールに対して手動承認を強制することもできます。詳細については、エンタープライズドキュメントをご覧ください。
ツール確認のリセット
保存されたすべてのツール承認をクリアするには、コマンドパレット(⇧⌘P (Windows, Linux Ctrl+Shift+P))で Chat: Reset Tool Confirmations コマンドを使用します。
すべてをクリアするのではなく、個々のツールの承認を確認して選択的に変更するには、Chat: Manage Tool Approval コマンドを使用します。
URLの承認
ツールがURLにアクセスしようとしたとき(例:#web/fetch ツール)、VS Codeは悪意のあるコンテンツや予期しないコンテンツから保護するために、2段階の承認プロセスを使用します。各ステップでは、確認のためにチャットビューに確認ダイアログが表示されます。
-
事前承認:URLへのリクエストを承認する
このステップでは、接続先のドメインを信頼していることを確認し、信頼されていないサイトに機密データが送信されるのを防ぎます。

リクエストを1回だけ承認するか、特定のURLまたはドメインへの今後のリクエストを自動承認することができます。リクエストを承認してもレスポンスが承認されるわけではありません。取得したコンテンツは次のステップで引き続き確認します。リクエストとレスポンスの両方の承認を同時に構成するには、Allow requests to を選択します。
注意事前承認は「信頼されたドメイン」機能を尊重します。ドメインがそこにリストされている場合、そのドメインへのリクエストは自動的に承認され、レスポンスの確認ステップは延期されます。
-
事後承認:URLから取得したレスポンスコンテンツを承認する
このステップでは、取得したコンテンツがチャットに追加されたり他のツールに渡されたりする前に確認することができ、プロンプトインジェクション攻撃を防ぐのに役立ちます。
たとえば、GitHub.comなどのよく知られたサイトからコンテンツを取得するリクエストを承認する場合があります。ただし、課題の説明やコメントなどのコンテンツはユーザー生成であるため、エージェントを操作する有害なコンテンツが含まれている可能性があります。
レスポンスを1回だけ承認するか、特定のURLまたはドメインからの今後のレスポンスを自動承認することができます。
重要事後承認ステップは「信頼されたドメイン」機能にはリンクされておらず、常にユーザーの確認が必要です。これは、信頼できるドメイン上の信頼されていないコンテンツに関する問題を防ぐためのセキュリティ対策です。
chat.tools.urls.autoApprove 設定には、自動承認するURLパターンが保存されます。値には、リクエストとレスポンスの両方の自動承認を有効または無効にするブール値、あるいはきめ細かい制御のための approveRequest および approveResponse プロパティを持つオブジェクトを指定できます。正確なURL、グロブパターン、またはワイルドカードを使用できます。
URLの自動承認の例
{
"chat.tools.urls.autoApprove": {
"https://www.example.com": false,
"https://*.contoso.com/*": true,
"https://example.com/api/*": {
"approveRequest": true,
"approveResponse": false
}
}
ターミナルコマンドの自動承認
エージェントは単一のターミナルツールを使用してターミナルコマンドを実行しますが、そのツールは任意のコマンドを実行できます。ターミナルツールを一度に承認すると範囲が広すぎるため、ターミナルコマンドはツールごとではなくコマンドごとに承認されます。
デフォルトで、VS Codeはすでに一連の安全なコマンドを自動承認し、常に手動承認が必要な rm や del などのリスクの高いコマンドをブロックしています。 chat.tools.terminal.autoApprove 設定を使用して、これらのデフォルトを独自の許可および拒否リストで拡張または上書きします。
- コマンドを
trueに設定して自動承認する - コマンドを
falseに設定して常に承認を要求する - パターンを
/文字で囲んで正規表現を使用する
例えば
{
// Allow the `mkdir` command
"mkdir": true,
// Allow `git status` and commands starting with `git show`
"/^git (status|show\\b.*)$/": true,
// Block the `del` command
"del": false,
// Block any command containing "dangerous"
"/dangerous/": false
}
デフォルトでは、パターンは個々のサブコマンドに対して照合されます。コマンドが自動承認されるには、すべてのサブコマンドが true エントリに一致し、false エントリに一致しない必要があります。
高度なシナリオでは、個々のサブコマンドではなく完全なコマンドラインに対して照合するために、matchCommandLine プロパティを持つオブジェクト構文を使用します。
関連する設定
- chat.tools.terminal.enableAutoApprove この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。:ターミナルコマンドの自動承認を完全にオフにし、すべてのコマンドに手動承認を要求する
- chat.tools.terminal.blockDetectedFileWrites (実験的):
outsideWorkspace(デフォルト)に設定されている場合、ワークスペース外にファイルを書き込むターミナルコマンドに承認を要求します。セッションレベルのコマンド承認がアクティブな場合、OSの一時フォルダー(macOSおよびLinuxでは/tmp、Windowsでは%TEMP%)への書き込みは免除されます。 - chat.tools.terminal.ignoreDefaultAutoApproveRules (実験的):組み込みのデフォルトの許可および拒否ルールを無視し、 chat.tools.terminal.autoApprove で定義したルールのみが適用されるようにします。
ターミナルコマンドを自動承認すると、ベストエフォートの保護が提供され、エージェントが悪意を持って行動していないことが前提となります。一部のコマンドがすり抜ける可能性があるため、ターミナルの自動承認を有効にする場合は、プロンプトインジェクションから身を守ることが重要です。検出が機能しなくなる例をいくつか示します。
- VS CodeはPowerShellおよびbashのtree-sitter文法を使用してサブコマンドを抽出するため、これらの文法で検出されない場合、パターンは検出されません。
- VS Codeにはzshやfishの文法がないためbash文法を使用しており、一部のサブコマンドが検出されません。
- ファイル書き込みの検出は現在最小限であるため、ファイル編集エージェントツールでは不可能なファイルをターミナルから書き込むことができる可能性があります。
- クォーテーションの連結などのさまざまな手法により、自動承認を回避することが可能です。たとえば、
find -execは通常ブロックされますが、同じことを行うにもかかわらずfind -e"x"ecはブロックされません。
プロンプトインジェクションの可能性がある場合や、高リスク環境にいる場合は、エージェントのサンドボックス化を有効にするか、コンテナ内でVS Codeを実行することを検討してください。
エージェントコマンドのサンドボックス化
エージェントのサンドボックス化は現在プレビュー段階であり、今後さらに進化する可能性があります。
サンドボックスの仕組み、保護対象、およびOSレベルの実装の詳細については、エージェントのサンドボックス化を参照してください。
エージェントのサンドボックス化は、VS Codeエージェントターミナル統合を使用するCopilot CLIエージェントホストセッションを含め、エージェントによって実行されるコマンドのファイルシステムおよびネットワークアクセスを制限します。サンドボックス化が有効な場合、サンドボックス内で実行されるターミナルコマンドは制御された環境で実行されるため、ユーザーの確認を必要とせずに自動承認されます。
エージェントターミナルのサンドボックス化は、WSL2環境を含め、macOSおよびLinuxで使用できます。
サンドボックスの有効化と無制限のネットワークアクセスは個別に構成されます
-
サンドボックスの有効化は、エージェントのターミナルコマンドがサンドボックス内で実行されるかどうかを制御します。macOSおよびLinuxでは、次の値を受け入れる chat.agent.sandbox.enabled この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 を使用します。
値 説明 off(デフォルト)サンドボックス化が無効になっています。 onファイルシステムとネットワークの分離によりサンドボックス化が有効になります。ドメインが明示的に許可されていない限り、すべての送信ネットワークアクセスがブロックされます。 権限ピッカーの Sandboxing for terminal チェックボックスは、そのチェック状態をこれらの値にマッピングし、設定を更新します。
-
無制限のネットワークアクセスは、サンドボックス化されたコマンドが任意のネットワークドメインに到達できるかどうかを制御します。ファイルシステムの制限を有効にしたまま、すべての送信ネットワークトラフィックを許可するには、 chat.agent.sandbox.allowNetwork この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 を
trueに設定します。この設定は、サンドボックス化が有効な場合にのみ適用され、デフォルトはfalseです。
ファイルシステムアクセスが制限されている場合、エージェントコマンドには次のルールが適用されます
- コマンドには、ワークスペースフォルダー、サンドボックスランタイム一時フォルダー、およびVS Codeが自動的に追加するコマンドごとのパス(例:
git、node、npm、dotnetで必要なパス)に対する読み取りアクセス権があります。ホームディレクトリ($HOME)からの読み取りはデフォルトで拒否されます。 - コマンドには、現在の作業ディレクトリとそのサブディレクトリに対する書き込みアクセス権のみがあります
- コマンドはユーザー確認プロンプトなしで実行されます
ネットワークアクセスが制限されている場合、エージェントコマンドには次のルールが適用されます
- ドメインが明示的に許可されていない限り、すべての送信ネットワークアクセスがブロックされます。
- chat.agent.allowedNetworkDomains この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 および chat.agent.deniedNetworkDomains この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 を使用して、ドメインレベルの例外を構成できます。拒否されたドメインは、許可されたドメインよりも優先されます。
- chat.agent.sandbox.allowNetwork この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 が有効な場合、すべての送信ネットワークトラフィックが許可され、ドメイン設定は無視されます。
サンドボックス化に必要なOS依存関係がインストールされていない場合、VS Codeに必要なコンポーネントのインストールが提案されます。インストールしないことを選択した場合、サンドボックス化は有効になりません。
昇格する前にサンドボックスでコマンドを試す
デフォルトでは、サンドボックス化されたコマンドが失敗した場合やサンドボックスの制限によってブロックされる場合、エージェントはサンドボックス外でコマンドを実行するための確認を求めます。この動作は、サンドボックス化が有効な場合にのみ適用される chat.agent.sandbox.allowUnsandboxedCommands この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 設定によって制御されます。
エージェントは最初にサンドボックス内でコマンドを試行し、サンドボックス内での試行が失敗した場合にのみサンドボックス外で実行するための確認を表示するため、サンドボックス内で成功するコマンドに対する昇格プロンプトを回避できます。この設定を無効にすると、サンドボックスによってブロックされたコマンドは昇格の対象になりません。
ファイルシステムアクセスの構成
プラットフォーム固有のファイルシステムサンドボックス設定を使用してファイルシステムアクセスを制御します(macOSでは chat.agent.sandbox.fileSystem.mac 、LinuxおよびWSL2では chat.agent.sandbox.fileSystem.linux )。
読み取りおよび書き込みアクセスの許可ルールと、読み取りおよび書き込みアクセスの両方の拒否ルールを指定できます。これらのルールはグロブパターンをサポートしていません。denyWrite および denyRead ルールは、allowWrite および allowRead ルールよりも優先されます。
ワークスペースフォルダー、サンドボックスランタイム一時フォルダー、およびコマンドごとの読み取りパスは自動的に許可されるため、通常はワークスペース外のツール設定やデータへのアクセスを許可するために allowRead のみが必要になります。
{
"chat.agent.sandbox.fileSystem.mac": {
// Allow writes to the working directory
"allowWrite": ["."],
// Allow reads from an additional path outside the workspace
"allowRead": ["/Users/me/.config/myapp"],
// Block writes to specific subdirectories
"denyWrite": ["./secrets/"],
// Block reads from specific paths
"denyRead": ["/etc/passwd"]
}
}
ネットワークアクセスの構成
chat.agent.networkFilter この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 設定を有効にすることで、エージェントツール(フェッチツール、統合ブラウザー)がアクセスできるドメインを制限できます。有効にすると、ネットワークアクセスは chat.agent.allowedNetworkDomains この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 および chat.agent.deniedNetworkDomains この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 設定によって制御されます。両方のリストが空の場合、すべてのドメインがブロックされます。
サンドボックス化が有効で chat.agent.sandbox.allowNetwork この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 がオフの場合、これらのネットワークルールはエージェントによって実行されるターミナルコマンドにも適用されます。 chat.agent.sandbox.allowNetwork この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 がオンの場合、ファイルシステムの制限が有効なまま、サンドボックス化されたターミナルコマンドは任意のドメインに到達できます。
拒否されたドメインは常に許可されたドメインよりも優先されます。どちらの設定も *.example.com のようなワイルドカードをサポートしています。
サンドボックス化されたコマンドがネットワーク制限によってブロックされ、 chat.agent.sandbox.retryWithAllowNetworkRequests が有効(デフォルト)である場合、エージェントは無制限のネットワークアクセスでサンドボックス内でコマンドを再試行するための確認を求めます。ファイルシステムの制限は、再試行されたコマンドにも引き続き適用されます。この設定を無効にすると、エージェントは代わりに chat.agent.sandbox.allowUnsandboxedCommands この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 によって制御される、サンドボックス外でコマンドを実行するための確認にフォールバックします。
{
"chat.agent.networkFilter": true,
"chat.agent.allowedNetworkDomains": [
"api.github.com"
],
"chat.agent.deniedNetworkDomains": [
"example.com"
]
}
よくある質問
すべてのツールとターミナルコマンドを自動承認できますか?
ツール呼び出しを自動承認するには、いくつかのオプションがあります
- 権限レベル:現在のセッションのすべてのツールを自動承認するには、権限ピッカーから Bypass Approvals または Autopilot の権限レベルを選択します。
- グローバル設定:すべてのワークスペースですべてのツールを自動承認するには、 chat.tools.global.autoApprove この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 設定を有効にします。また、チャットから直接
/yoloまたは/autoApproveスラッシュコマンドを使用して有効にしたり、/disableYoloまたは/disableAutoApproveを使用して無効にしたりすることもできます。グローバル自動承認を初めて有効にすると、確認を求める警告ダイアログが表示されます。
どちらの方法も、潜在的に破壊的なアクションを含め、手動の承認プロンプトを無効にします。これらは重要なセキュリティ保護を削除し、攻撃者がマシンを侵害しやすくします。影響を理解している場合にのみ、これらのオプションを使用してください。詳細については、セキュリティドキュメントを参照してください。
chat.tools.global.autoApprove この設定は組織によって管理されている場合があります。変更するには管理者に連絡してください。 設定は、すべてのワークスペースにグローバルに適用されます。自動承認を現在のセッションに限定したい場合は、セッションスコープの権限レベルを使用してください。