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