4. AI服务接口授权与访问控制
认证解决“你是谁”,授权解决“你能做什么”。在AI服务接口中,授权比传统业务系统更复杂:调用方不仅要访问某个HTTP端点,还要在端点内部指定模型、提示模板、工具函数、知识库分区、推理参数上限等资源。如果只做“登录即可调用”的粗粒度控制,越权风险会以多种形态出现——低权限用户调用高价值模型、跨租户读取他人知识库、通过参数注入绕过工具白名单、用超长上下文拖垮共享推理资源。本节围绕RBAC、ABAC、模型能力授权与策略引擎,说明如何把授权决策落到每一次推理请求上。
一、从RBAC到ABAC:授权模型的演进
RBAC(基于角色的访问控制)以“用户—角色—权限”三层映射为核心。例如在AI平台中定义viewer、app_developer、model_operator、tenant_admin四类角色,app_developer可调用/v1/chat/completions但只能使用gpt-4o-mini级别模型,model_operator可发布模型版本但不能读取用户对话内容。RBAC的优点是易管理、审计清晰,缺点是难以表达“同一角色在不同租户、不同时段、不同数据敏感级别下权限不同”的细粒度需求。
ABAC(基于属性的访问控制)用主体属性、资源属性、操作属性和环境属性共同计算决策。典型策略可表达为:当subject.tenant_id == resource.tenant_id且subject.clearance >= resource.data_class且environment.time在工作时段内时允许访问。ABAC灵活但策略数量增长快,需要策略引擎统一管理。实践中常采用RBAC+ABAC混合:角色决定基础能力边界,属性策略做租户隔离、数据分级和动态约束。
二、模型能力授权:把“能调用”细化为“能用什么模型、用多少”
模型能力授权是AI接口特有的授权维度。同一个/v1/chat/completions端点,背后可能挂载多个模型,成本、延迟、合规等级差异巨大。建议建立“模型能力授权表”,把模型按能力等级分层,例如:
| 能力等级 | 示例模型 | 允许角色 | 单次最大Token | 日调用配额 |
|---|---|---|---|---|
| L1 基础 | 轻量对话模型 | viewer, app_developer | 4,096 | 2,000 |
| L2 增强 | 通用大模型 | app_developer, model_operator | 16,384 | 500 |
| L3 高价值 | 旗舰推理模型 | model_operator(需审批) | 32,768 | 50 |
| L4 敏感 | 含敏感数据微调模型 | tenant_admin + 数据分级达标 | 8,192 | 20 |
授权判定时,策略引擎先检查角色是否在allowed_roles中,再校验请求的max_tokens是否超过该等级上限,最后检查当日配额余量。任一不满足即拒绝,并返回明确的错误码,例如MODEL_TIER_FORBIDDEN或QUOTA_EXCEEDED,便于调用方定位问题。
三、细粒度策略引擎的实现要点
策略引擎应独立于业务代码,以“策略即配置”的方式管理。推荐使用类似OPA/Rego或Cedar的策略语言,输入为JSON格式的请求上下文,输出为Allow/Deny/Step-up。一个简化的策略判定输入示例:
{
"subject": {
"user_id": "u_1024",
"tenant_id": "t_acme",
"roles": ["app_developer"],
"clearance": 2
},
"resource": {
"endpoint": "/v1/chat/completions",
"model": "general-large",
"model_tier": 2,
"data_class": 2,
"tenant_id": "t_acme"
},
"action": "invoke",
"environment": {
"time": "2025-06-10T10:30:00+08:00",
"ip_zone": "corp",
"risk_score": 12
}
}
策略引擎按顺序执行:租户一致性检查 → 角色-端点匹配 → 模型等级与clearance比较 → 数据分级校验 → 环境风险评分判断。若risk_score超过阈值(例如80),即使其他条件满足也返回Step-up,要求二次认证或人工审批。这种“默认拒绝、显式允许”的设计能有效收敛越权面。
四、越权风险防控的落地检查
越权风险往往不在单点,而在“认证通过后”的信任惯性。建议在接口层做三项强制检查:第一,所有资源查询必须携带tenant_id过滤条件,禁止仅凭资源ID查询;第二,工具调用(Function Calling)必须经过独立白名单校验,不能因为模型“决定调用”就放行;第三,管理类端点与推理端点使用不同的鉴权中间件,避免角色继承导致纵向越权。
以一个实际排障场景为例:某租户反馈“A用户能看到B用户的会话列表”。排查发现会话查询接口只校验了登录态,未校验session.tenant_id == subject.tenant_id。修复方式是在数据访问层强制注入租户过滤,并在策略引擎中增加一条ABAC规则:resource.tenant_id == subject.tenant_id,否则Deny。修复后通过构造跨租户请求验证返回403,并确认审计日志中记录了policy_id: tenant_isolation_v2。
综上,AI服务接口的授权体系应以RBAC划定能力基线,以ABAC处理租户、数据分级和环境动态约束,以模型能力授权表控制模型与配额,以独立策略引擎统一判定,并通过审计闭环持续发现和收敛越权风险。只有把授权从“端点级”下沉到“模型级、工具级、数据级”,才能在开放AI能力的同时守住安全边界。