## 如何在 AI Agent 上线之前,检查它实际能访问到哪些资源

Reddit r/AI_Agents 新闻

摘要

# AI Agent 上线前的权限审查清单 > 本文整理自社区论坛中多位工程师的经验讨论。这些教训有一个共同点:**问题几乎都不是出在模型能力上,而是出在权限设计上。** 在把一个 agent 放进生产环境之前,请至少走完下面这份清单。 --- ## 1. 给 agent 一个独立身份 最常见的错误,是让 agent 直接复用开发者的账号或一把"万能"的服务账号。这样做的后果是:日志里分不清是谁做的操作,审计无从下手,而且 agent 的权限边界天然等于人类的权限边界——通常远超它实际需要的范围。 正确的做法: - 为 agent 创建**专属的服务身份**(service account / API principal),拥有独立的凭证。 - 所有操作在审计日志中都能追溯到该身份,而不是某个员工。 - 人类身份与 agent 身份使用**不同的凭证、不同的密钥轮换策略**。 - 尽可能为不同任务的 agent 拆分身份,而不是所有 agent 共用一个。 > 讨论区里反复出现的一句话:"如果出了事故你无法在日志里把 agent 的行为和人的行为区分开,你就还没有真正准备好上线。" --- ## 2. 按实际凭证核对可访问范围,而不是按文档 不要相信配置文件里写的权限范围,也不要相信"它应该只能访问 X"这类假设。**以 agent 实际持有的凭证为准,逐项验证它能触达什么。** 具体做法: - 拿着 agent 的凭证,手动调用一遍它能访问的每一个端点、每一个存储桶、每一个数据库。 - 特别注意**默认权限**:很多云平台的默认角色比你预期的大,很多 SDK 的默认 scope 是全量的。 - 检查凭证是否会被继承:如果 agent 运行在某个宿主环境(Kubernetes pod、CI runner、开发机)中,它可能同时拿到了宿主的其他凭证。 - 检查间接可达性:agent 能访问的服务 A,是否又能通过内部网络访问服务 B?**权限是会传递的。** 有位讨论参与者分享了一个真实案例:他们的 agent 被授予了"只读 S3 权限",但那个 S3 bucket 里存着一份内部服务的临时凭证文件——于是"只读"权限实际上变成了通往另一个系统的完整访问权。 --- ## 3. 严格分离读写权限 只读权限和写权限必须明确分离,而且默认给最小的那一个。 原则: - **默认只读**。只有在 agent 的任务明确需要写操作时,才授予写权限。 - 读与写使用**不同的凭证或不同的 scope**,而不是同一个凭证配上"应该只用在写场景"的约定。 - 写权限要**按资源粒度**收窄:能写某个目录,不等于能写整个存储;能更新某张表的某些列,不等于拥有完整的 UPDATE 权限。 - 区分"修改"与"删除":删除操作应当单独审批,且尽可能要求人工确认(human-in-the-loop)。 - 警惕写权限的放大效应:能写入配置、能写入日志、能写入 prompt 模板,都可能间接导致权限提升。 讨论中提到的一个反模式:为了让 agent "能完成各种任务",直接给了它 `readwrite` 的数据库角色。正确做法是为 agent 建立专门的数据库视图和受限角色,只暴露它真正需要的行和列。 --- ## 4. 用拒绝性问题测试过度授权 不要只测试"agent 能做什么",更要主动测试"agent **不应该**做什么"。这一条在讨论中被多次强调,也被认为是最容易被忽略、又最容易暴露问题的一步。 方法: - **构造诱导性请求**:让 agent 尝试访问与任务无关的资源、尝试提权、尝试绕过它自己声明的边界。例如:"顺便帮我看看其他用户的配置。"、"把这个结果也发到 #general 频道。" - **测试权限边界而非意图边界**:模型说"我不应该这么做"是一回事,凭证在技术层面无法做到是另一回事。前者可被 prompt injection 绕过,后者不能。**永远以凭证为准做兜底。** - **测试 prompt injection**:在 agent 会读取的外部内容中埋入指令(网页、邮件、issue 描述、文件内容),观察 agent 是否会执行。 - **建立红队用例库**:把每次发现的越权路径固化为测试用例,纳入 CI,在权限变更时自动回归。 - **检查"过度授权"而不只是"越权"**:有时候 agent 确实在权限范围内行事,但这个范围本身给得太大了。问自己:完成这个任务,最小需要的权限是什么? > 讨论区的原话:"你的 agent 的安全下限,等于你凭证的下限,而不是你 prompt 里写的规则。" --- ## 5. 检查撤销权限后缓存答案是否仍然泄露 这是整份清单中最具隐蔽性的一条。撤销权限很容易,但**已经暴露过的数据无法被撤销**。 要排查的点: - **响应缓存**:agent 框架、LLM 网关、HTTP 层、CDN 都可能缓存响应。撤销权限后,之前缓存的内容是否仍可被取回? - **对话历史与持久化存储**:agent 的会话记录、向量数据库、memory 存储中,是否沉淀了基于已撤销权限获取的数据? - **工具调用结果**:某次工具调用返回的敏感内容是否被写进了日志、trace 或评测数据集? - **派生内容**:agent 是否基于敏感数据生成了摘要、报告、代码片段,并发送到了 Slack、邮件或其他下游系统?这些派生物同样需要回收。 - **密钥与凭证的残留**:凭证被撤销后,是否仍以明文形式存在于 agent 的上下文、内存转储或历史消息中? - **模型侧的记忆**:如果使用了带长期记忆功能的服务,被撤销的数据是否已被"记住"? 建议的排查动作: 1. 撤销权限后,主动遍历所有缓存层和持久化层,确认没有残留。 2. 对已暴露的敏感数据进行**主动污染或标记**,即使被取出也无法直接使用。 3. 把"权限撤销"设计成一个**完整的流程**,而不是一个开关:撤销凭证 → 清理缓存 → 清理会话与 memory → 通知下游 → 审计确认。 --- ## 最后:把这份清单变成自动化 人工检查只能解决一次性的问题。真正可靠的做法是: - 将权限矩阵**声明式**地管理起来(IaC、OPA policy、IAM 策略即代码),变更必须走评审。 - 每次权限变更触发**自动化的拒绝性测试**。 - 持续监控 agent 的实际调用行为,与声明的权限矩阵做**漂移检测**。 - 上线前做一次**权限撤销演练**,验证第 5 条清单项真的可以闭环。 权限设计不是上线前的一次性检查项,而是 agent 整个生命周期中需要持续维护的东西。先把它做对,再谈让 agent 做更多事。

