P3_WP04_EDGE_GATEWAY_EVIDENCE.md 12 KB

P3-WP04 边缘网关工程验证证据

验证日期:2026-08-09(Asia/Shanghai)

1. 结论和边界

当前结论为 ENGINEERING_COMPLETE_ENTERPRISE_EDGE_UAT_BLOCKED。本证据证明本地工程契约和受影响代码的定向测试,不证明生产就绪,不替代企业验收。未执行仓库全量回归;未连接真实企业来源;未使用企业 CA、企业网络区或企业代理;未取得网络/安全/法务签字。

外部输入状态:

输入 状态 未完成证据
enterprise_source_1 TBD_EXTERNAL 未提供批准来源、版本、规模、只读账号和样本
enterprise_source_2 TBD_EXTERNAL 未提供批准来源、版本、规模、只读账号和样本
network TBD_EXTERNAL 未提供企业网络区、exact egress、代理、DNS、CA/CRL 和抓包审批
security_legal TBD_EXTERNAL 未完成数据分级/保留、数据不出域和证书/发布流程签字

2. 已验证批次

所有批次均设置 PYTHONDONTWRITEBYTECODE=1PYTHONPATH=.,只覆盖 P3-WP04 和直接受影响的 Runner/权限/OpenAPI 契约。

批次 A:WP04 工程基线

TEST_DATABASE_URL=postgresql://dataops:***@127.0.0.1:15432/dataops \
pytest -q tests/test_phase3_wp04_edge_gateway.py \
  tests/security/test_phase3_wp04_data_boundary.py \
  tests/integration/test_phase3_wp04_edge_gateway_postgres.py \
  tests/integration/test_phase3_wp04_edge_agent.py \
  tests/integration/test_phase3_wp04_nginx_mtls.py \
  tests/test_phase3_wp04_production_runtime.py

结果:241 passed in 14.42s。数据库 URL 在证据中脱敏;实际目标是本地 Docker PostgreSQL 127.0.0.1:15432/dataops

批次 B:直接受影响 Runner 与权限

pytest -q tests/runner/test_api.py tests/runner/test_replay_store.py \
  tests/runner/test_task_tokens.py tests/runner/test_bootstrap.py \
  tests/test_permission_matrix.py

结果:29 passed in 1.25s。其中 Runner 19 项、权限矩阵 10 项;与批次 A 合计 270 项。Task4 规格整改后再次合并执行批次 A、Runner 和权限矩阵,结果为 270 passed in 15.20s,作为本轮最终 WP04 受影响工程基线;未执行仓库全量回归。

批次 C:Task4 交付契约

pytest -q tests/test_phase3_wp04_delivery_contract.py

RED:首次执行 7 failed,原因分别为 admin CLI、edge Compose、OpenAPI edge schemas、证据/运行手册尚不存在以及生成文件不一致。规格复核补充信任链要求后,新测试批次为 9 failed, 2 passed,准确暴露了 rollback 未绑定受控 bundle、runtime UID/GID/key 路径、签名撤销 envelope、OpenAPI mTLS/schema 和发布归档缺口。增加 tmpfs UID/GID 复用、过期/伪签名撤销和归档链接检查时,RED 为 10 passed, 1 failed,唯一失败是 tmpfs 仍硬编码 UID/GID;最终审计又用一个有效重签但 status 改变的同 release-id manifest 发现 replay digest 过窄,定向 RED 为 1 failed, 10 deselected,随后改为完整 manifest digest 绑定。第二轮复核用已有 history 加异内容 stale intent 得到 1 failed, 10 deselected,暴露 history 快速返回前未核验/清理 intent,随后补上严格等值验证、unlink 和 state 目录 fsync。

质量复核继续增加宽根拒绝、跨进程 fcntl lock、same-fd copy/hash、hardlink/竞态拒绝、正式三段版本、失败临时 bundle 清理、runtime parent owner 继承、真实 Edge 镜像、闭合 config schema、读者命令和归档摘要闭包。CLI 安全组先得到 8 passed, 11 deselected,release/rollback 安全组得到 9 passed, 10 deselected;控制面版本策略在 RED 中发现 6 个过宽版本全部被接受,修复后 6 passed

