ワークスペースの信頼
Visual Studio Code はセキュリティを真剣に受け止めており、ソースや元の作成者に関係なく、安全にコードを閲覧および編集できるよう支援したいと考えています。ワークスペースの信頼機能を使用すると、プロジェクト フォルダー内のコードを、明示的な承認なしに VS Code と拡張機能によって実行できるかどうかを決定できます。
安全なコードの閲覧
公開リポジトリやファイル共有で非常に多くのソースコードが利用できることは素晴らしいことです。コーディングのタスクや問題が何であれ、おそらくどこかですでに良い解決策が見つかります。また、コードの理解、デバッグ、最適化に役立つ強力なコーディング ツールが多数利用できることも素晴らしいことです。しかし、オープンソースのコードやツールを使用することにはリスクがあり、悪意のあるコードの実行や悪用の危険に身をさらす可能性があります。
ワークスペースの信頼は、ワークスペースが「制限モード」で開かれている場合、ワークスペース内のコードの自動実行を防ぐことで、見慣れないコードを扱う際のセキュリティ層をさらに強化します。
注: 「ワークスペース」と「フォルダー」という用語は、VS Code の UI とドキュメントで広く使用されています。「ワークスペース」は、VS Code によって作成および使用される追加のメタデータを持つフォルダーと考えることができます。
制限モード
ワークスペースの信頼ダイアログが表示されたときに、いいえ、作成者を信頼しませんを選択すると、VS Code はコードの実行を防ぐために制限モードになります。
ワークベンチの上部にバナーが表示され、ワークスペースの信頼エディターを介してフォルダーを管理するためのリンクが表示されます。ステータス バーには、ワークスペースが制限モードであることを示すバッジも表示されます。
制限モードは、タスク、デバッグ、ワークスペース設定、拡張機能など、いくつかの VS Code 機能の操作を無効化または制限することで、コードの自動実行を防ごうとします。
制限モードで無効になる機能の完全なリストを確認するには、バナーの管理リンクから、またはステータス バーの制限モード バッジを選択して、ワークスペースの信頼エディターを開きます。
重要: ワークスペースの信頼は、悪意のある拡張機能がコードを実行し、制限モードを無視するのを防ぐことはできません。信頼できる既知の発行元からの拡張機能のみをインストールして実行する必要があります。
タスク
VS Code のタスクは、スクリプトやツール バイナリを実行できます。タスク定義はワークスペースの .vscode
フォルダーで定義されているため、リポジトリのコミットされたソースコードの一部であり、そのリポジトリのすべてのユーザーに共有されます。誰かが悪意のあるタスクを作成した場合、そのリポジトリをクローンした誰もが知らず知らずのうちに実行してしまう可能性があります。
制限モード中にタスクを実行したり、列挙しようとしたりすると (タスク > タスクの実行)、VS Code はフォルダーを信頼してタスクの実行を続行するかどうかを確認するプロンプトを表示します。ダイアログをキャンセルすると、VS Code は制限モードのままになります。
デバッグ
VS Code タスクの実行と同様に、デバッグ拡張機能はデバッグ セッションの起動時にデバッガー バイナリを実行できます。そのため、フォルダーが制限モードで開かれている場合、デバッグも無効になります。
制限モードでデバッグ セッションを開始しようとすると (デバッグ > デバッグの開始)、VS Code はフォルダーを信頼してデバッガーの起動を続行するかどうかを確認するプロンプトを表示します。ダイアログをキャンセルすると、VS Code は制限モードのままになり、デバッグ セッションは開始されません。
ワークスペース設定
ワークスペースの設定は、ワークスペースのルートにある .vscode
フォルダーに保存されるため、ワークスペースのリポジトリをクローンしたすべてのユーザーによって共有されます。一部の設定には実行可能ファイルへのパス (たとえば、リンターのバイナリ) が含まれており、悪意のあるコードを指すように設定されている場合、損害を引き起こす可能性があります。このため、VS Code は制限モードで実行しているときに、一連のワークスペース設定を無効にします。
ワークスペースの信頼エディターで、適用されていないワークスペース設定のリンクを選択すると、@tag:requireTrustedWorkspace
タグでスコープされた設定エディターが表示されます。
拡張機能
VS Code の拡張機能エコシステムは、非常に豊かで多様です。人々は、ほぼすべてのプログラミング タスクやエディターのカスタマイズに役立つ拡張機能を作成しました。一部の拡張機能は完全なプログラミング言語サポート (IntelliSense、デバッグ、コード分析) を提供し、他の拡張機能では音楽を再生したり、仮想のペットを飼ったりできます。
ほとんどの拡張機能はあなたに代わってコードを実行し、害を及ぼす可能性があります。一部の拡張機能には、予期しない実行可能ファイルを実行するように設定されている場合、悪意のある動作をさせる可能性がある設定があります。このため、ワークスペースの信頼を明示的に選択していない拡張機能は、制限モードではデフォルトで無効になります。
インストールされている拡張機能のステータスを確認するには、ワークスペースの信頼エディターで 拡張機能が無効になっているか、機能が制限されています というリンクを選択します。これにより、@workspaceUnsupported
フィルターでスコープされた拡張機能ビューが表示されます。
ワークスペースの信頼を選択していない拡張機能は、制限モードで無効または制限されることがあります。
制限モードで無効
制限モードでの実行をサポートすることを明示的に示していない拡張機能は、制限モードで無効セクションに表示されます。拡張機能の作成者は、拡張機能がワークスペース内の変更 (設定またはファイル) によって悪用される可能性があると判断した場合、制限モードでは決して有効にしないことを示すこともできます。
制限モードで制限あり
拡張機能の作成者は、拡張機能を潜在的なセキュリティ脆弱性について評価し、制限モードで実行する場合に制限付きサポートがあることを宣言することもできます。このモードは、拡張機能が悪用の可能性を防ぐために一部の機能や機能を無効にする可能性があることを意味します。
拡張機能は、拡張機能ビューのワークスペースの信頼バッジにカスタム テキストを追加して、信頼されていないフォルダーで実行する場合の制限を説明できます。たとえば、VS Code に組み込まれている PHP 拡張機能は、信頼されたフォルダーでのみ php.validate.executablePath 設定の使用を制限します。この設定をオーバーライドすると、悪意のあるプログラムが実行される可能性があるためです。
拡張機能のワークスペースの信頼サポート レベルは、以下の拡張機能の有効化セクションで説明されている extensions.supportUntrustedWorkspaces 設定を使用してオーバーライドできます。
制限モードで拡張機能をインストールしようとすると、ワークスペースを信頼するか、拡張機能のみをインストールするかを尋ねられます。拡張機能がワークスペースの信頼をサポートしていない場合、インストールはされますが、無効になるか、機能が制限された状態で実行されます。
注: 拡張機能の作成者は、ワークスペースの信頼拡張機能ガイドを読むことで、拡張機能を更新してワークスペースの信頼をサポートする方法を学ぶことができます。
ワークスペースの信頼
プロジェクトの作成者とメンテナーを信頼する場合、ローカル マシン上のプロジェクトのフォルダーを信頼できます。たとえば、github.com/microsoft や github.com/docker などの有名な GitHub 組織のリポジトリを信頼するのは通常安全です。
新しいフォルダーを開くと、最初のワークスペースの信頼プロンプトで、そのフォルダーとそのサブフォルダーを信頼できます。
ワークスペース エディターを表示し、信頼または親を信頼ボタンを選択することで、フォルダーの信頼状態をすばやく切り替えることもできます。
ワークスペースの信頼エディター ダイアログを表示するには、いくつかの方法があります。
制限モードの場合
- 制限モード バナーの管理リンク
- 制限モードのステータス バー アイテム
いつでも以下を使用することもできます
- コマンド パレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) からの Workspaces: Manage Workspace Trust コマンド
フォルダーの選択
フォルダーを信頼すると、そのフォルダーはワークスペースの信頼エディターに表示される信頼されたフォルダーとワークスペースのリストに追加されます。
このリストからフォルダーを手動で追加、編集、削除して、ワークスペースの信頼を有効または無効にすることができます。アクティブなフォルダーは、このリストで太字で強調表示されます。
親フォルダーの選択
ワークスペースの信頼エディターでフォルダーを信頼する場合、親フォルダーも信頼するオプションがあります。これにより、親フォルダーとそのすべてのサブフォルダーに信頼が適用されます。
信頼されたコンテンツを持つ多くのフォルダーが 1 つのフォルダーの下に共存している場合、親フォルダーを信頼すると便利です。
信頼された親の下にあるサブフォルダーを開くと、制限モードに戻すための通常の信頼しないボタンは表示されません。代わりに、別のフォルダーのためにフォルダーが信頼されていることを示すテキストが表示されます。
信頼されたフォルダーとワークスペースのリストから、親フォルダーのエントリを追加、変更、削除できます。
フォルダー構成
親フォルダーを信頼すると、すべてのサブフォルダーが信頼されるため、ディスク上のリポジトリの場所を介してワークスペースの信頼を制御できます。
たとえば、すべての信頼されたリポジトリを「TrustedRepos」親フォルダーの下に置き、見慣れないリポジトリを「ForEvaluation」などの別の親フォルダーの下に置くことができます。「TrustedRepos」フォルダーを信頼し、「ForEvaluation」の下のフォルダーを選択的に信頼します。
├── TrustedRepos - Clone trusted repositories under this parent folder
└── ForEvaluation - Clone experimental or unfamiliar repositories under this parent folder
また、リポジトリを組織固有の親フォルダーの下にグループ化して、信頼を設定することもできます。
├── github/microsoft - Clone a specific organization's repositories under this parent folder
├── github/{myforks} - Place your forked repositories under this parent folder
└── local - Local un-published repositories
拡張機能の有効化
制限モードを使用したいが、お気に入りの拡張機能がワークスペースの信頼をサポートしていない場合はどうなりますか? これは、拡張機能が便利で機能的であるにもかかわらず、積極的にメンテナンスされておらず、ワークスペースの信頼サポートを宣言していない場合に発生する可能性があります。このシナリオに対処するために、extensions.supportUntrustedWorkspaces 設定で拡張機能の信頼状態をオーバーライドできます。
重要: 拡張機能のワークスペースの信頼サポートをオーバーライドする際は注意してください。拡張機能の作成者が制限モードで拡張機能を無効にする正当な理由がある可能性があります。不明な場合は、拡張機能の作成者に連絡するか、最近の変更履歴を確認して詳細なコンテキストを入手してください。
設定エディター (⌘, (Windows, Linux Ctrl+,)) で、Extensions: Support Untrusted Workspaces 設定 (extensions.supportUntrustedWorkspaces) を介して個々の拡張機能のワークスペースの信頼をオーバーライドできます。
settings.json で編集リンクを選択して、拡張機能 ID とそのサポート ステータスおよびバージョンのリストを管理します。IntelliSense の候補を使用して、インストールされている拡張機能のいずれかを選択できます。
以下に、Prettier 拡張機能の settings.json
エントリを示します。
"extensions.supportUntrustedWorkspaces": {
"esbenp.prettier-vscode": {
"supported": true,
"version": "6.4.0"
},
},
supported
属性を使用して、ワークスペースの信頼サポートを有効または無効にすることができます。version
属性は、適用可能な正確な拡張機能のバージョンを指定します。すべてのバージョンに対して状態を設定したい場合は、バージョン フィールドを削除できます。
拡張機能の作成者が制限モードで制限する機能を評価および決定する方法について詳しく知りたい場合は、ワークスペースの信頼拡張機能ガイドを読むことができます。
信頼されていないファイルを開く
信頼されたフォルダーの外にあるファイルを開くと、VS Code はファイルがフォルダーのルート外のどこかから来たことを検出し、ファイルを開き続けるか、制限モードで新しいウィンドウでファイルを開くかのオプションを提示します。制限モードで開くのが最も安全なオプションであり、ファイルが信頼できると判断したら、いつでも元の VS Code ウィンドウでファイルを再度開くことができます。
信頼されたワークスペース外のファイルを開くときにプロンプトを表示させたくない場合は、security.workspace.trust.untrustedFiles を open
に設定できます。また、security.workspace.trust.untrustedFiles を newWindow
に設定して、常に制限モードで新しいウィンドウを作成することもできます。信頼されていないファイルダイアログですべてのワークスペースで私の決定を記憶するオプションをチェックすると、選択が security.workspace.trust.untrustedFiles ユーザー設定に適用されます。
信頼されていないフォルダーを開く
複数のフォルダーを持つマルチルート ワークスペースで作業しているときに、信頼されたマルチルート ワークスペースに新しいフォルダーを追加しようとすると、そのフォルダー内のファイルを信頼するかどうか、そうでない場合はワークスペース全体が制限モードに切り替わるかを決定するように求められます。
空のウィンドウ (開いているフォルダーなし)
デフォルトでは、フォルダーやワークスペースを開かずに新しい VS Code ウィンドウ (インスタンス) を開くと、VS Code はウィンドウを完全な信頼で実行します。インストールされているすべての拡張機能が有効になり、制限なく空のウィンドウを使用できます。
ファイルを開くと、親となるフォルダーがないため、信頼されていないファイルを開くかどうかを尋ねられます。
ワークスペースの信頼エディター (コマンド パレットでWorkspaces: Manage Workspace Trust を選択) を使用して、空のウィンドウを制限モードに切り替え、信頼しないを選択できます。空のウィンドウは現在のセッションでは制限モードのままですが、再起動したり新しいウィンドウを作成したりすると信頼された状態に戻ります。
すべての空のウィンドウを制限モードにしたい場合は、security.workspace.trust.emptyWindow を false
に設定できます。
設定
以下は、利用可能なワークスペースの信頼設定です
- security.workspace.trust.enabled - ワークスペースの信頼機能を有効にします。デフォルトは true です。
- security.workspace.trust.startupPrompt - 起動時にワークスペースの信頼ダイアログを表示するかどうか。デフォルトでは、個別のフォルダーまたはワークスペースごとに 1 回だけ表示されます。
- security.workspace.trust.emptyWindow - 空のウィンドウ (開いているフォルダーなし) を常に信頼するかどうか。デフォルトは true です。
- security.workspace.trust.untrustedFiles - ワークスペース内の単独のファイルをどのように扱うかを制御します。デフォルトはプロンプトです。
- extensions.supportUntrustedWorkspaces - 拡張機能のワークスペースの信頼宣言をオーバーライドします。true または false のいずれかです。
- security.workspace.trust.banner - 制限モード バナーが表示されるタイミングを制御します。デフォルトは
untilDismissed
です。
コマンドライン スイッチ
--disable-workspace-trust
を渡すことで、VS Code のコマンドラインからワークスペースの信頼を無効にできます。このスイッチは現在のセッションにのみ影響します。
次のステップ
詳細はこちら
- ワークスペースの信頼拡張機能ガイド - 拡張機能の作成者がワークスペースの信頼をサポートする方法を学びます。
- VS Code の「ワークスペース」とは? - VS Code の「ワークスペース」の概念について詳しく説明します。
- GitHub Repositories 拡張機能 - ソースコードをローカルマシンにクローンせずに、リポジトリで直接作業します。
よくある質問
制限モードでもソースコードを編集できますか?
はい、制限モードでもソースコードを閲覧および編集できます。一部の言語機能は無効になる場合がありますが、テキスト編集は常にサポートされています。
インストールした拡張機能はどこにありますか?
制限モードでは、ワークスペースの信頼をサポートしていない拡張機能は無効になり、アクティビティ バーのアイコンやコマンドなどのすべての UI 要素は表示されません。
拡張機能のワークスペースの信頼サポート レベルは extensions.supportUntrustedWorkspaces 設定でオーバーライドできますが、慎重に行ってください。詳細は拡張機能の有効化を参照してください。
ワークスペースの信頼機能を無効にできますか?
できますが、お勧めしません。新しいフォルダーやリポジトリを開くときに VS Code にワークスペースの信頼をチェックさせたくない場合は、security.workspace.trust.enabled を false に設定できます。そうすると、VS Code は 1.57 リリース以前のように動作します。
フォルダー/ワークスペースの信頼を解除するにはどうすればよいですか?
ワークスペースの信頼エディター (コマンド パレットからWorkspaces: Manage Workspace Trust) を表示し、信頼しないボタンを選択します。また、信頼されたフォルダーとワークスペースのリストからフォルダーを削除することもできます。
「信頼しない」ボタンが表示されないのはなぜですか?
ワークスペースの信頼ダイアログに信頼しないボタンが表示されない場合、フォルダーの信頼レベルが親フォルダーから継承されている可能性があります。信頼されたフォルダーとワークスペースのリストを確認して、親フォルダーがワークスペースの信頼を有効にしているかどうかを確認してください。
GitHub Codespace への接続や、実行中の Docker コンテナーへのアタッチなどの一部のワークフローは、これらがすでに高いレベルの信頼を持つべき管理された環境であるため、自動的に信頼されます。
ワークスペースの信頼は何から保護しますか?
VS Code の多くの機能では、サードパーティのツールや拡張機能が、保存時のリンティングやフォーマット、コードのコンパイルやデバッグなどの特定の操作を行うときに自動的に実行されます。非倫理的な人物は、無害に見えるプロジェクトを作成し、あなたの知らないうちに悪意のあるコードを実行してローカルマシンに損害を与える可能性があります。ワークスペースの信頼は、見慣れないソースコードの安全性と完全性を評価している間、コードの実行を防ごうとすることで、セキュリティの層をさらに強化します。