[Epic] Docker Sandbox 与执行隔离 / Docker sandbox and execution isolation #32
Copy link
Copy link
Closed
3 / 33 of 3 issues completedClosed
3 / 33 of 3 issues completed
Copy link
Labels
epicParent issue grouping related deliverablesParent issue grouping related deliverablesroadmapProduct roadmap and cross-cutting delivery trackingProduct roadmap and cross-cutting delivery trackingsandboxSandbox, container, and execution isolationSandbox, container, and execution isolationsecuritySecurity boundary or high-risk capabilitySecurity boundary or high-risk capability高难度
Description
目标 / Goal
把现有“私有、无产品授权”的真实 Docker 生命周期基础收口为 Run 所有、可恢复、默认拒绝、可审计的产品 Sandbox。
Turn the existing private, non-authorizing Docker lifecycle foundation into a Run-owned, recoverable, fail-closed, auditable product sandbox.
当前基线 / Current baseline
- 已验证固定 Docker daemon endpoint 下的 stage/create/start/wait/natural-exit/timeout/cancel/TERM/KILL/final-inspect/delete/absence。
- 真实 Docker Desktop 已通过 timeout exit 137 与清理证据。
- 当前实现仍是 package-private foundation,不授予 CLI、HTTP、Desktop 或模型任何产品执行权。
- 尚缺持久启动意图、generation lease/fencing、重启/孤儿恢复、有界日志、原子输出事务和产品准入。
子任务范围 / Child scope
子 Issue 将分别覆盖:
- 生命周期所有权、租约与崩溃恢复;
- 只读输入、有界日志和原子 Artifact 输出;
- Policy/Approval/Budget/Network 与 CLI/HTTP/Desktop 产品准入。
完成定义 / Definition of done
- 进程崩溃或重启后,不会出现失去所有权的容器、重复执行或错误 Run 认领。(feat(sandbox): 持久化容器生命周期所有权、租约与崩溃恢复 #38 → PR feat(sandbox):持久化 Docker 容器生命周期所有权、代际租约与崩溃恢复(#38) #58,schema v97:持久生命周期所有权、代际租约、独立 Start WAL/launch binding、追加式取消、终态回执与启动恢复;ADR 0096/0097)
- 输入默认只读、stdin 默认关闭、输出和日志有明确上限,Artifact 提交原子化。(feat(sandbox): 只读输入、有界日志与原子 Artifact 输出 #39 → PR feat(sandbox): 只读输入、有界日志与原子 Artifact 输出(Issue #39) #61,schema v98:密封只读输入投影、有界日志捕获、输出 staging 与按 attempt 唯一约束、仅 natural exit 0 + 权威匹配时原子提交;ADR 0098)
- 网络默认关闭,任何放宽都有明确 Scope、审批、时限和审计。(feat(sandbox): Docker 产品准入、网络默认关闭与权限控制 #40 → PR feat(sandbox):Docker 产品准入、网络默认关闭与权限控制(#40) #62:产品 Manifest 目前必须
network.mode=disabled、environment-free、零 target;Create 使用 network none 并在 inspect 复核。放宽入口并不存在——ManagedEgressEnabled/allowlist 一律返回managed_egress_unavailable,因此“放宽需显式 Scope/审批/时限”由设计上无放宽面保证;ADR 0099) - 产品入口只能在当前进程能力、Run 快照和 Sandbox readiness 同时通过时开放。(feat(sandbox): Docker 产品准入、网络默认关闭与权限控制 #40 → PR feat(sandbox):Docker 产品准入、网络默认关闭与权限控制(#40) #62:admission/start/cancel 在服务构造生成一次性 runtime epoch,最终 fence 复核当前 Run/Mission/Workspace、v54 精确计划/Manifest、
dockerProfile、最新权限档、精确 per-callsandbox.manifest审批、Policy、剩余预算与 30 秒sandbox.readiness.v1;Full Access 不替代精确审批;Docker 不可用时稳定失败关闭) - 真实 Docker 与无 Docker 环境均有 fail-closed 测试证据。(真实 Docker:
Test*RealDaemonOptIn集成测试以精确 sha256 digest 的 environment-free 镜像对 Docker Desktop 29.6.2 验证 lifecycle timeout 137 + 清理、network-none、readiness、写入、宿主输入交接、运行时输入应用与生产证据 harness;无 Docker:默认套件覆盖稳定 fail-closed 路径与清理恢复)
安全边界 / Security boundaries
- Docker 可用不等于产品授权。
- 不允许通过环境变量、镜像内容、模型输出或前端状态自行提权。
- 不使用 broad daemon autodiscovery;连接目标必须固定并可审计。
- 不把容器 root 视为宿主机安全边界的充分证明。
涉及目录 / Affected directories
internal/sandbox/internal/runner/internal/application/internal/domain/internal/store/internal/events/internal/policy/internal/approval/internal/httpapi/cmd/cyberagent/web/src/docs/adr/
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
epicParent issue grouping related deliverablesParent issue grouping related deliverablesroadmapProduct roadmap and cross-cutting delivery trackingProduct roadmap and cross-cutting delivery trackingsandboxSandbox, container, and execution isolationSandbox, container, and execution isolationsecuritySecurity boundary or high-risk capabilitySecurity boundary or high-risk capability高难度
Activity
Qiyuanqiii commentedon Aug 15, 2026
Epic 收口 / Epic closure
三个子任务已全部完成并合并,完成定义五项均已核对通过:
关键边界(保持不变)
network.mode=disabled;Create 用 network none 并在 inspect 复核。网络放宽入口目前不存在(managed_egress_unavailable),需要独立 Go-owned egress guard 时才可开放,所以“任何放宽都有显式 Scope/审批/时限”由无放宽面保证。验证证据
Test*RealDaemonOptIn集成测试(精确 sha256 digest、environment-free 镜像、Docker Desktop 29.6.2)覆盖 lifecycle timeout 137 + 清理、network-none、readiness、写入、宿主输入交接、运行时输入应用与生产证据 harness。关闭本 epic。后续任何“放宽网络/通用 Manifest/多容器”等扩展都必须作为新的、独立评审的 issue 从当前 exact subset 边界出发。