信任与安全

AI 生成的输出需要人工审核。Visual Studio Code 包含多种机制,让您能够掌控哪些变更进入您的代码库。本文将介绍您应了解的控制机制、AI 局限性及安全注意事项。

保持掌控

智能体(Agents)可以读取文件、编辑代码、运行终端命令并调用外部服务。VS Code 提供了多种机制,确保您始终掌握工作区内发生的一切。

  • 应用前审核编辑内容。智能体会在差异视图(diff view)中显示文件变更。您可以在保存前审核每一项变更、接受或拒绝个别编辑,并修改代码。了解更多关于审核代码编辑的信息。

  • 使用检查点进行回滚。智能体对话会在工作进展过程中创建检查点。如果智能体执行出现了偏差,可以返回到先前的检查点并尝试不同的方法。了解更多关于检查点的信息。

  • 批准工具调用。在运行终端命令或使用具有副作用的工具之前,VS Code 会请求您的批准。您可以控制哪些工具可以自动运行,哪些需要确认。使用 Chat: Manage Tool Approval 命令可集中管理所有工具的批准

  • 选择权限级别。控制智能体的自主程度:默认批准(Default Approvals)要求对敏感工具进行确认;绕过批准(Bypass Approvals)自动批准所有工具调用;自动驾驶(Autopilot,预览版)则可以自动回答问题并持续自主运行。对于更高程度的自主权,建议配合智能体沙盒或容器使用。

  • 信任边界。VS Code 在文件访问、URL 访问、智能体沙盒和 MCP 服务器交互周围强制执行安全边界。了解更多关于 AI 安全的信息。

在提交代码前,请务必审核 AI 生成的代码。验证其是否处理了边缘情况、是否遵循了您项目的约定,并且没有引入安全问题。

智能体沙盒(Agent sandboxing)

注意

智能体沙盒目前处于预览阶段,未来可能会进一步演进。

智能体沙盒利用操作系统级的隔离来限制智能体在您机器上的访问权限。沙盒不再仅仅依赖每次操作前的批准提示,而是由操作系统强制执行严格的文件系统和网络访问边界。

VS Code 目前将沙盒应用于智能体会话期间执行的终端命令(runInTerminal 智能体工具)。了解如何配置智能体沙盒

启用沙盒后,由于命令和工具调用已在受控环境中运行,VS Code 会自动批准它们,而无需确认提示。

为什么沙盒很重要

基于批准的安全机制要求您在每个终端命令或工具调用运行前进行确认。虽然这提供了控制,但在实际应用中存在局限性:

  • 批准疲劳。重复批准命令可能会导致您对批准的内容关注度下降,尤其是在长时间的智能体会话中。

  • 解析局限性。自动批准规则使用尽力而为(best-effort)的命令解析,这存在已知限制。Shell 别名、引号连接和复杂的 Shell 语法可能会绕过规则并逃过检测。

  • 提示词注入(Prompt injection)。文件、工具输出或网页中的恶意内容可能试图诱导智能体执行有害命令。如果您未经仔细审核就予以批准,可能会导致意外操作和安全风险。

  • 对外部服务的意外操作。即使没有恶意,具有网络访问权限的智能体也可能代表您执行难以撤销的操作。例如,智能体可能会预置云资源、修改基础设施设置、向远程仓库推送代码,或调用触发部署或财务交易的 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 苹果的沙盒框架("Seatbelt",内置于操作系统中)。在内核级别强制执行细粒度的文件系统和网络限制。 无。开箱即用。
Linux 和 WSL2 用于文件系统隔离的 bubblewrap 以及用于网络代理的 socat 安装所需软件包:sudo apt-get install bubblewrap socat (Debian 和 Ubuntu) 或 sudo dnf install bubblewrap socat (Fedora)。

WSL 版本 1 不受支持,因为 bubblewrap 需要仅在 WSL2 中提供的 Linux 内核特性(用户命名空间)。

![!NOTE] Windows 上的智能体沙盒支持目前使用 WSL2 作为底层平台。

沙盒未覆盖的范围

智能体沙盒仅适用于 Shell 子进程(终端命令)。它不覆盖内置的文件工具。智能体的读取、编辑和写入工具直接使用 VS Code 的权限系统,而不是通过沙盒运行。Web 获取工具(web fetch tool)也在沙盒外运行,不受沙盒网络限制的约束。

使用审核流程敏感文件保护来控制这些操作。

如需完整的环境隔离,请将沙盒与开发容器(dev container)配合使用。开发容器为整个开发环境提供了一个完整的边界,包括所有工具、文件访问和网络访问。

智能体沙盒目前处于预览阶段,并将持续演进以覆盖更多的工具和场景。

需要注意的 AI 局限性

错误的输出。模型生成的代码看起来可能是正确的,但可能包含 Bug、使用已弃用的 API 或无法处理边缘情况。请务必测试 AI 生成的代码,特别是涉及影响安全、数据完整性或关键流程的逻辑时。

提示词注入。文件、工具输出或网页中的恶意内容可能试图重定向智能体的行为。这就是为什么 VS Code 包含工具批准门控和信任边界的原因。了解更多关于 AI 安全的信息。

将 AI 生成的输出视为草稿:它是一个有用的起点,但始终需要您的审核和判断。有关模型如何工作(包括非确定性、知识边界和上下文限制)的更多信息,请参阅语言模型

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