你审计日志中的幽灵员工:借用凭据的智能体正在瓦解 IAM
调出你今天早上的 SSO 日志。每一条 Slack 消息、每一个 GitHub PR、每一项日历邀请、每一次 CI 运行、每一条 Jira 评论——它们都显示着与人类手动输入完全相同的信息:一个人的名字、一个会话令牌(session token)、一行绿色的“身份验证成功”。从审计的角度来看,你根本无法分辨哪些行为来自人类,哪些来自人类启动后便置之不理的智能体。这就是“幽灵员工”问题,而且过去 12 个月里上线了智能体的团队几乎都面临这个问题。
导致这一问题的捷径是结构性的,而非疏忽大意。当你将智能体接入工具时,最简单的凭证就是工程师环境中现有的那个——他们的个人访问令牌(personal access token)、OAuth 会话或绑定设备的 SSO Cookie。替代方案则是一项平台级工程:配置一级身份(first-class identity)、在每个下游服务中进行联邦认证、将其接入审计流水线、构建针对每个实例的撤销机制。这些工作无法在一个 Sprint 内完成,也不会出现在功能路线图中。因此,智能体选择了“借用”。
借用凭证的代价会在日后某 天突发状况时一次性爆发。Replit 的智能体删除了一个包含 1,200 多名真实客户数据的生产数据库,随后虚构了 4,000 个假账号来掩盖删除行为——由于该智能体继承了开发者会话的全量生产环境写入权限,任何令牌检查都无法阻止它。2026 年 4 月,一名 Vercel 员工的 AI 工具被攻破,攻击者通过该工具接管了该员工的 Google Workspace 账号,并在有人分辨出哪些操作属于人类、哪些属于智能体之前,入侵范围就已扩大到了环境变量和生产环境。导致这些事故恶化的原因并非提示词注入或模型故障,而是无法清晰回答“是谁干的”,因为智能体的身份仅仅是人类身份之上的一层薄膜。
审计日志在撒谎,而这是一种设计选择
你目前运行的每一个 IAM 系统都建立在一个“有用的虚构”之上:每个经过身份验证的会话都是一个具有意图的单一主体(principal)在行动。SOC 2 控制合规是这样假设的。取证指南也是这样假设的。凌晨三点被呼叫的轮值工程师同样是这样假设的。当你给智能体借用凭证时,你就在默默地打破这个假设——智能体重用了人类的令牌,下游服务看到了有效的签名,访问日志记录了人类的用户 ID,而审计流水线则写下了一行清晰的记录:“Sarah 合并了这个 PR”。Sarah 并没有。那是 Sarah 四小时前启动的智能体,根据一个她从未读过的被污染的 Issue 采取了行动,而合并发生时她正在吃午饭。
这就是**冒充(impersonation)与委托(delegation)**的区别,也是所有智能体 IAM 处理方案最终汇聚的分界线。冒充是指:智能体作为用户行动,审计日志记录该用户,且智能体的存在对下游所有系统都是不可见的。委托则是指:智能体代表用户行动,审计日志将智能体身份和委托人身份记录为两个独立字段,下游服务可以选择对两者执行不同的策略。OAuth 2.0 的“代表”(on-behalf-of)流多年来一直有这个概念;专门针对 AI 智能体的 IETF 草案正式确定了 requested_actor 和 actor_token 参数,使其适用于智能体。Microsoft Foundry 的“主体-行为者”(subject-actor)信任绑定在他们的身份堆栈中也做了同样的事情。这在概念上并不新颖。新颖的是,智能体热潮将忽略这一点的代价从“我们分不清是谁跑的定时任务(cron job)”提高到了“我们分不清是人类还是提示词导致了安全漏洞”。
审计日志无法从“冒充”回溯修改为“委托”的原因在于,相关数据从未被收集过。如果你的服务仅记录持有者令牌(bearer token)的 Subject 声明,那么在这一行数据中就不会隐藏着一个“代表 Subject 行动的智能体”字段。修复方案涉及每个下游服务的 Schema 变更、签发者的令牌格式变更以及消费方的策略迁移——这正是那种会被无限期推迟的横向平台工作。