最终交付契约与真实 Edge 运行时合跑:33 passed in 17.12s。已覆盖 init/CSR 的 runtime owner 与 0600/0700、真实容器 UID 读取只读 secrets/client.key、证书有效期/clientAuth/key-CSR-cert/CA/CRL 注册校验、固定注册材料 exact replay/conflict、幂等 pending 轮换、canonical Ed25519 撤销状态的过期/跨网关/伪签名拒绝与本地终态、发布受控 bundle、完整 manifest 重验签、同 release-id 任何完整 manifest 变化拒绝、artifact 验后篡改、错误 current/target、history 与 matching/mismatched stale intent、unlink/directory-fsync 故障恢复及下一次合法回滚、路径/符号链接/hardlink/宽根策略、正式三段版本和失败临时目录清理;同时覆盖 pull-only Compose、可构建发布归档、OpenAPI human bearer 与 machine mTLS+credential、大小写敏感键和最大递归深度的可执行 JSON Schema、闭合 edge config schema、可执行读者手册、源/发布 CLI 精确副本,以及归档内 OpenAPI/Failure JSON/SHA256/二进制与文本秘密扫描。

批次 D:真实 Edge 镜像与运行时

pytest -q tests/integration/test_phase3_wp04_edge_runtime.py

普通受限沙箱首次得到 1 failed, 1 passed,失败只发生在 Docker buildx 写 ~/.docker/buildx/activity 时被宿主沙箱拒绝,镜像代码尚未执行。允许 Docker 使用其 本机活动目录后最终结果纳入批次 C 的 33 项:实际构建 Dockerfile.edge,临时本地 CA/server/client/新鲜 server CRL 与 mTLS fake control 完成 heartbeat、reconcile,接收 Ed25519 签名且精确绑定的工程自检任务,经封闭 Runner 形成有界 evidence 事件并取得 exact ACK;在线替换 CRL 并撤销当前服务端证书后,下一次连接在不重启容器的情况下 立即失败并进入 degraded。无入站 port、日志/health 无 credential,SIGTERM 干净退出; 另验证 CRL_CHECK_LEAF 与 stale CRL fail-stop。 未连接真实企业来源、企业 CA 或企业网络。

批次 E:OpenAPI、状态台账和静态门禁

  • delivery 与真实 Edge runtime:33 passed in 17.12s;OpenAPI schema/安全组合定向已包含其中;生成器生成 444 operations 且与 docs/architecture/OPENAPI.yaml byte parity。
  • P3-WP00 requirements 受影响语义:11 passed, 1 deselected in 1.99s;未选择项是会比较被 Git 忽略的既有 __pycache__ 字节码的全目录测试,WP04 源码 parity 已用排除 __pycache__ 的递归比较独立通过。
  • 非 Docker 的 WP04、Agent、Runner、权限直接受影响批次:229 passed in 5.30s;真实 PostgreSQL 控制面批次:36 passed in 8.32s;与 delivery/runtime 33 项合计 298 passed。未执行仓库全量回归。
  • Ruff:CLI、OpenAPI generator、Edge runtime/bootstrap/transport/agent、control-plane service、delivery/runtime tests 及 deployment mirrors 全部通过。
  • compileall:使用 /private/tmp/dataops-wp04-pyc cache 前缀通过;没有向源码目录新增字节码。
  • JSON/YAML:requirements、failure injection、OpenAPI、edge Compose 均解析通过。
  • Compose:使用无秘密 edge.env.example、显式 runtime UID/GID 和 exact HTTPS origin 后,docker compose config --quiet 通过;真实 nginx:alpine 容器以配置 UID/GID 读取 CLI 生成的只读 client key 通过;真实 Edge image smoke 见批次 D,但未启动真实企业源。
  • Migration:真实本地 PostgreSQL alembic current 返回 20260809_479 (head)
  • app//deployment/app/ 的 WP04 源文件与 migration 477/478/479 递归 parity 通过(排除运行时 __pycache__)。
  • git diff --check、发布脚本 shell syntax、OpenAPI byte parity、发布归档 SHA-256 closure 和二进制/文本 secret scan 通过。扫描器拒绝 encrypted private key、PKCS#12、二进制载荷和明文 credential,并排除 __pycache__/字节码。测试中的私钥标记仅为拒绝规则夹具,不是秘密材料。

