信任與安全

AI 產生的輸出需要審查。Visual Studio Code 包含多種機制,讓您可以掌控哪些變更會進入您的程式碼庫。本文說明您應了解的控制機制、AI 限制與安全性考量。

保持掌控

代理程式(Agents)可以讀取檔案、編輯程式碼、執行終端機指令以及呼叫外部服務。VS Code 提供多種機制,確保您能對工作區發生的事情保持掌控。

  • 在套用前審查編輯內容。代理程式會在差異檢視(diff view)中顯示檔案變更。您可以在儲存前審查每一項變更、接受或拒絕個別編輯,以及修改程式碼。深入了解審查程式碼編輯

  • 使用檢查點(checkpoints)進行還原。代理程式的工作階段會隨進度建立檢查點。如果代理程式操作失誤,您可以回到先前的檢查點並嘗試不同的方法。深入了解檢查點

  • 核准工具呼叫。VS Code 在執行終端機指令或使用具有副作用(side effects)的工具之前會徵求您的核准。您可以控制哪些工具可以自動執行,哪些需要確認。請使用 Chat: Manage Tool Approval 指令來集中管理所有工具的核准

  • 選擇權限層級。控制代理程式的自主程度:Default Approvals(預設核准)要求對敏感工具進行確認,Bypass Approvals(略過核准)會自動核准所有工具呼叫,而 Autopilot(自動導航,預覽版)則會自動回應問題並持續自主運作。若需較高的自主層級,請搭配代理程式沙盒或容器使用。

  • 信任邊界。VS Code 在檔案存取、URL 存取、代理程式沙盒以及 MCP 伺服器互動周圍強制執行安全邊界。深入了解 AI 安全性

在提交(commit)之前,請務必審查 AI 產生的程式碼。驗證它是否處理了極端情況(edge cases)、遵循您的專案規範,且未引入安全性問題。

代理程式沙盒(Agent sandboxing)

注意

代理程式沙盒目前為預覽階段,未來可能會持續演進。

代理程式沙盒使用作業系統層級的隔離機制,以限制代理程式在您機器上的存取權限。沙盒定義了由作業系統本身強制執行的檔案系統與網路存取嚴格界線,而非僅依賴於每次動作前的核准提示。

VS Code 目前將沙盒應用於代理程式工作階段期間執行的終端機指令(runInTerminal 代理程式工具)。了解如何設定代理程式沙盒

啟用沙盒後,VS Code 會自動核准指令與工具呼叫,而無需確認提示,因為它們已在受控環境中執行。

為什麼沙盒很重要

基於核准的安全機制要求您在執行每個終端機指令或工具呼叫前進行確認。雖然這提供了控制權,但仍有實際限制:

  • 核准疲勞(Approval fatigue)。重複核准指令可能會導致您對核准的內容疏於留意,尤其是在長期的代理程式工作階段中。

  • 解析限制。自動核准規則使用盡力而為(best-effort)的指令解析,這有已知的限制。Shell 別名(aliases)、引號串聯以及複雜的 Shell 語法可能會繞過規則而不被偵測到。

  • 提示詞注入(Prompt injection)。檔案、工具輸出或網頁中的惡意內容可能會企圖誘騙代理程式執行有害指令。如果您未經仔細審查就核准,可能會導致非預期的操作與安全性風險。

  • 對外部服務的非預期操作。即使沒有惡意,具有網路存取權限的代理程式仍可能代表您執行難以復原的操作。例如,代理程式可能會佈建雲端資源、修改基礎架構設定、將程式碼推送至遠端儲存庫,或呼叫觸發部署或金融交易的 API。網路隔離確保代理程式只能存取您明確許可的網域,從而降低對外部服務產生非預期副作用的風險。

沙盒透過在作業系統層級強制執行邊界來解決這些挑戰。沙盒防止自動核准的指令存取許可範圍之外的檔案或網路資源。如果需要額外權限,VS Code 會提示您在沙盒外執行該指令。

沙盒的運作方式

沙盒強制執行兩種類型的隔離:檔案系統存取網路存取。兩者皆在作業系統層級套用,無法被在沙盒內執行的指令繞過。

檔案系統隔離

若沒有檔案系統隔離,遭入侵的指令可能會修改您機器上的任何檔案,例如將惡意程式碼注入您的 Shell 設定檔(~/.bashrc~/.zshrc)或從 ~/.ssh/ 讀取 SSH 金鑰。檔案系統隔離透過將存取權限限制在明確許可的路徑中來防止此類情況。

  • 預設行為。工作區資料夾與沙盒執行時期暫存資料夾允許讀取存取。預設會拒絕讀取您的家目錄($HOME),以保護 SSH 金鑰、Shell 設定與憑證等敏感檔案。寫入存取權限僅限於目前工作目錄及其子目錄。當發出的請求需要額外權限時,VS Code 會提示您允許在沙盒外執行該指令。

    Screenshot of a VS Code prompt asking the user to allow a command to run outside the sandbox for additional permissions.

  • 每個指令的讀取路徑。在執行指令前,VS Code 會對其進行解析,並授予該指令所需特定路徑的讀取權限。這涵蓋了常見的開發者工作流程,如 gitnodenpmdotnet、Java 與 Rust。例如,執行 node 指令會自動允許讀取 Node 版本管理程式目錄,執行 git 指令則允許讀取 ~/.gitconfig

  • 可設定規則。您可以授予或拒絕額外路徑的讀取或寫入存取權限。拒絕規則(deny rules)永遠優先於允許規則(allow rules)。

  • 繼承限制。所有由沙盒化指令產生的子處理程序(child processes)都會繼承相同的檔案系統邊界。這意味著像是 npmpip 或建置指令碼等工具也會受到限制。

