Files
aios/plugins/aios-tenant-boundary/README.zh-CN.md
T

3.9 KiB
Raw Blame History

AIOS OpenClaw Run Provenance Writer

本插件为 AIOS V2R1 提供 Owner 签名的运行授权、持久 Provenance Store 与专用 Evidence Writer。它不授予通用 Shell 或任意文件写权限。

AIOS Runtime HTTP 合同

插件在 OpenClaw loopback Gateway 内注册 /v1/health、/v1/execute 和 /v1/commands/<id>。执行请求必须同时通过本机 CredentialRef 比对与 Ed25519 签名验证;热路径只读取公钥,不读取 Candidate 私密签名材料。

Runtime 仅允许无副作用的 status 与在线验收专用 acceptance.delay。它不把 返回成功冒充为模型推理或任意 Agent 执行。命令身份、幂等键和终态以追加式 JSONL 持久化;Gateway 重启时遗留的 RUNNING 命令会收敛为 FAILED/restart_interrupted,避免把重启误报成真实超时。

取消只对当前进程内仍在执行的命令生效,超时由签名命令的 expires_at 与 30 秒硬上限共同约束。未知 action、错误签名、过期命令、跨 tenant 状态查询、 冲突的 command_id 或幂等键均失败关闭。

安全边界

  • 签名合同:aios.run-provenance/v1,Ed25519,授权最长 15 分钟。
  • 授权绑定:run_id、sender_id、任务、执行器实例、当前 Claim OID、Candidate OID 与任务分支。
  • 路径:仅允许七个 .agent/*.json Evidence 文件。
  • 操作:仅允许 create/update,随后执行固定 argv 的 git add、git commit 和当前任务分支普通 push。
  • 通用 exec/shell/bash/write/edit/apply_patch/file_write 始终拒绝。
  • toolCallId permit 只能消费一次;参数摘要变化、过期、签名篡改、Run/Sender 不匹配均拒绝。
  • Writer 拒绝 symlink、路径逃逸、脏 Worktree、错误分支、错误 HEAD、Candidate 非祖先及暂存范围扩大。
  • Gateway 以服务用户调用 Git 时,仅对配置中的精确 writerRepoRoot 注入命令级 safe.directory,不写全局 Git 配置。
  • 禁止 reset、rebase、amend、Tag 和 force push。提交后 push 失败时保留可审计的 local-ahead 状态,不伪造回滚。

组件

  • issuer.mjs:在受保护边界读取现有 Ed25519 材料,生成公开验签材料并原子写入一次性签发记录。
  • provenance.js:严格 Schema、canonical JSON、Ed25519 sign/verify 和安全 Store 读取。
  • index.js:OpenClaw hook、Owner/Run/Sender 验证与一次性 permit。
  • writer.js:限定路径原子写入、固定 Git 操作和追加式审计。

部署与回滚

部署必须先备份运行插件和 OpenClaw 配置,再安装 Git 中已测试的完整目录,配置绝对路径、Key ID、任务分支和审计路径,执行 openclaw plugins doctor 后才重启 Gateway。回滚只恢复备份插件与配置并重启,不修改任务分支历史或业务状态。

验证

执行:

node --test test/*.test.js

验收还必须包含受保护签发、Heartbeat 实际 commit/push、审计链验证,以及 README.md 等未授权路径的拒绝测试。

Candidate task-plane transport

protectedDispatchTransport=task-plane 仅用于隔离 Candidate 验证。它要求:

  • TaskPlan 与服务器配置的 task_id、repository、patch branch、完整 base OID、允许路径和 capability 完全一致;
  • Owner provenance 已通过现有签名校验,Policy approval 与 TaskPlan 摘要、Owner principal、有效期绑定;
  • Broker 端点只能是 loopback HTTP,Bearer 凭据只能从绝对路径的受控凭据投影读取;
  • Broker 返回 simulation=false、真实 provisioning 元数据和 secret-ref:// 引用,禁止返回 Token 或 Authorization 内容;
  • Broker 不可达时直接失败,不回退到 mock 或 sandbox;
  • 配置 protectedDispatchAuditPath 时仅写入脱敏 JSONL 审计记录。

该 Candidate 不修改生产插件或 Gateway;OpenClaw/Codex 原生子会话未完成前必须分别报告为未验证。