3. 关键真实/模拟层次

  • PostgreSQL:真实本地 Docker PostgreSQL,Alembic 20260809_479,验证 migration 升降级、约束、并发、应用/证据 owner/runtime role 隔离和 signing authority 最小权限。不是企业数据库。
  • Nginx mTLS:使用本机已有 nginx:alpine 镜像、临时本地 CA/服务端/有效/错误/撤销客户端证书和真实 CRL,实际 TLS handshake 验证无证书、错 CA、伪造 header、有效证书及 revoked 拒绝。不是企业 CA/CRL。
  • 镜像能力:定向检查 backend migrator/runtime 与 runner 镜像构建契约、Compose target 和 migration/runtime credential 隔离;没有发布新生产镜像。
  • Runner:真实本地 Runner API、bootstrap、task token、replay store 受影响契约;企业来源 handler 尚未接入。
  • Edge agent:真实 disk SQLite、签名任务、策略、断网队列、reconcile、cancel、event ACK、artifact retention 与发布回滚的本地执行;网络 transport 为受控本地测试。
  • Edge runtime:真实构建的 Edge 镜像实际运行 pull-only heartbeat/reconcile/pull 循环,接收一个 Ed25519 签名且精确绑定的 quality-evaluation 工程自检任务,经封闭 Runner 形成有界 evidence 事件并取得 exact ACK;其他来源任务仍默认拒绝。使用临时 mTLS 控制面和 server CRL,在线替换 CRL 并撤销当前服务端证书后下一次连接立即失败,证明 TLS 连接池已热重建;断网降级与 SIGTERM 已验证。企业来源 Runner handler 仍未配置,属于 TBD_EXTERNAL,本地 smoke 不把工程自检伪装为已接企业来源。
  • Admin CLI:真实生成 3072-bit RSA private key/CSR,0600/0700、runtime UID/GID owner 校验、fsync+rename、证书/CSR/key/CA/CRL 匹配、Ed25519 revoke/release authority、受控 verified bundle 和 artifact SHA-256;故障注入覆盖 current 指针替换后的 directory-fsync 失败及幂等恢复,测试材料均为临时生成。

4. 已证明的安全属性

  1. 原始行、近期明细、restricted、credential、private key、SQL、任意 URL/命令/路径在出站边界默认拒绝,拒绝内容不持久化到控制面。
  2. enrollment 失败绑定不消耗;token/credential 只以 hash 入库;generation/certificate/environment/zone/gateway 精确绑定;rotate/revoke 后旧身份失败。
  3. stable event ID 的 exact replay 返回同一 ACK;变更 digest 冲突;task/event/cancel/revoke 并发由数据库锁与 lease fencing 线性化。
  4. 任务和发布完整 Ed25519 authority 绑定 key-id、用途、策略、环境、网络区、deadline、artifact digest 和 rollback version;release-check 将 manifest/artifact 原子复制到受控 bundle,rollback 重新验证 current/target 签名与两个 artifact hash 后才提交指针;伪 verified JSON、验后篡改、过期、降级、replay change、路径穿越和符号链接失败。
  5. Compose 无入站 control port,non-root、read-only、cap-drop ALL、no-new-privileges、CPU/内存/PID/日志上限和最小 RO/RW mounts。
  6. 诊断、心跳、日志和 API 错误为有界安全摘要;响应 Cache-Control: no-store

5. 运行、故障和恢复证据索引

  • 安装、CSR、注册、证书轮换/撤销、CRL、升级、回滚、v1→v2 drain gate、诊断、备份和恢复:docs/runbooks/EDGE_GATEWAY_OPERATIONS.md
  • 数据边界、身份、签名和 retention 架构:docs/phase3/P3_WP04_EDGE_GATEWAY.md
  • 每个故障注入的前置、步骤、安全边界、预期、证据、rollback 和状态:docs/validation/P3_WP04_FAILURE_INJECTION.json
  • OpenAPI:docs/architecture/OPENAPI.yaml,由 scripts/generate_openapi.py 再生。

6. 尚未满足的企业完成门禁

必须在批准企业环境完成:两个真实来源的采集/画像/质量/血缘/受控查询;断网续跑和取消;真实网络抓包和出站网关审计;原始数据未经批准出域事件为 0;企业 CA/CRL 的注册、轮换和撤销;queue 备份恢复与升级/回滚演练;网络负责人和安全法务负责人签字。完成前,本工作包保持 ENGINEERING_COMPLETE_ENTERPRISE_EDGE_UAT_BLOCKED