網路隔離

若沒有網路隔離,遭入侵的指令可能會竊取(exfiltrate)敏感資料或對外部服務執行非預期的操作。網路隔離預設封鎖所有對外連線,藉此防止此類情況。

chat.agent.sandbox.enabled 在 VS Code 中開啟 在 VS Code Insiders 中開啟 此設定由組織層級管理。請聯絡您的管理員進行變更。 設定為 on 時,所有對外網路存取皆會被封鎖,除非您明確允許特定網域。如果您需要檔案系統隔離但需要不受限制的網路存取,請將 chat.agent.sandbox.enabled 在 VS Code 中開啟 在 VS Code Insiders 中開啟 此設定由組織層級管理。請聯絡您的管理員進行變更。 設為 allowNetwork。在此模式下,指令可以自由存取外部服務,同時仍適用檔案系統限制。

VS Code 提供適用於代理程式工具(fetch 工具、整合瀏覽器)與沙盒化終端機指令的網路網域篩選功能。啟用 chat.agent.networkFilter 在 VS Code 中開啟 在 VS Code Insiders 中開啟 此設定由組織層級管理。請聯絡您的管理員進行變更。 以啟動網路篩選。使用 chat.agent.allowedNetworkDomains 在 VS Code 中開啟 在 VS Code Insiders 中開啟 此設定由組織層級管理。請聯絡您的管理員進行變更。 chat.agent.deniedNetworkDomains 在 VS Code 中開啟 在 VS Code Insiders 中開啟 此設定由組織層級管理。請聯絡您的管理員進行變更。 來控制代理程式可以存取的網域。了解如何設定網路存取

  • 網域允許清單。您可以明確允許存取特定網域。

    注意

    代理程式可以代表您在允許的網域上執行操作,而不僅僅是讀取資料。例如,允許 api.github.com 意味著代理程式可以建立 Pull Request 或修改儲存庫設定。允許雲端服務 API 網域可能會導致雲端資源修改。僅在絕對必要時才設定此項目。此組態是在設定中指定的,並適用於所有代理程式工具與沙盒化指令,而不僅是目前的任務。

  • 繼承限制。所有子處理程序都會繼承相同的網路限制,因此產生子處理程序的指令碼或工具無法繞過網路規則。

作業系統層級強制執行

代理程式沙盒依賴作業系統層級的安全原語(security primitives)來強制執行檔案系統與網路限制。由於強制執行發生在核心(kernel)層級,沙盒化處理程序及其所有子處理程序無法繞過這些邊界,即使指令經過精心設計試圖繞過也一樣。

平台 技術 先決條件
macOS Apple 的沙盒框架("Seatbelt"),內建於作業系統中。在核心層級強制執行細粒度的檔案系統與網路限制。 無。開箱即用。
Linux 與 WSL2 用於檔案系統隔離的 bubblewrap 以及用於網路代理的 socat 安裝所需套件:sudo apt-get install bubblewrap socat(Debian 與 Ubuntu)或 sudo dnf install bubblewrap socat(Fedora)。

不支援 WSL 版本 1,因為 bubblewrap 需要 Linux 核心功能(使用者命名空間),而該功能僅在 WSL2 中提供。

注意

Windows 上的代理程式沙盒支援目前使用 WSL2 作為底層平台。

沙盒未涵蓋的範圍

代理程式沙盒僅適用於 Shell 子處理程序(終端機指令)。它不涵蓋內建檔案工具。代理程式的讀取、編輯與寫入工具是直接使用 VS Code 的權限系統,而非透過沙盒執行。

提示

chat.agent.networkFilter 在 VS Code 中開啟 在 VS Code Insiders 中開啟 此設定由組織層級管理。請聯絡您的管理員進行變更。 設定為代理程式工具(如 fetch 工具與整合瀏覽器)提供網路網域篩選功能,與沙盒無關。當沙盒與網路篩選同時啟用時,網路規則會套用至所有代理程式工具與終端機指令。

使用審查流程敏感檔案保護來控制這些操作。

若需要完整的環境隔離,請將沙盒與 開發容器(dev container)搭配使用。開發容器為整個開發環境提供完整的邊界,包括所有工具、檔案存取與網路存取。

代理程式沙盒目前為預覽階段,並持續演進以涵蓋更多工具與情境。

需注意的 AI 限制

不正確的輸出。模型可能會產生看起來正確但包含錯誤、使用已棄用 API 或未處理極端情況的程式碼。請務必測試 AI 產生的程式碼,特別是涉及安全性、資料完整性或關鍵流程的邏輯。

提示詞注入。檔案、工具輸出或網頁中的惡意內容可能會企圖重新導向代理程式的行為。這就是為什麼 VS Code 包含工具核准閘道與信任邊界的原因。深入了解 AI 安全性

將 AI 產生的輸出視為初稿:適合做為起點,但始終需要您的審查與判斷。若要深入了解模型運作方式(包括非決定論、知識邊界與內容限制),請參閱語言模型

© . This site is unofficial and not affiliated with Microsoft.