2. AI应用身份体系架构

在传统应用安全中,身份体系通常围绕“人”和“服务账号”两类主体展开。但在AI应用里,一次请求的完成往往要经过用户、服务、模型、Agent、工具五个层次的协作,每一层都有独立的身份语义、凭证形式和生命周期。如果把它们混为一谈,就会出现权限放大、凭证泄漏、审计断链等典型问题。本节的核心任务是:先区分五类身份,再建立它们之间的映射关系,最后用生命周期管理把“谁在什么时刻以什么身份做了什么”串成可追溯的链路。

五类身份的本质区别

用户身份代表真实的人或外部系统,是权限的最终来源。它通常由企业IdP(如OIDC/SAML)签发,携带用户ID、租户、角色、部门等声明。用户身份的关键特征是“不可伪造的意图来源”——所有下游操作最终都要能回溯到某个用户或某个明确的系统调用方。

服务身份代表AI应用自身的后端组件,例如API网关、编排服务、检索服务、审计服务。它解决的是“组件之间如何互信”的问题,常用mTLS证书、SPIFFE ID、Kubernetes ServiceAccount或云平台IAM Role表达。服务身份不应直接继承用户权限,而应只拥有完成自身职责所需的最小权限。

模型身份代表被调用的模型端点或模型版本。它不是一个“人”,但需要被识别和约束:哪个模型、哪个版本、部署在哪个区域、允许处理哪类数据。模型身份常用于路由、配额、内容策略和审计,例如区分“gpt-4o-prod-v3”与“内部微调模型-finance-v2”。

Agent身份是AI应用中最容易被忽视的一类。Agent是具备规划、记忆和工具调用能力的执行体,它可能代表用户执行多步任务。Agent身份需要回答:这个Agent属于哪个用户会话?它的授权范围是什么?它能调用哪些工具?它的记忆和中间状态归谁所有?实践中常用“Agent实例ID + 委托链”来表达,确保Agent不能越权代表用户。

工具身份代表Agent可调用的外部能力,如数据库查询、工单创建、邮件发送、代码执行。工具身份的核心是“能力边界”:每个工具应有独立的凭证、独立的权限策略和独立的审计记录。工具凭证不应长期有效,也不应被Agent直接持有明文。

关键原则:用户身份是“意图源”,服务身份是“信任基”,模型身份是“资源标签”,Agent身份是“委托执行者”,工具身份是“能力边界”。五者不能互相替代,也不能简单地把用户Token一路透传到工具层。

身份映射:从用户请求到工具调用

一次典型的AI请求可以抽象为如下映射链:用户通过前端登录,获得用户Token;前端调用AI网关,网关验证用户Token并换取服务身份凭证;编排服务根据任务创建Agent实例,生成Agent身份并绑定用户委托声明;Agent决定调用某个工具时,由工具代理服务用工具身份向目标系统发起调用。整条链路上,每一跳都应携带“原始用户ID + 当前主体ID + 委托范围”,而不是只传一个笼统的Bearer Token。

映射关系的设计要点有三条。第一,委托要显式:Agent身份必须携带“代表谁”的声明,例如act_as: user_1024,且该声明由可信服务签发,不能由Agent自行填写。第二,权限要收敛:每一跳只授予完成当前步骤所需的最小权限,工具身份不应拥有用户全部权限。第三,审计要连续:所有身份标识应写入同一条trace,便于事后还原完整调用链。

AI应用五类身份映射与委托链 用户身份 OIDC / SAML user_1024 · 租户A 服务身份 mTLS / SPIFFE ai-gateway · 编排服务 模型身份 模型ID / 版本 / 区域 gpt-4o-prod-v3 Agent身份 Agent实例ID + 委托链 act_as: user_1024 工具身份(能力边界) db-query · ticket-create · mail-send · code-exec 短时凭证 · 独立策略 · 独立审计 Token交换 路由/配额 推理结果 工具调用请求(携带委托声明) 统一审计链:trace_id = tr-9f3a-2024 user_1024 意图来源 ai-gateway 服务主体 agent-7c2e 委托执行 db-query 工具能力 gpt-4o-v3 模型版本

生命周期管理:签发、轮换、撤销与归档

五类身份的生命周期并不相同,必须分别设计。用户身份通常由IdP管理,生命周期以“入职—转岗—离职”为节点,AI应用只消费其声明,不自行维护密码。服务身份的生命周期与部署绑定:容器启动时通过SPIFFE或云IAM获取短时证书,默认有效期可设为1小时,滚动更新时自动轮换,实例销毁即失效。模型身份的生命周期跟随模型版本:上线时注册模型ID、版本、区域、数据分级标签;下线时标记为deprecated并停止路由;保留期结束后从审计索引中归档。

Agent身份的生命周期最需要精细控制。建议采用“会话级Agent实例”:每次用户会话创建一个Agent实例,实例ID与用户ID、会话ID绑定,默认存活时间不超过会话时长(例如30分钟),任务完成后主动销毁。Agent的委托声明应设置明确的过期时间,且不能跨会话复用。如果Agent需要长期记忆,记忆存储应使用独立的服务身份访问,而不是让Agent身份长期持有记忆库凭证。

工具身份的生命周期以“短时、单次、最小权限”为原则。推荐做法是:Agent不直接持有工具凭证,而是向工具代理服务请求一次性的能力令牌(capability token),令牌中限定工具名、参数范围、有效期(如60秒)和调用次数。工具代理服务验证Agent的委托声明后,用工具身份向目标系统发起调用。这样即使令牌泄漏,攻击窗口也极短,且无法越权调用其他工具。

常见反模式:把用户Token直接透传给工具层;让Agent长期持有数据库密码;用同一个服务账号代表所有Agent;模型身份缺失导致无法按版本审计。这些做法都会让身份体系退化为“一个万能凭证”,使最小权限和审计追溯同时失效。

落地检查清单

在工程实现中,可以用以下清单快速核对身份体系是否完整。第一,每个请求是否携带原始用户ID和当前主体ID?第二,Agent身份是否包含显式委托声明,且由可信服务签发?第三,工具调用是否经过代理服务换取短时令牌,而非直接使用长期凭证?第四,模型身份是否写入审计记录,能否按模型版本回溯?第五,所有身份标识是否进入同一条trace,支持端到端还原?第六,离职或转岗时,用户身份失效能否级联导致Agent实例和工具令牌同步失效?