RH
RouterHub AI API 中转站导航与平台推荐
博客

模型评测也要最小权限:AI 编程代理的临时令牌与出网控制清单

OpenAI 与 Hugging Face 近期披露模型评测安全事件。对使用 AI 编程代理和模型评测流水线的团队,更紧迫的问题是:如何让每次任务只拿到必要、短时且可追溯的权限。

muchacha 2026-07-28 02:18:29

正文

模型评测、自动化基准和 AI 编程代理常被当作开发效率工具:拉取代码,下载权重,运行脚本,再把结果推回仓库或看板。可一旦它们能读私有模型、调用云 API、访问代码仓库和网络,风险边界就不再是“一条 API Key 有没有泄露”,而是一次任务究竟能以谁的身份、在多久内、对哪些资源做什么。

7 月 21 日,OpenAI 与 Hugging Face 公布了与模型评测有关的安全事件早期发现,并提示防御方关注高级网络能力带来的风险。公开摘要没有给出可用于复现攻击的完整路径,但它足以提醒团队:模型评测和 Agent 运行器应当像生产工作负载一样设计身份、权限和审计,而不是把长期密钥写进环境变量后交给自动化脚本。

先分清三种身份

一条 Agent 任务里至少有三种身份,混在一起是多数权限失控的起点。

身份 它实际要做的事 不该天然拥有的权限
触发者 发起评测、提交代码或批准高风险操作 把个人管理员令牌交给运行器
运行器 创建临时环境、拉取依赖、上报状态 读取整个组织的模型、仓库和云账号
Agent / 工具 在限定目录内分析、生成或调用指定工具 自由访问网络、密钥存储和任意写入接口

最小权限不是让模型“学会谨慎”。权限应由下游资源在每次调用时验证。OWASP 将工具过多、权限过大和自主性过强都列为 Excessive Agency 的组成部分,并明确建议把授权放在下游系统,而不是让 LLM 自己判断一项操作是否允许。

用短期凭证替代共享长钥匙

最实用的改造是将“运行器拿着固定密钥”改成“任务拿着可验证的工作负载身份”。以 CI 为例,GitHub Actions 的 OpenID Connect 可以让工作流直接向云服务交换短期令牌;Hugging Face 也说明,CI 可在每次运行开始时用 OIDC 身份交换短期 Hub 令牌,而不必把访问令牌保存为 CI secret。

这套模式适用于模型评测、微调和 AI 编程代理:

  1. 任务启动时,运行器取得带有仓库、分支、环境和运行编号等声明的身份令牌。
  2. 凭证代理验证这些声明,只签发本次任务所需的短期访问凭证,例如仅允许读取一个门控模型、写入一个结果前缀或调用一个指定的推理端点。
  3. 资源服务继续校验操作范围。下载权重、写评测结果、触发部署应是不同权限,不能被一个宽泛令牌一并覆盖。
  4. 任务结束即使忘记清理环境,凭证也应自然过期;中止或异常时还应能撤销该任务的访问。

短期不等于安全。令牌仍可能在有效期内被带走,因此范围要小、使用次数要少、受众要明确。Hugging Face 的文档把生产环境的细粒度令牌作为推荐做法,并建议按应用或用途拆分令牌;这正是 Agent 工作负载需要采用的粒度。

把出网视为一项显式能力

许多评测容器默认能访问任意地址。这样一来,提示词、工具输出、依赖安装脚本或被污染的仓库内容都可能诱导任务向外部发送数据。对于一个只需要下载批准模型并调用一个评测 API 的任务,自由出网是额外权限,不是默认条件。

建议按任务维护出网策略:

  • 默认拒绝外连,只允许解析和访问经过批准的域名与端口。
  • 将模型下载、包安装、推理调用分别放入可审计的允许列表;不要用一个通配规则覆盖所有供应商。
  • 对上传请求和大流量外传设置额外告警或人工批准,尤其是任务没有声明上传需求时。
  • 把代码执行环境、密钥服务和结果存储放在不同网络边界。运行器可以请求临时凭证,不应直接枚举或导出密钥。

NIST 的零信任架构强调,不应因为资源在同一网络或同一组织就获得隐式信任;认证和授权应在建立资源访问前独立完成。放到 Agent 场景,就是不能因为任务来自“内部 CI”便默认允许它访问内部模型、数据库或管理接口。

给高风险动作增加不可绕过的关口

模型能否调用工具,与工具最终是否执行,应该是两层决策。读公开文档、在临时目录写测试输出可以自动完成;删除数据、推送生产分支、发布模型、扩大网络权限则应经过策略服务或人工确认。

一个可落地的策略输入至少包含:任务身份、资源、动作、数据敏感级别、目标环境、凭证到期时间和审批状态。策略结果应记录到不可由 Agent 修改的审计日志中,并为每个请求带上任务 ID 和追踪 ID。这样出现异常时,团队能回答三个基本问题:谁触发了任务、它获得了什么权限、它实际访问了什么。

上线前的七项检查

  1. 是否为每个评测、CI 或 Agent 任务使用独立的工作负载身份,而不是共享个人或组织管理员密钥?
  2. 凭证是否短期、限定受众和资源范围,并能在任务失败时撤销?
  3. 下载模型、读取私有代码、写入结果和部署是否使用不同权限?
  4. 出网是否默认收紧,并对允许的主机、端口和上传行为保留记录?
  5. 工具接口是否只暴露完成任务所需的动作,避免把通用 shell 或全权限 SDK 当成默认工具?
  6. 高风险操作是否由下游策略服务再次授权,而非只依赖模型的判断?
  7. 是否能按一次运行还原身份、令牌签发、资源访问、工具调用和网络请求?

安全事件的价值不在于猜测尚未公开的攻击细节,而在于检查自己的默认设计。团队可以从最容易落地的一步开始:先替换 CI 和评测流水线中的长期令牌,再把 Agent 的出网和高风险工具拆成需要显式授予的能力。这样即使某次任务被误导,影响范围也被限制在一条短期、可审计的权限链内。

参考来源

相关阅读