6.1 多层防御模型
本节你会学到
- 7 层防御栈,以及缺哪一层会出什么事
- Agent 特有的 5 类风险,以及由哪一层缓解
- 最小可用安全配置 vs 生产级配置
Agent 嵌入产品的安全设计不是单一防线,而是多层叠加。每层各自独立,不要把安全希望押注在某一层上。
七层防御栈
用户请求 / 上游系统
│
▼
┌─────────────────────────────┐
│ 1. 业务层访问控制 │ "这个用户能调 Agent 吗?"
│ (SSO / RBAC / 租户隔离) │
└─────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ 2. 凭据边界 │ "Agent 用什么身份?"
│ (API Key / STS / 服务账号) │
└─────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ 3. 系统提示注入防御 │ "LLM 的指令不能被用户输入覆写"
│ (AGENTAO.md 硬约束 / 工具结果标记) │
└─────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ 4. 权限引擎 │ "这个工具能不能调?" ——规则级
│ (PermissionEngine 规则) │
└─────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ 5. 工具确认 │ "用户批准吗?" ——人机级
│ (confirm_tool UI) │
└─────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ 6. Shell 沙箱 │ "命令实际能做什么?" ——系统级
│ (macOS sandbox-exec) │
└─────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ 7. 网络隔离 │ "能访问什么 IP?" ——内核级
│ (容器 / VPC / egress 规则) │
└─────────────────────────────┘
│
▼
实际执行
│
▼
┌─────────────────────────────┐
│ 8. 审计日志(横切) │ "做了什么?出事了谁签字?"
└─────────────────────────────┘核心原则:任何一层出问题,其他层还能兜住。
威胁模型:Agent 特有的 5 类风险
| 风险 | 触发路径 | 主要防线 |
|---|---|---|
| 提示注入 (prompt injection) | 用户输入 / 网页内容 / 文件内容里埋指令让 LLM 做坏事 | 层 3 + 层 4 |
| 凭据泄漏 | LLM 回复或日志里带上 API key / 数据库密码 | 层 2 + 层 8(脱敏) |
| 越权访问 | Agent 调工具跨租户/越级 | 层 1 + 层 4 + 多租户隔离(6.4) |
| SSRF (内网请求) | LLM 被诱导 web_fetch http://169.254.169.254/ | 层 4(domain blocklist)+ 层 7 |
| 资源耗尽 | 死循环工具、大文件、无限上下文 | 6.7 资源治理 |
职责分工
| 层 | 谁负责配置 | 频率 |
|---|---|---|
| 1. 业务访问控制 | 你的应用 | 改用户/角色时 |
| 2. 凭据 | DevOps | 生成/轮转时 |
| 3. 提示注入防御 | 开发者(AGENTAO.md) | 设计期 |
| 4. 权限规则 | 开发者 + 安全团队 | 每次加新工具 |
| 5. 工具确认 UI | 前端开发者 | 设计期 |
| 6. Shell 沙箱 | 平台团队 | 配置期 |
| 7. 网络隔离 | 运维/网络 | 部署期 |
| 8. 审计日志 | 平台团队 | 运行期(常监控) |
最小 vs 理想
最小(原型 / 内部工具):
- 正确配
OPENAI_API_KEY(不要 commit 进 git) PermissionEngine用WORKSPACE_WRITE预设working_directory=每会话独立- 基础
confirm_tool实现 - 用
agentao.log自带的日志
够不够?够演示、够内部使用,但还不能交付给客户。
理想(生产 SaaS):
- 每租户独立 STS/服务账号,作用域最小化
- 自定义
PermissionEngine按租户订阅等级 - 每会话
working_directory+ 容器隔离 - 工具确认 UI 接入公司 SSO,审批记录进合规系统
- macOS 上用
sandbox-exec;Linux 用seccomp/namespace(见 6.2) - 网络 egress 规则(VPC + allowlist)
- 日志接入 SIEM / 指标接入 APM
- Prompt 注入专项红队测试
本部分后续章节展开每一层的落地。
自测清单
部署前:
- [ ] 没有凭据 hard-code 到代码或 AGENTAO.md
- [ ]
PermissionEngine规则覆盖了所有自定义工具和 MCP 服务器 - [ ]
confirm_tool有超时(不是无限等) - [ ]
working_directory按会话隔离 - [ ]
agentao.log的输出路径可写且持久化 - [ ] 单元测试覆盖"规则命中"的关键场景
- [ ] 关键告警指标:工具调用失败率、LLM 调用 5xx 率、confirm 超时率
TL;DR
- 不要把安全押注在单一防线上。 7 层叠加 + 跨切面审计。
- Agent 特有 5 类风险:Prompt 注入、密钥泄漏、越权访问、SSRF、资源耗尽。
- 最小可用:API key 不进 Git +
WORKSPACE_WRITE预设 + 每会话working_directory+ 基础confirm_tool+ 默认日志。 - 生产级:按租户 STS + 自定义 PermissionEngine + 容器隔离 + sandbox-exec / seccomp + VPC egress 规则 + SIEM 日志 + 红蓝演练。