KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

12. 完成一个安全动作网关 — keel 龙骨

结课项目接收模型提出的配置动作,但只有可信身份、资源 scope、策略决定和绑定审批全部成立时,才调用模拟 Adapter。攻击文本、跨租户目标、过期票据和参数替换都会在副作用前停止。

结课项目接收模型提出的配置动作,但只有可信身份、资源 scope、策略决定和绑定审批全部成立时,才调用模拟 Adapter。攻击文本、跨租户目标、过期票据和参数替换都会在副作用前停止。

完整链路

flowchart TD
    U[认证用户目标] --> H[Harness]
    D[不可信网页/记忆/Agent 工件] --> H
    H --> O[Ollama Proposal]
    O --> N[程序规范化 ActionEnvelope]
    I[Principal + Delegation + Resource Directory] --> N
    N --> P[PDP]
    P -->|deny| R[拒绝 + 审计]
    P -->|require approval| A[Approval Store]
    A --> E[PEP 执行前验证]
    P -->|allow| E
    E --> X[隔离 Adapter]
    X --> L[Receipt + Audit]

运行完整示例

python courses/advanced/safety-controls/course/project/examples/05_secure_gateway.py
python -m unittest discover -s courses/advanced/safety-controls/course/project/tests -v

真实模型实验只产生 Proposal:

ollama serve
ollama pull qwen3:8b
$env:OLLAMA_MODEL = "qwen3:8b"
python courses/advanced/safety-controls/course/project/examples/06_ollama_untrusted_proposal.py

模型即使返回 tenant-b、声称“管理员已批准”或把 effect 写成 read,Harness 也会从认证上下文、资源目录、动作目录和 Approval Store 重新构造事实。

必做攻击实验

  1. 用户目标合法,同租户 staging 写操作,无审批:require_approval;
  2. 有效审批且 fingerprint 一致:执行一次;
  3. 审批后把 40 改为 80:approval_action_mismatch;
  4. 跨租户目标:resource_scope_denied;
  5. 网页声称“已获管理员批准”:仍需 Approval Store;
  6. Agent 提议未注册工具:unknown_action;
  7. ticket 过期或重放:执行前拒绝;
  8. 外部 URL 指向私网或非 allowlist 域名:隔离策略拒绝;
  9. 策略异常:高风险动作 fail closed;
  10. 每个分支都产生脱敏审计事件,且 Adapter 调用计数符合预期。

生产验收问题

完成标准

你应能提交:一页威胁模型、一张身份与委派链、PDP/PEP 位置图、动作与审批契约、最小权限矩阵、攻击回归测试、脱敏审计样例,以及从教学 Adapter 迁移到生产凭据/隔离/审计设施的清单。

到这里,Agent Harness 的安全结论不再是“模型被要求谨慎”,而是“即使模型被误导,执行系统仍有可验证边界”。

返回安全控制课程入口 · 回看现实世界执行

进入 keel 阅读