可组合不等于可信:安全、凭据、沙箱与长期运维
学完你会:能识别插件宿主、工具沙箱、凭据、遥测、供应链和升级回滚之间的真实边界。
共享可升级的 Foundation,不强迫所有客户共享数据、Runtime 与凭据。
企业安全不是一个 sandbox 标签,而是从 artifact 到权限、执行、证据、升级和恢复的一条闭环。
宿主插件与 Agent 工具不是同一个信任域
工具子进程受到沙箱约束,不代表加载进 Node 宿主的插件也受到相同限制。
DeepSeek Harness 定义 read-only、workspace-write 和 danger-full-access 等工具模式,并在不同操作系统使用相应后端。但这些机制主要约束 Agent 发起的工具执行。Cordis 宿主插件、MCP executable 和 npm install script 位于另一条权限路径。
node:vm 也不是安全边界。同一进程代码通常共享用户权限、内存和大量宿主能力。企业 UI 如果只显示“sandbox enabled”,却不说明覆盖的是文件系统、网络、进程、设备还是凭据,会造成错误安全感。
正确的 EnforcementReceipt 至少需要 completeness(full/partial/unknown)、covered effect classes、uncovered classes、后端身份、健康时间和策略 digest。unknown 不能被渲染成绿色。
凭据的最小暴露链
保存成 0600 文件只是起点;同 UID 代码仍可能读取它。
好的设计会传递 credential reference,在真正调用 Provider 的 operation boundary 才解析值;子进程环境使用 allowlist,而不是继承父进程全部变量;日志、headers、events、telemetry 和 Artifact metadata 同时进行值级泄露扫描。
即便文件权限是 0600,同一用户运行的插件或工具仍可能读取。Keychain、外部 secret manager、短期 token、按任务作用域注入和出站域名限制可以进一步降低风险。最关键的是不让扩展自行决定需要哪些 secret。
历史凭据事故还提醒我们:current tree 扫描通过不等于完整 Git 历史安全。公开发行、客户导出与私有开发是不同 Gate;轮换/吊销也不能被 clean export 或 history rewrite 代替。
供应链:入口 digest 远远不够
真正运行的是依赖闭包、配置与平台环境共同决定的一组 bytes。
一个 npm 包的版本和 SRI 只能固定入口 tarball。若 package.json 使用 caret 依赖,安装时仍可能解析出不同闭包;install scripts、原生模块和平台差异进一步扩大不确定性。
企业 Runtime identity 应包含入口 artifact、lockfile、dependency closure digest、config digest、model capability digest、平台和 sandbox receipt。升级前先比较 capability、permission 和 data migration 差异,再在隔离环境验证,最后分波次发布。
回滚也不是重新安装旧版本这么简单。必须保存 previous-good closure、兼容配置、数据迁移方向与验证证据;不可逆数据迁移或外部动作需要单独恢复方案。
长期运维:让系统可以被人接住
可观测性不是日志越多越好,而是能从故障走到明确的下一步。
插件状态、Runtime event、业务 Attention 和审计证据不应混在一条噪声流里。普通 fiber change 和 tool event 进入 Activity;只有 review、decision、recovery、external_wait 等需要人行动的事项进入 Attention。
Telemetry 默认关闭是合理起点,因为 raw prompt、tool result 和 workspace path 可能含敏感信息。若开启,必须有数据分类、redaction、保留时间、租户边界和管理员知情。
最终目标不是“系统永不失败”,而是失败时知道影响范围、事实终态、负责的人和恢复动作。企业用户会为这种可接管性付费。
你真正要带走的,不只是技术解释
切换身份,看看这项技术会怎样改变战略、产品、工程和长期运营。
企业客户购买的是可控风险和可接管性,不只是更丰富的 Agent 能力。
四张可以带走的卡片
工具沙箱不覆盖宿主插件
0600 不等于 secret 安全
运行身份需要完整闭包
可接管性是企业产品核心价值
看到 UI 显示 sandbox=enabled,下一步最重要的问题是什么?
把理解变成自己的语言
试着写下:这项机制能解决什么、不能解决什么,以及它会怎样影响你的产品判断。内容只保存在当前浏览器。
原文与源码放在最后,不打断学习
正文已经完成中文梳理。只有当你想核验作者原话、查看完整公式或进入代码时,才需要离开本站。