信任與安全
AI 生成的輸出需要經過審查。Visual Studio Code 包含多種機制,讓您能掌控哪些變更會進入您的程式碼基底。本文說明您應該了解的控制機制、AI 限制與安全性考量。
保持掌控
代理程式可以讀取檔案、編輯程式碼、執行終端機命令以及呼叫外部服務。VS Code 的信任模型分層了多種控制機制,確保您能掌控進入程式碼基底的內容
- 套用前先審查。所有檔案變成都將顯示在差異檢視中以供決定保留或還原,而檢查點 (checkpoints) 則允許您復原工作階段。
- 動作前先核准。具有副作用的工具和終端機命令會提示進行核准,範圍可依工作階段、工作區或使用者進行設定。
- 限制自主性。權限等級決定了代理程式自主執行的程度,從每次呼叫皆須核准到完全自主的自動駕駛 (Autopilot) 模式。
- 在作業系統層級強制執行邊界。代理程式沙箱會限制終端機命令的檔案系統與網路存取,確保自動核准的動作不會超出定義的範圍。
- 信任邊界。VS Code 在授予工作區、擴充功能、MCP 伺服器和網路網域信任之前會先提示您。
如需這些控制項的分步設定(核准規則、敏感檔案保護、沙箱設定、組織策略),請參閱 VS Code 中的 AI 安全性。
提交前請務必審查 AI 生成的程式碼。驗證它是否妥善處理邊界情況、遵循專案的慣例,且未引入安全性問題。
代理程式沙箱
代理程式沙箱目前為預覽版,未來可能會持續演進。
代理程式沙箱使用作業系統層級的隔離來限制代理程式在您電腦上可以存取的內容。沙箱不是單純依賴每次動作前的核准提示,而是為檔案系統和網路存取定義了嚴格的邊界,並由作業系統本身強制執行。
VS Code 會將沙箱套用到在代理程式工作階段期間執行的終端機命令(runInTerminal 代理程式工具),包含使用 VS Code 代理程式終端機整合的 Copilot CLI 代理程式主機工作階段。了解如何設定代理程式沙箱。
啟用沙箱後,VS Code 會自動核准在沙箱中執行的終端機命令而不需要確認提示,因為它們已經在受控環境中執行。
為什麼沙箱很重要
基於核准的安全性要求您在每個終端機命令或工具呼叫執行之前進行確認。雖然這提供了掌控能力,但它也有實際上的限制
-
核准疲勞。反覆核准命令可能會讓您對所核准的內容注意力降低,特別是在漫長的代理程式工作階段中。
-
解析限制。自動核准規則使用盡力而為的命令解析,這有其已知的限制。Shell 別名、引號串接和複雜的 Shell 語法可能會繞過規則並在未被偵測到的情況下通過。
-
提示詞隱碼攻擊。檔案、工具輸出或網頁中的惡意內容可能會企圖誘騙代理程式執行有害的命令。如果您在未仔細審查的情況下進行核准,可能會導致非預期的動作與安全性風險。
-
對外部服務採取非預期的動作。即使沒有惡意意圖,具備網路存取權限的代理程式也可能代表您執行難以復原的動作。例如,代理程式可能會佈建雲端資源、修改基礎架構設定、將程式碼推送至遠端儲存庫,或是呼叫會觸發部署或金融交易的 API。網路隔離可確保代理程式只能存取您明確允許的網域,從而降低對外部服務產生非預期副作用的風險。
沙箱透過在作業系統層級強制執行邊界來解決這些挑戰。沙箱可防止自動核准的命令存取允許範圍之外的檔案或網路資源。如果需要額外的權限,VS Code 會提示您在沙箱外部執行命令。您可以將 VS Code 設定為在顯示該提升權限提示之前,先嘗試在沙箱內部執行命令。
沙箱的運作方式
沙箱會強制執行兩種類型的隔離:檔案系統存取與網路存取。兩者均在作業系統層級套用,無法被在沙箱內部執行的命令所繞過。
檔案系統隔離
如果沒有檔案系統隔離,遭到入侵的命令可能會修改您電腦上任何地方的檔案,例如將惡意程式碼植入您的 shell 設定(~/.bashrc、~/.zshrc)或從 ~/.ssh/ 讀取 SSH 金鑰。檔案系統隔離透過限制對明確允許路徑的存取來防止這種情況。
-
預設行為。工作區資料夾和沙箱執行階段暫存資料夾允許讀取存取權。預設會拒絕從您的主目錄 (
$HOME) 進行讀取,以保護 SSH 金鑰、shell 設定和憑證等敏感檔案。寫入存取權限僅限於目前的工作目錄及其子目錄。當提出需要額外權限的要求時,VS Code 會提示您允許在沙箱外部執行命令。
-
每個命令各自的讀取路徑。在命令執行之前,VS Code 會進行解析,並授予該命令所需的特定路徑讀取權限。這涵蓋了常見的開發人員工作流程,例如
git、node、npm、dotnet、Java 和 Rust。例如,執行node命令會自動允許從 Node 版本管理器目錄進行讀取,而執行git命令則允許從~/.gitconfig讀取。 -
可設定的規則。您可以授予其他路徑的讀取或寫入存取權,或是拒絕特定路徑的讀取或寫入存取權。拒絕規則永遠優先於允許規則。
-
繼承的限制。由沙箱化命令所衍生的所有子處理程序都會繼承相同的檔案系統邊界。這意味著像
npm、pip或建置指令碼這類的工具也會受到限制。
網路隔離
如果沒有網路隔離,遭到入侵的命令可能會外洩敏感資料,或對外部服務執行非預期的動作。網路隔離透過預設封鎖所有外送連線來防止這種情況。
沙箱啟用與不受限制的網路存取是獨立的控制項。當啟用沙箱且 chat.agent.sandbox.allowNetwork 此設定可由您的組織管理。請聯絡您的管理員進行變更。 為 off 時,除非您明確允許特定網域,否則所有外送網路存取都會遭到封鎖。當 chat.agent.sandbox.allowNetwork 此設定可由您的組織管理。請聯絡您的管理員進行變更。 為 on 時,命令可以自由存取外部服務,同時檔案系統限制仍然適用。在 macOS 和 Linux 上, chat.agent.sandbox.enabled 此設定可由您的組織管理。請聯絡您的管理員進行變更。 控制沙箱的啟用與否,並接受 off(預設)或 on。
VS Code 提供網路網域篩選功能,適用於代理程式工具(fetch 工具、整合式瀏覽器)以及沙箱化的終端機命令。啟用 chat.agent.networkFilter 此設定可由您的組織管理。請聯絡您的管理員進行變更。 以啟動網路篩選。使用 chat.agent.allowedNetworkDomains 此設定可由您的組織管理。請聯絡您的管理員進行變更。 與 chat.agent.deniedNetworkDomains 此設定可由您的組織管理。請聯絡您的管理員進行變更。 來控制代理程式可以存取哪些網域。了解如何設定網路存取。
-
透過網路存取重試。當沙箱化命令遭到網路限制封鎖時,代理程式會先要求確認是否在具有不受限制網路存取的沙箱內重試,然後才會退而求其次在沙箱外部執行命令。
-
網域允許清單。您可以明確允許存取特定的網域。
注意代理程式可以代表您在允許的網域上執行動作,而不只是讀取資料。例如,允許
api.github.com意謂著代理程式可以建立提取要求或修改儲存庫設定。允許雲端服務 API 網域可能會導致雲端資源遭到修改。僅在絕對必要時才設定此項設定。此設定是在某個設定項目中指定,且適用於所有代理程式工具與沙箱化命令,而不僅限於目前的工作。 -
繼承的限制。所有子處理程序都會繼承相同的網路限制,因此衍生子處理程序的指令碼或工具無法繞過網路規則。
作業系統層級強制執行
代理程式沙箱依賴作業系統層級的安全性基本元件來強制執行檔案系統和網路限制。由於強制執行是在核心層級進行的,因此沙箱化處理程序及其所有子處理程序都無法繞過這些邊界,即使命令經過精心設計試圖這麼做亦然。
| 平台 | 技術 | 先決條件 |
|---|---|---|
| macOS | 內建於作業系統中的 Apple 沙箱化框架(「Seatbelt」)。在核心層級強制執行細緻的檔案系統與網路限制。 | 無。開箱即用。 |
| Linux 與 WSL2 | 用於檔案系統隔離的 bubblewrap 以及用於網路代理的 socat。 |
安裝必要的套件:sudo apt-get install bubblewrap socat(Debian 與 Ubuntu)或 sudo dnf install bubblewrap socat(Fedora)。 |
不支援 WSL 1 版,因為 bubblewrap 需要只有在 WSL2 中才提供的 Linux 核心功能(使用者命名空間)。
沙箱未涵蓋的範圍
代理程式沙箱適用於 shell 子處理程序,包含來自 VS Code 代理程式工作階段與 Copilot CLI 代理程式主機工作階段的終端機命令。它不涵蓋內建的檔案工具。代理程式的讀取、編輯和寫入工具是直接使用 VS Code 的權限系統,而不是透過沙箱執行。
chat.agent.networkFilter 此設定可由您的組織管理。請聯絡您的管理員進行變更。 設定可獨立於沙箱之外,為 fetch 工具和整合式瀏覽器等代理程式工具提供網路網域篩選。當同時啟用沙箱與網路篩選時,網路規則將適用於所有代理程式工具與終端機命令。
如需完整的環境隔離,請將沙箱與開發容器搭配使用。開發容器會圍繞整個開發環境提供完整的邊界,包含所有工具、檔案存取和網路存取。
代理程式沙箱目前為預覽版,並持續演進以涵蓋更多工具與情境。
應注意的 AI 限制
不正確的輸出。模型可能會產生看起來正確但包含錯誤、使用已被取代之 API 或未處理邊界情況的程式碼。請務必測試 AI 生成的程式碼,特別是針對影響安全性、資料完整性或關鍵流程的邏輯。
提示詞隱碼攻擊。檔案、工具輸出或網頁中的惡意內容可能會企圖重新導向代理程式的行為。這就是為什麼 VS Code 包含工具核准閘道與信任邊界的原因。深入了解AI 安全性。
將 AI 生成的輸出視為初稿:作為起點很有用,但始終需要您的審查與判斷。若要深入了解模型運作方式(包括非決定性、知識邊界與內容限制),請參閱語言模型。