信頼性と安全性
AI によって生成された出力は、レビューが必要です。Visual Studio Code には、コードベースにどのような変更が適用されるかをユーザー自身が制御できるようにするための、複数のメカニズムが含まれています。この記事では、ユーザーが認識しておくべき制御メカニズム、AI の限界、およびセキュリティに関する考慮事項について説明します。
制御を維持する
エージェントはファイルの読み取り、コードの編集、ターミナル コマンドの実行、外部サービスの呼び出しを行うことができます。VS Code は、ワークスペース内で発生することに対して常にユーザーが主導権を握り続けられるように、いくつかのメカニズムを提供しています。
-
適用する前に編集内容をレビューする。 エージェントはファイルの変更を差分 (diff) ビューで表示します。各変更をレビューし、個々の編集を受け入れるか拒否するかを選択して、保存する前にコードを修正できます。詳細については、コード編集のレビューを参照してください。
-
チェックポイントを使用して元に戻す。 エージェント セッションは、作業の進行状況に合わせてチェックポイントを作成します。エージェントが間違った方向へ進んだ場合は、前のチェックポイントに戻って別のアプローチを試すことができます。詳細については、チェックポイントを参照してください。
-
ツールの呼び出しを承認する。 VS Code は、ターミナル コマンドを実行したり、副作用を伴うツールを使用したりする前に、承認を求めます。どのツールを自動的に実行できるようにし、どのツールに確認を必要とするかは、ユーザー自身が制御できます。Chat: Manage Tool Approval (チャット: ツールの承認の管理) コマンドを使用すると、すべてのツールに対する承認を一元管理できます。
-
権限レベルを選択する。 エージェントの自律性の度合いを制御します。Default Approvals (デフォルトの承認) では機微なツールに確認が必要となり、Bypass Approvals (承認のバイパス) ではすべてのツールの呼び出しを自動承認します。Autopilot (プレビュー) では質問に自動で応答し、自律的に処理を続行します。より高い自律性レベルを使用する場合は、エージェント サンドボックスやコンテナーと組み合わせてください。
-
信頼の境界。 VS Code は、ファイル アクセス、URL アクセス、エージェント サンドボックス、および MCP サーバーとのやり取りに関するセキュリティの境界を適用します。詳細については、AI のセキュリティを参照してください。
コミットする前に、AI が生成したコードを常にレビューしてください。エッジケースを処理しているか、プロジェクトの規約に従っているか、セキュリティ上の問題を持ち込んでいないかを確認します。
エージェント サンドボックス
エージェント サンドボックスは現在プレビュー段階にあり、今後さらに進化する可能性があります。
エージェント サンドボックスは、オペレーティング システム レベルの分離を使用して、エージェントがマシン上でアクセスできる対象を制限します。各アクションの前に表示される承認プロンプトのみに依存するのではなく、サンドボックスはファイル システムやネットワーク アクセスに対する厳格な境界を定義し、それを OS 自体が適用します。
VS Code は現在、エージェント セッション中に実行されるターミナル コマンド (runInTerminal エージェント ツール) にサンドボックスを適用しています。エージェント サンドボックスの設定方法についてご確認ください。
サンドボックスが有効になっている場合、コマンドやツールの呼び出しはすでに制御された環境で実行されているため、VS Code は確認プロンプトを表示せずに自動的に承認します。
サンドボックスが重要な理由
承認ベースのセキュリティでは、実行前に各ターミナル コマンドまたはツール呼び出しを確認する必要があります。これはコントロールを提供しますが、実用的な限界があります。
-
承認疲れ。 コマンドの承認を何度も繰り返すと、特に長いエージェント セッション中に、何を承認しているかに対する注意が薄れてしまう可能性があります。
-
解析の限界。 自動承認ルールはベストエフォート型のコマンド解析を使用していますが、これには既知の制限があります。シェルのエイリアス、クォートの結合、複雑なシェル構文によってルールがバイパスされ、検出されずにすり抜けてしまう可能性があります。
-
プロンプト インジェクション。 ファイル、ツールの出力、またはウェブページに含まれる悪意のあるコンテンツが、エージェントをだまして有害なコマンドを実行させようとする可能性があります。注意深くレビューせずに承認すると、意図しないアクションやセキュリティ リスクにつながるおそれがあります。
-
外部サービスにおける意図しないアクション。 悪意がなくても、ネットワークにアクセスできるエージェントは、取り消すことが困難なアクションをユーザーに代わって実行する可能性があります。たとえば、クラウド リソースのプロビジョニング、インフラストラクチャ設定の変更、リモート リポジトリへのコードのプッシュ、またはデプロイや金銭的取引を引き起こす API の呼び出しなどを行う可能性があります。ネットワークの分離により、エージェントは明示的に許可したドメインにのみアクセスできるようになり、外部サービスに対する意図しない悪影響のリスクが軽減されます。
サンドボックスは、OS レベルで境界を強制することで、これらの課題に対処します。サンドボックスは、自動承認されたコマンドが、許可された範囲外のファイルやネットワーク リソースにアクセスするのを防ぎます。追加の権限が必要な場合、VS Code はサンドボックス外でコマンドを実行するよう促します。
サンドボックスの仕組み
サンドボックスは、ファイル システム アクセスとネットワーク アクセスという 2 種類の分離を適用します。どちらも OS レベルで適用され、サンドボックス内で実行されているコマンドによってバイパスすることはできません。
ファイル システムの分離
ファイル システムの分離が行われていない場合、侵害されたコマンドがマシンの任意の場所にあるファイルを変更できる可能性があります。たとえば、シェルの設定ファイル (~/.bashrc、~/.zshrc) に悪意のあるコードを注入したり、~/.ssh/ から SSH キーを読み取ったりすることが可能です。ファイル システムの分離は、明示的に許可されたパスのみにアクセスを制限することで、これを防止します。
-
デフォルトの動作。 ワークスペース フォルダーとサンドボックスのランタイムの一時フォルダーに対する読み取りアクセスが許可されます。SSH キー、シェルの設定、認証情報などの機微なファイルを保護するため、ホーム ディレクトリ (
$HOME) からの読み取りはデフォルトで拒否されます。書き込みアクセスは、現在の作業ディレクトリとそのサブディレクトリに制限されます。追加の権限を必要とする要求が行われた場合、VS Code はサンドボックス外でコマンドを実行することを許可するかどうかを促します。
-
コマンドごとの読み取りパス。 コマンドが実行される前に、VS Code はそのコマンドを解析し、コマンドが必要とする特定のパスへの読み取りアクセスを許可します。これは、
git、node、npm、dotnet、Java、Rust などの一般的な開発ワークフローをカバーしています。たとえば、nodeコマンドを実行すると Node バージョン マネージャー ディレクトリからの読み取りが自動的に許可され、gitコマンドを実行すると~/.gitconfigからの読み取りが許可されます。 -
設定可能なルール。 追加のパスに対して読み取りまたは書き込みのアクセスを許可したり、特定のパスに対するアクセスを拒否したりできます。拒否ルールは常に許可ルールよりも優先されます。
-
継承される制限。 サンドボックス化されたコマンドによって生成されるすべての子プロセスは、同じファイル システムの境界を継承します。つまり、
npm、pip、またはビルド スクリプトなどのツールも制限されます。
ネットワークの分離
ネットワークの分離が行われていない場合、侵害されたコマンドによって機微なデータが流出したり、外部サービスに対して意図しないアクションが実行されたりする可能性があります。ネットワークの分離は、デフォルトですべての送信接続をブロックすることでこれを防止します。
When chat.agent.sandbox.enabled この設定は組織レベルで管理されています。変更するには管理者にお問い合わせください。 が on に設定されている場合、特定のドメインを明示的に許可しない限り、すべての送信ネットワーク アクセスがブロックされます。ファイル システムの分離は行いたいものの、制限のないネットワーク アクセスが必要な場合は、 chat.agent.sandbox.enabled この設定は組織レベルで管理されています。変更するには管理者にお問い合わせください。 を allowNetwork に設定します。このモードでは、ファイル システムの制限が引き続き適用されたまま、コマンドは外部サービスに自由にアクセスできます。
VS Code は、エージェント ツール (fetch ツール、統合ブラウザー) とサンドボックス化されたターミナル コマンドの両方に適用されるネットワーク ドメイン フィルタリングを提供します。ネットワーク フィルタリングを有効にするには、 chat.agent.networkFilter この設定は組織レベルで管理されています。変更するには管理者にお問い合わせください。 を有効にします。エージェントがアクセスできるドメインを制御するには、 chat.agent.allowedNetworkDomains この設定は組織レベルで管理されています。変更するには管理者にお問い合わせください。 と chat.agent.deniedNetworkDomains この設定は組織レベルで管理されています。変更するには管理者にお問い合わせください。 を使用します。ネットワーク アクセスの設定方法についてご確認ください。
-
ドメインの許可リスト。 特定のドメインへのアクセスを明示的に許可できます。
注意エージェントは、データを読み取るだけでなく、許可されたドメイン上でユーザーに代わってアクションを実行できます。たとえば、
api.github.comを許可すると、エージェントがプルリクエストを作成したりリポジトリの設定を変更したりできるようになります。クラウド サービスの API ドメインを許可すると、クラウド リソースの変更につながる可能性があります。この設定は、絶対に必要とされない限り行わないでください。この設定は設定項目で指定され、現在のタスクだけでなく、すべてのエージェント ツールやサンドボックス化されたコマンドに適用されます。 -
継承される制限。 すべての子プロセスは同じネットワーク制限を継承するため、サブプロセスを生成するスクリプトやツールがネットワーク ルールをバイパスすることはできません。
OS レベルでの強制
エージェント サンドボックスは、ファイル システムとネットワークの制限を強制するために、OS レベルのセキュリティ プリミティブに依存しています。強制がカーネル レベルで行われるため、コマンドがそれを試みるように細工されていたとしても、サンドボックス化されたプロセスとそのすべての子プロセスがこれらの境界をバイパスすることはできません。
| プラットフォーム | テクノロジー | 前提条件 |
|---|---|---|
| macOS | オペレーティング システムに組み込まれている Apple のサンドボックス フレームワーク (「Seatbelt」)。カーネル レベルで、きめ細かなファイル システムとネットワークの制限を強制します。 | なし。設定なしですぐに動作します。 |
| Linux および WSL2 | ファイル システムの分離には bubblewrap、ネットワーク プロキシには socat を使用します。 |
必要なパッケージをインストールします: sudo apt-get install bubblewrap socat (Debian および Ubuntu) または sudo dnf install bubblewrap socat (Fedora)。 |
bubblewrap には WSL2 でのみ利用可能な Linux カーネル機能 (ユーザー名前空間) が必要なため、WSL バージョン 1 はサポートされていません。
Windows でのエージェント サンドボックスのサポートは、現在、基礎となるプラットフォームとして WSL2 を使用しています。
サンドボックスがカバーしないもの
エージェント サンドボックスは、シェル サブプロセス (ターミナル コマンド) にのみ適用されます。組み込みのファイル ツールはカバーしていません。エージェントの読み取り、編集、書き込みツールは、サンドボックスを経由するのではなく、VS Code の権限システムを直接使用します。
サンドボックスとは無関係に、 chat.agent.networkFilter この設定は組織レベルで管理されています。変更するには管理者にお問い合わせください。 設定は fetch ツールや統合ブラウザーなどのエージェント ツールにネットワーク ドメイン フィルタリングを提供します。サンドボックスとネットワーク フィルタリングの両方が有効な場合、ネットワーク ルールはすべてのエージェント ツールおよびターミナル コマンドに適用されます。
これらの操作を制御するには、レビュー フローと機微なファイルの保護を使用します。
完全な環境分離を行うには、サンドボックスを 開発コンテナー (Dev Container) と組み合わせてください。開発コンテナーは、すべてのツール、ファイル アクセス、ネットワーク アクセスを含め、開発環境全体を完全に囲む境界を提供します。
エージェント サンドボックスは現在プレビュー段階であり、より多くのツールやシナリオをカバーできるよう進化を続けています。
注意すべき AI の限界
不正確な出力。 モデルは、一見正しそうに見えてもバグが含まれていたり、非推奨の API を使用していたり、エッジケースを処理していなかったりするコードを生成する可能性があります。AI が生成したコードは、特にセキュリティ、データの整合性、またはクリティカルなフローに影響を与えるロジックについては、常にテストしてください。
プロンプト インジェクション。 ファイル、ツールの出力、またはウェブページに含まれる悪意のあるコンテンツが、エージェントの動作を誘導しようとする可能性があります。VS Code にツールの承認ゲートと信頼の境界が含まれているのはこのためです。詳細については、AI のセキュリティを参照してください。
AI が生成した出力は第一稿として扱ってください。出発点としては有用ですが、常にユーザー自身のレビューと判断が必要です。非決定性、知識の境界、コンテキスト制限など、モデルの仕組みの詳細については、言語モデルを参照してください。