注意
云和本地沙盒 GitHub Copilot 位于 公开预览 且可能会更改。
Introduction
Copilot 云和本地沙盒是支持本地和云中安全沙盒体验 GitHub Copilot CLI的执行平台。 由于 Copilot 代表你执行更多操作(运行工具、执行命令和修改文件),沙盒提供安全采用代理工作流所需的隔离、可移植性和策略控制。
当前沙盒机制适用于 Copilot CLI 会话。 您还可以选择在 GitHub Copilot app 中开始新会话时使用云沙盒。 有关详细信息,请参阅“在 GitHub Copilot 应用中使用代理会话”。
通过沙盒机制,你可以选择 Copilot 在何处运行:
- 本地沙盒:在您自己的计算机上安全运行 Copilot。 运行的命令 Copilot 对文件系统、网络和系统功能具有受限的访问权限。 无需额外付费即可使用本地沙盒。
- 云沙盒:在由 Copilot CLI 托管的完全隔离的临时 Linux 环境中远程运行整个 GitHub 会话。 云沙盒是根据使用情况计费的。
本地沙盒机制
注意
本地沙盒机制目前是一项实验性功能。 若要使用它,请从Copilot CLI命令行选项开始‑‑experimental,或在会话期间输入/experimental on。
本地沙盒机制可让 Copilot 直接在您的设备上的沙盒环境中运行,且对文件系统、网络访问和系统功能的访问受到限制。
默认情况下,本地沙盒处于关闭状态。 在你启用它之前,由 Copilot 运行的 shell 命令会直接在你的计算机上执行,并且具有与你的用户账户相同的访问权限:它们可以在你有权限的任何位置读取、写入和删除内容,可以访问你的计算机所能访问的任何网络,并且可以不受限制地使用你的凭据。 启用本地沙盒可将这种访问限制在由你控制的策略范围内。
本地沙盒的工作原理
本地沙盒由 Microsoft eXecution Container (MXC)提供支持,这是一种跨平台技术,它提供每个操作系统上可用的隔离机制的通用接口。 Copilot CLI 声明它想要强制执行的沙盒策略(哪些路径是可读的还是可写的,是允许的网络访问,等等),MXC 使用适用于操作系统的相应隔离后端应用该策略。
隔离技术存在于一个范围中,从强隔离(例如完整虚拟机监控程序或容器)到较轻的隔离(例如 OS 级进程和文件系统包含)。 本地沙盒目前处于这一范围中较轻量的一端:它会限制进程可读取和写入的内容,以及可访问的网络资源,但不会在单独的虚拟机或容器中运行你的命令。 如果要评估此级别的隔离是否符合安全要求,请参阅 microsoft/mxc 存储库 以了解实现详细信息。
有关详细信息,请参阅“了解 GitHub Copilot CLI 中用于本地沙盒的文件系统策略”。
启用本地沙盒机制
若要在 Copilot CLI 会话中启用本地沙盒环境,请运行:
/sandbox enable
/sandbox enable
启用本地沙盒后,代理代表你运行的命令和工具(包括 Shell 命令、文件搜索,以及默认情况下由 CLI 启动的 MCP 服务器和语言服务器(LSP))都会在操作系统级的沙盒中运行,从而限制它们对你的系统的访问。 今后每次使用 CLI 时,CLI 都会继续使用本地沙盒机制——无论是以编程方式还是以交互方式使用——直到你运行 /sandbox disable 将其禁用。 如果企业托管设置要求启用沙盒,那么普通设置、启动选项和 /sandbox disable 都无法将其关闭。 如果生效的策略允许绕过沙盒,你仍然可以在当前处于活动状态的绕过权限提示中,显式禁用当前会话剩余时间内的沙盒机制。
CLI 的内置文件工具——即作为 CLI 组成部分的第一方命令,而不是像 sed 这样的 shell 命令——在 CLI 进程内运行。 由于 CLI 本身不是沙盒,因此操作系统沙盒永远不会看到这些工具执行的文件操作,并且无法约束它们。 相反,内置工具被设计为自行检查沙盒策略,并在尽力而为的基础上遵循您已配置的设置。
有关详细信息,请参阅“使用本地沙盒机制”。
配置本地沙盒
您可以使用默认的本地沙盒机制,也可以修改 Copilot 可访问的内容。 配置本地沙盒时,可以控制多个访问维度:
- 文件系统:授予对特定路径的只读或读/写访问权限,或拒绝路径。
- 网络:允许或阻止出站 Internet 访问和本地网络独立访问。
- 凭据:选择 Git 和 GitHub CLI (
gh) 凭据是否在沙盒中可用。 - 子进程:选择本地 MCP 服务器和语言服务器是否也在沙盒中运行。 远程 MCP 服务器永远不会沙盒化。
- 密钥链(macOS):选择是否可从沙盒内部访问系统密钥链。
- 每个命令例外:在需要更广泛的访问时,允许或阻止单个命令在沙盒外部运行。
有关详细信息,请参阅“配置本地沙盒设置”。
跨平台支持
本地沙盒适用于 macOS、Linux 和最近Windows 11版本。 每个操作系统使用不同的隔离后端,因此要求不同:
- macOS 使用 Seatbelt 作为后端。 Copilot CLI 将进程级的配置应用于沙盒中的每条命令。 使用 macOS 15 (Sequoia) 或更高版本。 Copilot CLI 不会阻止你在较旧版本的 macOS 上使用,但后端尚未在该系统上经过测试。
- Linux 使用 Bubblewrap 后端。 安装 bubblewrap 0.5.0 或更高版本,并确保
bwrap在你的PATH中。 如果/sandbox提示你的bwrap版本过旧,请升级该软件包。 - Windows使用 ProcessContainer 后端的 BaseContainer 层。 Copilot CLI 不使用 AppContainer 回退层。 如果你的 Windows 构建版本不提供 BaseContainer,Copilot CLI 会报告不支持沙盒化。 若要查找受支持的Windows版本,请参阅Windows操作系统对Copilot沙盒的支持。
代理支持
沙盒代理在每个操作系统上以不同的方式运行:
-
macOS: Copilot CLI 不向 Seatbelt 提供代理。 它改为在沙盒环境中设置
HTTP_PROXY、HTTPS_PROXY和ALL_PROXY。 只有遵守这些变量的程序才使用代理。 忽略它们的程序会直接连接。 -
Linux:bubblewrap 强制使用代理。 沙盒获得一个私有网络命名空间,且仅允许访问代理端点。 此模式具有更多要求。 您必须具备:
- 你的
PATH上的slirp4netns。 - 来自 util-linux 2.35 或更高版本、支持
--map-current-user和--keep-caps的unshare和nsenter。 iptables和ip6tables。 使用nf_tables后端。 旧版后端也可运行,但前提是你可以写入/run/xtables.lock。
Linux 上还有两个限制。 代理必须具有 IPv4 地址,因为 Copilot CLI 拒绝只有 IPv6 才能访问的代理。 代理 URL 不得包含凭据,因此为代理本身提供凭据。
在 Linux 上也是如此,bubblewrap 无法独立于出站访问来控制对本地网络的访问。 因此,您的本地网络设置在该情况下不会单独产生影响。
- 你的
-
Windows:代理不可用。 请勿在Windows上使用被拒绝的路径。 Copilot CLI 无法强制实施这些设置,沙盒命令失败并出现错误。
如果主机不支持本地沙盒
Copilot CLI 会为当前会话关闭沙盒并显示通知。 Shell 命令和沙盒服务随后将在无沙盒环境下运行,并且你的 sandbox.enabled 设置也不会改变。 如果您的企业通过设备管理设置强制启用沙盒机制,则会话将以故障关闭的方式失败:沙盒中的命令将不会运行。
企业策略强制实施
企业可以通过服务器托管、MDM 托管或基于文件的托管设置来要求本地沙盒并强制实施其配置。 请参阅“企业管理设置入门”。
云端沙箱
云沙盒让您能够在由 Copilot CLI 托管的完全隔离的临时 Linux 环境中运行 GitHub 会话。 每个云沙盒会话都独立于本地环境和其他会话。
云沙盒基于Azure 容器应用沙盒构建,GitHub提供标识、策略和计费层。
注意
如果你是通过某个组织获得 Copilot,则能否访问云沙盒取决于是否已在组织或企业设置中启用该功能;该功能默认处于禁用状态。 有关详细信息,请参阅“为组织或企业启用或禁用云沙盒”。
启动云沙盒会话
若要启动云支持的会话,请运行以下命令:
copilot ‑‑cloud ‑‑experimental
copilot ‑‑cloud ‑‑experimental
注意
云沙盒目前是一项实验性功能。 若要使用它,必须启用 Copilot CLI试验性功能,例如,在启动 CLI 会话时使用 ‑‑experimental 命令行选项,如上所示。
‑‑cloud命令行选项在云沙盒中启动交互式Copilot CLI会话。 你可以提示 Copilot 执行任务、运行 shell 命令并迭代修改代码,就像在本地会话中一样。
Copilot 运行的命令是在云环境中执行的,而不是在本地计算机上执行。
运行 copilot ‑‑cloud 时,将在云沙盒中启动单个 Copilot CLI 会话。 不会影响未来的 Copilot 会话。 每次要在云沙盒中运行新会话时,都必须使用 ‑‑cloud 此选项启动 CLI。
注意
云沙盒仅适用于交互式 Copilot CLI 会话。 无法在云沙盒中以编程方式运行 CLI 程序——也就是说,不能将 ‑‑cloud 选项与 -p 或 -i 选项结合使用。
跨设备继续会话
由于云沙盒会话在由 GitHub 托管的基础结构中运行,因此无论会话最初是在哪台设备上启动的,都可以在任何设备上继续使用 Copilot 会话。 这使工作流更加灵活,无需复制文件或重新安装依赖项。
卸载计算密集型工作流
可以在云中并行运行多个 Copilot 任务,而无需使用本地资源。 这样既能让本地环境保持轻量和响应迅速,又能扩展由代理驱动的工作负载。
统一治理
云沙盒策略与Copilot cloud agent策略共享相同的配置,无需额外设置即可将现有安全控制扩展到在云沙盒中执行。
会话生命周期
云沙盒会话有三个主要状态:
- 活动状态:会话正在运行,你正通过 Copilot CLI 与其交互。
- 已停止:会话当前未运行,但其状态已保存。 恢复时,将还原文件、环境变量和正在进行的工作。
- 已删除:会话及其保存状态已删除,无法恢复。
停止会话时,云沙盒会创建当前状态的快照,以便您稍后可以从中断处继续。 删除会话时,将同时删除正在运行的环境和快照。
身份验证和访问
沙盒环境使用您现有的 Copilot CLI 身份验证机制。 如果你可以登录到Copilot CLI并有权访问Copilot,则可以使用沙盒功能。 无需配置单独的云提供商、管理 API 密钥或设置基础结构。
组织或企业所有者必须在组织或企业设置中启用 云沙盒访问 策略,然后成员才能使用云沙盒。
有关为组织成员启用或禁用云沙盒的信息,请参阅 为组织或企业启用或禁用云沙盒。
Billing
标准 GitHub Copilot 席位中包含本地沙盒机制,无需额外付费。
云沙盒是根据使用情况计费的。 GitHub 通过三项计量指标来衡量云沙盒使用情况:
| Meter | Description | 单位 | 价格(USD) |
|---|---|---|---|
| 计算 | 云沙盒会话的运行时间。 | 计算秒数 | $0.000024 |
| Memory | 云沙盒会话运行期间分配的内存。 | GiB 秒 | $0.0000003 |
| 存储 | 已停止会话的快照存储。 | GiB/月 | 0.005 美元 |
有关如何测量和计费云沙盒使用情况的详细信息,请参阅 云和本地沙盒的计费 GitHub Copilot。