vm0安全实践清单:细粒度权限、隔离执行与可审计性的落地细节

发布时间:2026/9/21 15:20:03
vm0安全实践清单:细粒度权限、隔离执行与可审计性的落地细节 vm0安全实践清单细粒度权限、隔离执行与可审计性的落地细节【免费下载链接】okouOkou connects to the tools your team already uses and does the work — across marketing, sales, engineering, and operations, under your control.项目地址: https://gitcode.com/GitHub_Trending/vm/okouOkouvm0是一个连接团队现有工具、代为执行工作的 AI Agent 平台。当 AI Agent 真的拥有动手能力时细粒度权限、隔离执行、可审计性这三根支柱就决定了你能不能放心把任务交给它。本文用仓库里的真实设计文档和源码带你逐项看 Okou 是如何把这三件事落地的。 一分钟速览三大安全支柱支柱解决什么问题核心落点 细粒度权限凭据不经过不可信通道授权最小化SSH/VNC 权限 API、显式 grant、零化密钥️ 隔离执行一次任务 一个独立微虚拟机 资源围栏Firecracker 沙箱、四类进程、cgroup 策略 可审计性每个关键决策都可回放、可追溯只追加决策日志、事件溯源一句话概括凭据不下放、任务不放行、操作可回放。一、细粒度权限最小授权从请求侧落地很多 Agent 产品的安全隐患在于把钥匙交给 Agent 自己保管。Okou 的做法是凭据只在服务端与受信任的 Runner 之间走私有通道Agent 侧永远拿不到。1.1 SSH 权限调用方说了不算根据 docs/runner-ssh-authority.mdSSH 凭证解析接口有几个值得借鉴的细节调用方只能提供身份不能提供内容请求只能携带runnerId和heartbeatGeneration来标识是哪个 Runner 进程无法自行指定属主、Agent、主机、凭据或命令——全部由服务端联合 Run、会话、用户授权grant和连接记录解析出来。多重身份必须全部吻合Run、会话、SSH grant 与主机身份不一致就直接失败共享 Agent 永远不能使用其创建者的主机。失败返回不泄露信息缺失、隐藏、已撤销的引用统一返回不透明的unavailable结果且在解密之前就拒绝。响应即焚解析出的私钥响应标记Cache-Control: no-store且明确规定它永远不能出现在 guest RPC 输出、快照、检查点、日志或审计元数据中。撤销即时生效每次重新解析都会重查当前授权状态凭据轮换、删除、撤销后下一次调用立即失效。1.2 VNC 权限默认关闭 显式授权远程桌面是更高危的能力。在 docs/runner-vnc-authority.md 中VNC 访问默认禁用包括内部员工必须由属主通过GET/PUT /api/agents/:agentId/vnc-access显式开启授权按(orgId, userId, agentId)三元组建键重复开启幂等撤销即删行、重新授权不留历史副本Agent 令牌只有在功能开启后才获得vnc:read/vnc:write能力且能力不能替代当前有效的授权记录主机清单接口只返回 id、显示名、host、port 等元数据绝不含凭据解析出的密钥使用零化类型SecretText源码中刻意不实现Debug/Clone/Serialize从类型层面防止密钥被误打印、误复制、误序列化。️ 从产品界面也能看到这套权限体系Agent 的Authorization / Instructions页签把授权与运行指令分开管理。相关文档付费工具管控见 docs/paid-tool-controls.md。二、隔离执行每个任务跑在独立的微虚拟机里2.1 Firecracker 沙箱任务的物理边界每个 Run 的执行发生在由 Firecracker 微虚拟机承载的沙箱中实现在 crates/sandbox-firecracker/启动配置、内存气球、网络、CoW 镜像池与快照等模块一应俱全。每次任务一个干净微虚机意味着用户可影响的代码跑在独立内核边界内而不是和宿主机共享进程空间。2.2 四类进程四种信任级别docs/runner-guest-process-lifecycle.md 把 guest 内所有生产子进程穷举为四类并规定谁能选择哪一类进程类别例子资源策略沙箱服务guest-init、guest-control-server沙箱生命周期VM 级策略有界辅助程序DNS 解析、写文件、状态恢复固定程序调用方不可选受控工作负载一次性 shell 命令、存储解压每操作独立workloadcgroup标准 CPU/内存/PID/OOM 策略受控 AgentAgent CLI、托管工具controlcgroup 每工具独立tool-N叶子 cgroup关键点通用沙箱调用方只能申请受控工作负载或唯一封死的 Agent 入口——不能申请 guest-root 执行、不能自选辅助程序、不能自定义隔离策略。信任等级由调用方身份决定而不是由参数决定。2.3 内存保护让失控任务烧不穿docs/runner-memory-policy.md 配合规范策略源 crates/guest-contracts/src/process_containment.rs 给出了精确的分层内存策略Agent 运行时workload/runtime有384 MiB的memory.min保护下限控制层有128 MiB防止任务侧内存压力把 Agent 核心挤死工具进程tool-N不享受保护与运行时共享上限超限就竞争、被 OOM 处理托管 shell 工具保留oom_score_adj1000优先被杀工作负载硬上限 Guest 物理内存 − 128 MiB 控制预留。翻译成人话Agent 的大脑有保底线双手工具没有限外特权——这是防资源耗尽型攻击的直接手段。三、可审计性每个关键决策都可回放3.1 只追加的决策日志docs/account-erasure-decision-journal.md 描述了一个独立于应用主库的 PostgreSQL 决策日志决策只追加、按事务内分配的decisionSequence排序配 watermark 水位与分页读取可完整回放客户端必须显式传入独立数据库连接绝不读取应用DATABASE_URL——审计存储与应用存储从连接层面就隔离每次追加绑定权威方authorityUUID责任可追溯到人/系统。类似的审计面还有计算机使用审计事件docs/account-erasure-computer-use-audit-events.md配合 SSH 权限文档中密钥永不进入审计元数据的规则形成决策可审计、秘密不可见的平衡。3.2 事件溯源服务端事件是唯一事实源docs/event-sourcing.md 规定前端展示用的乐观事件只是页面本地投影持久化事件才是带服务端排序的事实当持久事件到达后按同一事件 ID 对账替换。请求失败、超时都不允许前端自行回滚事件。这条规则保证了 UI 上看到的 Agent 行为最终一定能与服务端事件流对得上——审计时不存在界面说做过、日志里没有的歧义。四、落地清单今天就能对照检查的 6 件事✅凭据解析走私有通道Runner/Agent/日志侧都无法直接取到密钥接口只回身份不回收据。✅高危能力默认关闭VNC 默认禁用付费工具单独立管控文档。✅授权三元组建键按组织 × 用户 × Agent精确授权撤销即时生效。✅任务隔离在微虚拟机每任务独立沙箱进程类别与调用方信任等级绑定。✅资源有硬围栏cgroup 分层 内存保护下限 可预测的 OOM 优先级。✅决策只追加、可回放独立决策日志 事件溯源对账操作全程可追溯。参考材料SSH 权限docs/runner-ssh-authority.mdVNC 权限docs/runner-vnc-authority.md进程生命周期与信任边界docs/runner-guest-process-lifecycle.md内存保护策略docs/runner-memory-policy.md决策日志docs/account-erasure-decision-journal.md事件溯源docs/event-sourcing.mdFirecracker 沙箱源码crates/sandbox-firecracker/进程容纳规范策略源crates/guest-contracts/src/process_containment.rs【免费下载链接】okouOkou connects to the tools your team already uses and does the work — across marketing, sales, engineering, and operations, under your control.项目地址: https://gitcode.com/GitHub_Trending/vm/okou创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考