mistermorph Agent 安全架构设计经验
分类有用工具库
AI 总结 · 连续创业者视角(以下内容由 AI 提炼,观点归原作者;读完可不看原文)
作者开发 AI Agent mistermorph,核心洞察是将 Agent 视为权限系统工程而非提示词工程。构建了 OS/容器层(限制 sudo、rootfs 只读)、密钥管理层(auth_profile 隔离敏感信息)和应用层 Guard(redaction、allowlist、人工审批)三层防御体系,解决外泄、泄密、越权三大风险。
- 不要试图在 Prompt 中实现沙箱功能…
- 建立 auth_profile 机制…
- 防御策略避免笛卡尔积爆炸,应用层 Guard 仅保留出站白名单、内容 Redaction、异步人工审批三件事
- 配置优先于 Prompt 约束,将访问权限写成结构化的配置清单而非自然语言指令
Agent安全的核心:从“提示词工程”转向“权限系统工程”
结论先行:不要试图在 Prompt 中实现沙箱功能。Prompt 会被绕过、被投毒、被误解。真正的安全底线必须由操作系统、容器和代码配置层来硬执行。Agent 本质上是一个拥有读写文件、联网、跑 Shell 权限的程序,将其视为“权限系统工程”而非“提示词工程”,才能解决外泄、泄密、越权三大风险。
三层防御体系详解
第一层:OS/容器层——解决“能不能做”
这一层负责硬边界,不给 LLM 任何钻空子的机会。
- 最小权限原则:服务进程只给普通用户权限,坚决不给 sudo。
- 根文件系统只读:限制可写目录,而不是在 Prompt 里写 sensitive_path 或 denylist(黑名单必被绕过)。
- 系统硬化:利用 systemd 的 ProtectSystem、ProtectHome、NoNewPrivileges、PrivateTmp 等选项收紧能力面。
- 工具裁剪:直接把 curl 等高风险工具从系统里移除,只允许使用内置的 url_fetch 工具。
- 网络下沉:如果是企业内网,将网络 egress 控制尽量下沉到容器层甚至网络层。
第二层:密钥管理层——解决“秘密接触”
核心思路:需要与外部交互时所需的密钥,永远不会出现在 Prompt 里,而是由 Agent 代持注入。
- Auth Profile 机制:Skill(技能模块)本身不存储密钥,只声明需要的 auth_profile。Agent 作为桥接,负责在调用工具(如 url_fetch)时,将密钥注入到 Authorization Header 中。
- 配置即权限清单:将访问权限写成结构化的配置清单(如 config.yaml),而非自然语言指令。例如,限定 Skill 只能访问特定的 url_prefixes,使用特定的 HTTP 方法,禁止代理,禁止访问私有 IP。
- 副作用即优势:这种设计让配置更像“权限清单”,而非“模型输入”,天然隔离了敏感信息。
第三层:应用层 Guard——解决“内容越界”
Guard 是“擦屁股”的最后一道防线。为避免策略笛卡尔积爆炸导致系统不可维护,仅保留三件事:
- 出站白名单(Allowlist):严格限制 allow_dirs 和 allow_url_prefixes。这是最强的应用层围栏。
- 内容 Redaction:对所有输入输出进行规则匹配,抹掉已知高风险信息(如 Token、Key 片段)。
- 异步人工审批(Async Approvals):高风险动作(如安装远程 Skill)挂起,返回 pending 状态,由人工预览源码并确认后才执行,同时保留完整审计日志。
可复现的实施步骤
- 部署环境隔离:使用 systemd + 普通用户 + rootfs 只读容器运行 Agent。
- 抽象密钥注入:设计 auth_profile 配置,让 Skill 仅声明依赖,由 Agent 核心在运行时注入凭证。
- 配置化权限:将所有工具的访问范围(URL前缀、HTTP方法、目录)写死在 YAML 配置中。
- 启用 Redaction 过滤器:在 Agent 的入出站流量中部署正则表达式过滤器,清除敏感数据。
一句话总结:在把钥匙交给 Agent 之前,先确定门有几道、哪些是铁门、哪些需要人点头、谁在门口记账。Prompt 只是门内的装饰,不是门锁。
原文 · 歌词经理:阅读原文 →