ワークスペースの信頼
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))
フォルダーの選択
フォルダーを信頼すると、ワークスペース信頼エディターに表示される信頼されたフォルダー & ワークスペースリストに追加されます。
このリストからフォルダーを手動で追加、編集、削除して、ワークスペース信頼を有効または無効にできます。アクティブなフォルダーはこのリストで太字で強調表示されます。
親フォルダーの選択
ワークスペース信頼エディターを介してフォルダーを信頼すると、親フォルダーも信頼するオプションがあります。これは、親フォルダーとそのすべてのサブフォルダーに信頼を適用します。
信頼されたコンテンツを持つ多くのフォルダーが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.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 はウィンドウを完全信頼で実行します。インストールされているすべての拡張機能が有効になり、制限なく空のウィンドウを使用できます。
ファイルを開くと、親となるフォルダーがないため、信頼されていないファイルを開くかどうかを尋ねられます。
コマンドパレットでワークスペース: ワークスペース信頼を管理を選択し、次に信頼しないを選択することで、ワークスペース信頼エディターを使用して空のウィンドウを制限モードに切り替えることができます。空のウィンドウは現在のセッションでは制限モードのままですが、再起動するか新しいウィンドウを作成すると信頼された状態に戻ります。
すべての空のウィンドウを制限モードにしたい場合は、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
です。
コマンドラインスイッチ
VS Code コマンドラインで--disable-workspace-trust
を渡すことで、ワークスペース信頼を無効にできます。このスイッチは現在のセッションのみに影響します。
次のステップ
詳細はこちら
- ワークスペース信頼拡張機能ガイド - 拡張機能の作成者がワークスペース信頼をサポートする方法を学びます。
- VS Code の「ワークスペース」とは? - VS Code の「ワークスペース」の概念について詳しく学びます。
- GitHub Repositories 拡張機能 - ソースコードをローカルマシンにクローンせずに、リポジトリで直接作業します。
よくある質問
制限モードでもソースコードを編集できますか?
はい、制限モードでもソースコードを参照および編集できます。一部の言語機能は無効になる場合がありますが、テキスト編集は常にサポートされます。
インストールした拡張機能はどこへ行きましたか?
制限モードでは、ワークスペース信頼をサポートしない拡張機能はすべて無効になり、アクティビティバーアイコンやコマンドなどのすべての UI 要素は表示されません。
extensions.supportUntrustedWorkspaces 設定を使用して拡張機能のワークスペース信頼サポートレベルをオーバーライドできますが、注意して行ってください。拡張機能の有効化に詳細があります。
ワークスペース信頼機能を無効にできますか?
可能です。しかし推奨されません。新しいフォルダーやリポジトリを開く際に VS Code にワークスペース信頼を確認させたくない場合は、security.workspace.trust.enabled を false に設定できます。そうすると、VS Code は 1.57 リリース以前と同様に動作します。
フォルダー/ワークスペースの信頼を解除するにはどうすればよいですか?
ワークスペース信頼エディター (コマンドパレットからワークスペース: ワークスペース信頼を管理) を開き、信頼しないボタンを選択します。信頼されたフォルダー & ワークスペースリストからフォルダーを削除することもできます。
「信頼しない」ボタンが表示されないのはなぜですか?
ワークスペース信頼ダイアログに信頼しないボタンが表示されない場合、フォルダーの信頼レベルが親フォルダーから継承されている可能性があります。親フォルダーがワークスペース信頼を有効にしているかどうかを確認するには、信頼されたフォルダー & ワークスペースリストを確認してください。
GitHub Codespaceへの接続や、実行中の Docker コンテナーへのアタッチなどの一部のワークフローは、すでに高いレベルの信頼があるはずの管理された環境であるため、自動的に信頼されます。
ワークスペース信頼は何から保護してくれますか?
VS Code の多くの機能では、リンティングや保存時の書式設定、コードのコンパイルやデバッグなどの特定の操作を行う際に、サードパーティのツールや拡張機能が自動的に実行されます。不道徳な人物が、あなたの知らないうちに悪意のあるコードを実行し、ローカルマシンに損害を与える可能性のある、無害に見えるプロジェクトを作成するかもしれません。ワークスペース信頼は、なじみのないソースコードの安全性と完全性を評価している間にコードの実行を防ぐことで、セキュリティの追加レイヤーを提供します。