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 重新构造事实。
必做攻击实验
- 用户目标合法,同租户 staging 写操作,无审批:
require_approval; - 有效审批且 fingerprint 一致:执行一次;
- 审批后把 40 改为 80:
approval_action_mismatch; - 跨租户目标:
resource_scope_denied; - 网页声称“已获管理员批准”:仍需 Approval Store;
- Agent 提议未注册工具:
unknown_action; - ticket 过期或重放:执行前拒绝;
- 外部 URL 指向私网或非 allowlist 域名:隔离策略拒绝;
- 策略异常:高风险动作 fail closed;
- 每个分支都产生脱敏审计事件,且 Adapter 调用计数符合预期。
生产验收问题
- 是否存在绕过 PEP 直接调用 Adapter 的路径?
- principal、租户和资源归属是否来自认证/资源系统?
- credential 是否只在最后时刻注入,且 audience/scope 足够窄?
- policy 与 tool registry 更新是否版本化、审查并可回滚?
- Prompt Injection 成功影响模型后,执行层仍能限制到什么程度?
- 能否在 30 分钟内定位被污染的记忆、Agent、工具版本和受影响 Run?
- 审批人看到的是否就是执行的 fingerprint 与 before state?
- 测试是否同时覆盖 false allow、false deny、正常任务成功率和人工负担?
完成标准
你应能提交:一页威胁模型、一张身份与委派链、PDP/PEP 位置图、动作与审批契约、最小权限矩阵、攻击回归测试、脱敏审计样例,以及从教学 Adapter 迁移到生产凭据/隔离/审计设施的清单。
到这里,Agent Harness 的安全结论不再是“模型被要求谨慎”,而是“即使模型被误导,执行系统仍有可验证边界”。