信任與安全

人工智慧生成的輸出需要審閱。Visual Studio Code 包含多種機制,可讓您掌握哪些變更會進入您的程式碼庫。本文將解釋您應了解的控制機制、人工智慧限制和安全考量。

掌握控制權

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

  • 套用前先審閱編輯。 代理程式會在差異檢視中顯示檔案變更。您可以在儲存前審閱每個變更、接受或拒絕個別編輯,並修改程式碼。深入了解審閱程式碼編輯

  • 使用檢查點來還原。 代理程式工作階段會在工作進行時建立檢查點。如果代理程式出錯,您可以返回先前的檢查點並嘗試不同的方法。深入了解檢查點

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

  • 選擇權限等級。 控制代理程式的自主程度:**預設核准 (Default Approvals)** 要求敏感工具的確認,**繞過核准 (Bypass Approvals)** 自動核准所有工具呼叫,而 **自動駕駛 (Autopilot)** (預覽) 也會自動回應問題並自主繼續。對於較高的自主程度,請搭配代理程式沙箱或容器使用。

  • 信任邊界。 VS Code 對檔案存取、URL 存取、代理程式沙箱和 MCP 伺服器互動實施安全邊界。深入了解人工智慧安全

在提交之前,務必審閱人工智慧生成的程式碼。驗證它是否處理邊緣案例、遵循您的專案慣例,並且沒有引入安全問題。

代理程式沙箱

注意

代理程式沙箱目前為預覽功能,未來可能會有進一步的發展。

代理程式沙箱利用作業系統層級的隔離來限制代理程式在您的機器上可以存取的內容。沙箱不再僅僅依賴每次操作前的核准提示,而是為檔案系統和網路存取定義了由作業系統本身強制執行的嚴格邊界。

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

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

沙箱為何重要

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

  • 核准疲勞。 反覆核准指令可能會讓您對核准的內容注意力下降,尤其是在長時間的代理程式工作階段中。

  • 剖析限制。 自動核准規則使用盡力而為的指令剖析,這有已知的限制。Shell 別名、引號串接和複雜的 Shell 語法可能會繞過規則並未被偵測到。

  • 提示注入。 檔案、工具輸出或網頁中的惡意內容可能會嘗試誘騙代理程式執行有害指令。如果您未經仔細審閱就核准,可能會導致意外動作和安全風險。

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

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

沙箱運作原理

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

檔案系統隔離

如果沒有檔案系統隔離,受損的指令可能會修改您機器上的任何檔案,例如,將惡意程式碼注入您的 shell 設定 (~/.bashrc, ~/.zshrc) 或從 ~/.ssh/ 讀取 SSH 金鑰。檔案系統隔離透過限制對明確允許路徑的存取來防止這種情況發生。

  • 預設行為。 讀取存取權在整個檔案系統中都是允許的。寫入存取權限僅限於目前工作目錄及其子目錄。當發出需要額外權限的請求時,VS Code 會提示您允許在沙箱外部執行指令。

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

  • 可設定規則。 您可以授予對其他路徑的寫入存取權限,或拒絕對特定路徑的讀取或寫入存取權限。拒絕規則始終優先於允許規則。

  • 繼承限制。 由沙箱化指令產生的所有子程序都會繼承相同的檔案系統邊界。這表示 npmpip 或建置腳本等工具也會受到限制。

網路隔離

如果沒有網路隔離,受損的指令可能會洩露敏感資料或對外部服務執行意外動作。網路隔離預設會阻擋所有對外連線來防止這種情況發生。

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

    注意

    代理程式可以代表您在允許的網域上執行動作,而不僅僅是讀取資料。例如,允許 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 核心功能 (使用者命名空間)。

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

沙箱未涵蓋的範圍

代理程式沙箱僅適用於 shell 子程序 (終端機指令)。它不涵蓋內建的檔案工具。代理程式的讀取、編輯和寫入工具直接使用 VS Code 的權限系統,而不是透過沙箱執行。網路擷取工具也在沙箱外部執行,不受沙箱網路限制的約束。

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

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

代理程式沙箱目前為預覽功能,並持續發展以涵蓋更多工具和情境。

需留意的人工智慧限制

不正確的輸出。 模型可能會產生看起來正確但包含錯誤、使用已淘汰 API 或未處理邊緣案例的程式碼。務必測試人工智慧生成的程式碼,尤其是影響安全性、資料完整性或關鍵流程的邏輯。

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

將人工智慧生成的輸出視為初稿:作為起點很有用,但始終需要您的審閱和判斷。有關模型運作方式的更多資訊,包括非決定性、知識邊界和上下文限制,請參閱語言模型

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