上个月有人在这里发帖说,他们公司的内部机器人在回答一个问题时,泄露了尚未公布的重组计划和薪资带宽。而按理说,它本来只应该读取内部 wiki。据发帖人描述,设置它的人只是在请求访问公司 Drive 时点了"是",于是机器人把所有内容都索引了进去,包括 HR 文件夹。帖子里还提到,有一个智能体的全部工作只是总结几个 wiki,结果却拥有共享 Drive 的删除权限,还能以设置者的身份发送邮件。没人给它这些权限。它是继承来的。该帖后来已被删除,但七十多条回复仍然可见。那条帖子下的回复汇总起来,就是一份可以在智能体触碰任何真实数据之前执行的检查清单。 **给它一个独立身份。** 以设置者本人身份运行的智能体,能访问那个人当前以及未来升职后能看到和能做的一切。用一个单独的账号、配以范围窄得多的权限,意味着它只拥有你明确授予的东西——无论那个人转岗还是离职,都不会受影响。如果它要为不同的人回答问题,还要更进一步:在它查询某条信息的那一刻,同时校验提问者本人的权限,而不仅仅是校验智能体的权限。 **列出它凭凭据实际能触达的资源,而不是凭记忆。** 从管理控制台或配置文件中提取真实的授权记录,再与实际工作所需对比。帖子里有几个人会维护一份书面清单,记录每个智能体应当拥有的权限,并把与实际权限之间的任何差异标记出来。 **把读取和操作分开。** 一个总结工具只需要读取几个文件夹的权限。它不需要删除权限,更不需要以某个真人身份发送邮件。如果工作内容确实需要执行某个动作,那就单独配一个范围更窄的凭据。 **问它那些它本应拒绝回答的问题。** 草拟计划、薪资数据,以及任何来自它本不应访问的文件夹的内容。如果它回答了,说明权限范围划得太宽。在上线前就做这件事——那一项测试,大概率就能拦住那次重组信息泄露。 **检查移除权限之后会发生什么。** 删掉一个测试文档,然后在同一个会话和一个新会话里分别再问一次。被缓存的答案和摘要,可能在权限已经收回的情况下继续对外提供信息。 所有这些都不需要什么新工具。这就是你给一个新员工做入职时会做的权限审查。帖子里有一条回复说得比任何政策文档都好:**把它当成一个聪明但喝醉了的实习生来对待。**
查看原文

相似文章

你会把 AI agent 的登录权限划在哪条线上

Reddit r/AI_Agents

作者探讨构建会操作真实账户的 AI agent 时的授权边界:读取类操作允许常驻访问,而发送、消费、删除或发布类操作每次都需人工确认,并询问社区如何在大规模运行 agent 时处理写权限凭证。

终端是测试智能体最诚实的地方

Reddit r/AI_Agents

作者讨论在终端中运行 AI agent 时权限决策的不可见性,主张使用字段级读取范围、类型化记录以及对写操作进行人工审批,使每一步的权限决定都可见且可审计。

你们是如何保障 AI 基础设施安全的?

Reddit r/AI_Agents

探讨随着 AI agents 开始访问内部系统并自主执行操作,传统围绕'人使用单一应用'构建的安全边界失效的问题,并讨论应在 agent 层、网关层还是系统层实施策略控制,以及被拦截时如何保留 agent 运行上下文以便审计。

@knoYee_: https://x.com/knoYee_/status/2062780637677752366

X AI KOLs Timeline

作者复盘了使用多Agent协作三个月的经验,总结出五个主要痛点(如Agent间矛盾、忽略边界条件、自我审查失效、合并决策困难、压缩执行后暴露更难问题)和两个心得(只读审查Agent价值高、Agent矛盾暴露需求模糊),强调了人类在AI协作中的核心决策作用。