AI Agent 沙箱怎么验收?测试文件、网络、命令与凭据隔离
为 Agent 执行环境设计允许与拒绝探针,逐项验收挂载、网络出口、命令与资源限制、服务身份和持证适配器。
所属问题主题Agent 安全↗先带着一个真实任务阅读,再完成页面中的工作台。能让另一位同事复核你的产物,才算完成本课。
一名助手获准运行用户上传的脚本,只处理一份样例文件。Prompt 说了“只在任务目录工作”,执行进程却继承了用户主目录挂载和云端密钥。模型按要求回答,不能修好这条执行边界。放开任务前,团队需要证明:预期操作能完成,越界的读取、外联、进程和凭据操作会被实际环境挡住。
Agent 权限阶梯回答某个动作是否获准;工具调用契约规定后端接到动作时核对哪些条件。本页检验另一层:即使模型或上传的代码偏离要求,运行器到底能接触、修改和耗尽哪些资源,以及它怎样接触持有凭据的适配器。
先画执行边界,再选容器参数
记录不可信入口、镜像或运行时的准确版本、执行身份、所在主机或集群,以及必须隔开的资产。至少区分三块:模型提议与任务材料;处理这些材料的短时运行器;持有外部系统凭据的服务适配器。适配器应处在运行器的文件系统和进程环境之外。Prompt 中的禁令、界面上隐藏的字段,或进程本来就能读取的环境变量,都不是沙箱。
每个入口都写一项允许操作和一项禁止操作。例如,允许读取 /task/input/example.csv,但必须拒绝读取另一租户目录里的合成标记文件。成功跑完任务只能证明功能可用;越界探针被拒、保护对象保持原状,才说明这条边界生效。试验使用合成文件和测试账号,不拿真实用户秘密做探针。
| 边界 | 要核对的配置 | 要观察的拒绝结果 |
|---|---|---|
| 文件 | 具体挂载、只读输入、有限的可写输出、根文件系统、挂入的 Socket | 受控读取探针在宿主收集的轨迹中报告 open 被拒,且没有输出合成标记值;另一个写入探针使宿主侧校验值保持不变。 |
| 网络 | 网络模式或集群策略、DNS、出口及本地 Socket | 禁止目标没有收到请求,单独允许的路径仍能完成。 |
| 命令与资源 | 入口命令、可调用工具、镜像内程序、用户与 capabilities、CPU、内存、进程数和截止时间 | 受控超限任务被终止,不能启动宿主操作或拖垮邻近任务。 |
| 凭据 | 环境、Secret 挂载、服务身份令牌、元数据访问、适配器通道 | 运行器读不到合成凭据标记,也不能拿凭据直连外部系统。 |
Docker bind mount 若未显式设为只读,可能允许写入宿主路径;挂入宿主 Socket 还可能开出额外控制通道。根文件系统只读也不代表另一个挂载卷只读。应查看启动后实际生效的挂载,而非只看配置模板。还要核对是否开启 --privileged、额外添加了哪些 Linux capabilities,以及实际采用默认还是自定义 seccomp 配置。Docker 官方说明,privileged 模式会开放广泛的设备和权限,并关闭默认安全限制;capabilities 或 seccomp 的选择也不能替代文件挂载和网络控制。给 CPU、内存、进程数量和运行时间设上限,再在一次性测试环境里做有边界的超限试验。在 Kubernetes 中,资源 request 影响调度,limit 才限制运行时用量;须核对该 Pod 实际设置的上限。编排层的命令允许清单能限制 Agent 要求启动什么,但已在运行器内执行的上传代码仍可自行调用系统接口;文件、网络、身份和资源控制必须在更低一层生效。
在实际运行环境中证明网络拒绝
不需要联网的 Docker 运行器可以使用 --network none。官方文档说明它只建立 loopback 的独立网络栈;这并不自动关闭所有可能的数据通道。还应查看挂载与 Socket。先从允许访问的对照环境确认合成测试端点正常、日志能记录请求;再从沙箱请求它,核对运行器报错和目标端没有新增访问记录。若任务只需访问一个服务,则通过受控路径放行它,并另测一个禁止目标。
在 Kubernetes 中,NetworkPolicy 只有在网络插件支持并执行策略时才生效。选择器、出入方向和允许对象必须匹配正在运行的 Pod;只限制入站的策略不会封住出站。保存了一份策略,或 DNS 查询失败,都不能单独证明出口被封。等策略生效后从实际 Pod 运行允许与拒绝探针,再核对目标服务日志。网络插件、命名空间、标签或策略变化后要重测。即使网络限制正确,运行器内已有的强权限凭据或 Socket 仍可能形成别的通路。
把凭据留给适配器,并测试交接
沙箱应拿到任务材料和操作提议,不应拿到可直接更新目标系统的密钥。编排服务可把结构化提议交给独立适配器。适配器从可信应用上下文绑定用户和租户,检查目标、字段、批准范围与记录版本,再用自己的凭据执行窄范围调用。运行器也不能无限制地直连适配器;否则伪造参数仍可能变成写入。分别试一条有效提议,以及篡改目标或动作的提议,并在目标系统核对真实变化。
Kubernetes 未显式指定时通常给 Pod 分配默认 ServiceAccount,并默认自动挂入其令牌。记录实际分配的 ServiceAccount;运行器不需要 Kubernetes API 时,设置 automountServiceAccountToken: false,并检查其他 Secret 挂载或注入凭据。这个设置只停止自动挂载令牌,不会删除 Pod 的身份或已有 RBAC 授权。把令牌从 Prompt 中删掉,或在日志里隐藏环境变量,并不能阻止已拿到令牌的进程读取它。用合成标记证明运行器看不到凭据;本站会在浏览器保存工作表草稿,不要填写真实密钥。
同时保留成功样例与拒绝样例
工作表每行记录脱敏案例编号、确切运行版本、尝试的操作、预计阻断层、观察到的错误,以及沙箱之外的佐证。读取探针应由团队控制:若读到合成标记,它会把成功信号送到宿主收集的轨迹;通过条件是看见被拒的 open 错误或宿主审计事件,并且没有成功信号。校验值未变只能证明写入没有发生,不能证明读取被拒。网络拒绝要核对目标端无请求;经适配器写入的拒绝要查询目标应用的审计或状态;资源上限要证明任务终止且邻近任务正常。如果正常任务也失败,单独一条“权限不足”报错不算通过。
越界探针成功、正常任务被挡、无法证实策略作用于这次运行,或拿不到外部状态证据,都应判为不通过。修复挂载、网络策略、身份、适配器或资源配置后,两类样例都要重跑。结果需绑定镜像摘要、启动参数、节点或插件、适配器版本和凭据路径,才知道哪些变更会触发复测。
案例一:用户上传代码处理样例文件
一家虚构的数据服务允许顾客上传 Python 代码,转换一份虚构 CSV。合格运行读取只读的 /task/input/sample.csv,在容量与时间限制内写出 /task/output/result.csv;不需要外网或云端凭据。团队使用一次性运行器,只挂入该任务路径和单独的可写产物区,设置资源上限,不注入凭据。Docker 试验采用 --network none,同时继续检查是否挂入了 Socket 和多余目录。
团队编写的负向脚本尝试读取另一租户的合成标记、改写输入 CSV、访问测试端点,并超过较小的进程数或时间上限。若读到标记,脚本会向宿主收集的轨迹输出合成成功信号。复核者要看到读取被拒且没有成功信号;另看输入 CSV 的校验值未变、目标端没有请求、任务按既定上限停止。普通转换仍应产出有效 CSV。只要标记可读或目标端收到请求,团队就暂停上传功能并修复环境。让 Prompt 说“忽略额外路径”无法改变这个结果。
案例二:馆藏助手写入展品说明草稿
一家虚构博物馆的助手依据获批的馆藏元数据快照准备展签草稿。运行器能读取快照、提交提议,但不持有馆藏管理系统凭据,也不能直连该系统。独立适配器只接收合格馆藏编号、草稿字段、策展人已批准的范围和匹配的记录版本。适配器身份可以创建草稿;这条路径不能发布成品。
团队先用合成记录创建有效草稿,在馆藏系统确认新增的是未发布状态;再把编号改成另一馆藏、把动作改成发布,并从运行器尝试直接请求。适配器必须拒绝两种篡改提议,网络路径和令牌探针必须挡住直连;馆藏系统审计中不能出现越权写入。如果运行器能读到适配器的令牌,或能绕开适配器接触写入接口,即使普通演示成功,草稿功能仍不得开放。
不适用边界
这张表验收一项具名任务、一个确切运行版本的执行环境及凭据路径。它不能证明单靠容器就能抵挡所有恶意代码或宿主内核攻击;需要更强隔离时应按威胁模型另选方案。动作批准、工具语义、第三方服务准入与下游资料使用权仍各有自己的复核。挂载、镜像、运行时、网络插件、Pod 标签、服务身份、适配器或任务范围变化后,都应重做试验。
核验来源
这篇内容参考了哪些一手资料?
来源用于核对定义、风险边界或操作事实;判断框架和工作台由 AI Vista 独立编写。
- Docker Docs — None network driver核验于 2026-10-01
- Docker Docs — Bind mounts核验于 2026-10-01
- Docker Docs — Limit a container's access to resources核验于 2026-10-01
- Docker Docs — Seccomp security profiles核验于 2026-10-01
- Docker Docs — Docker Engine security核验于 2026-10-01
- Docker Docs — docker run privileged option核验于 2026-10-01
- Docker Docs — docker run read-only option核验于 2026-10-01
- Kubernetes — Network Policies核验于 2026-10-01
- Kubernetes — Service Accounts核验于 2026-10-01
- Kubernetes — Configure Service Accounts for Pods核验于 2026-10-01
- Kubernetes — Resource Management for Pods and Containers核验于 2026-10-01
AI 工具可能协助研究、提纲和语言编辑;事实、案例和最终措辞由编辑复核。发现错误请通过联系页提交更正。
可带走的工具
Agent 沙箱边界试验表
让正常任务跑通,并用拒绝探针证明文件、网络、进程与凭据边界生效。
此工作台会在当前浏览器自动保存草稿。只写合成路径与账号、脱敏结果和受控证据位置;不要填写真实密钥、ServiceAccount 令牌、内部端点、客户文件内容或原始 stdout。
- 01写任务摘要用脱敏摘要写明要交付的结果。
- 02补齐判断字段写清输入类别、风险、证据位置和接手方式。
- 03交给同事复核对方能复述结论,工具才算完成。
本课已读
完成工作台,再标记已读。
已读状态会更新课程目录与学习进度。
- 01字段齐全
- 02案例走过
- 03可以复核
文章实践笔记
读到这里,留下一条可复核的判断。
下方虚构示例展示写法;你的笔记只保存在当前浏览器。记录哪一步有效、哪个边界不成立,或一个值得测试的问题。
这篇文章还没有示例或本机笔记。你可以记录第一条具体观察。