主题
沙箱访问权限
控制 workspace 中谁可以在沙箱创建后与其交互。
每个沙箱都有一个记录的创建者,即使用其 API key 或会话创建该沙箱的 workspace 成员。默认情况下,只有创建者可以在该沙箱上运行命令、读取或写入文件、打开隧道或访问服务 URL。其他 workspace 成员需要 sandboxes:exec 权限才能与他们未创建的沙箱交互。除了创建沙箱所在的 workspace 之外,其他 workspace 永远无法访问该沙箱。
谁可以做什么
| 调用方 | 默认 | 具有 sandboxes:exec |
|---|---|---|
| 沙箱创建者 | ✅ 所有运行时操作 | ✅ 所有运行时操作 |
| 其他 workspace 成员 | ❌ 拒绝 | ✅ 所有运行时操作 |
| 不同 workspace | ❌ 隐藏(视为未找到) | ❌ 隐藏(视为未找到) |
“运行时操作”涵盖创建后与运行中沙箱交互的四种方式:
- 执行命令(
langsmith sandbox exec、SandboxClient.exec) - 文件操作(读取、写入、列出沙箱内的路径)
- 将 TCP 端口隧道回你的机器(
langsmith sandbox tunnel) - 通过服务 URL 代理请求
生命周期操作——创建、列出、更新、删除沙箱——继续使用现有的 sandboxes:create / sandboxes:read / sandboxes:update / sandboxes:delete 权限。这些权限保持不变。
被拒绝的请求
当请求被拒绝时,沙箱会返回 HTTP 403,其响应体会指出触发的规则:
json
{
"detail": {
"error": "Forbidden",
"message": "sandbox access denied: not the creator and missing sandboxes:exec"
}
}1
2
3
4
5
6
2
3
4
5
6
对存在于另一个 workspace 中的沙箱的请求会返回 404 Not Found 而不是 403,因此响应不会泄露该沙箱是否存在于其他地方。
共享沙箱
有两种方式可以让队友使用你拥有的沙箱:
- 将
sandboxes:exec授予自定义角色,并在 workspace 中分配该角色。拥有该角色的任何人都可以与 workspace 中的每个沙箱交互。 - 对于在沙箱内运行的 HTTP 服务,使用服务 URL。服务 URL 使用自己的访问 token,且不要求接收者是 workspace 成员。
对于临时协作,服务 URL 方式通常更简单;当队友需要广泛访问以操作他们未创建的沙箱时,再使用 sandboxes:exec。