8.3 权限与访问控制

细粒度的权限控制是 LLM 安全的关键组成部分,尤其在智能体场景中更为重要。

8.3.1 访问控制基础

LLM 系统的访问控制需要考虑多个维度:

spinner

图 8-11:访问控制基础流程图

8.3.2 身份认证

确认访问者的身份是访问控制的前提。

认证方式

方式
适用场景

API Key

机器对机器调用

OAuth 2.0

第三方应用授权

JWT

会话状态传递

多因素认证

高安全场景

认证流程示例

spinner

图 8-12:身份认证时序图

8.3.3 授权模型

基于角色的访问控制(RBAC)

spinner

图 8-13:授权模型架构图

角色定义示例:

角色
权限

普通用户

基础对话、有限工具

高级用户

全部对话、更多工具

管理员

系统配置、日志查看

基于属性的访问控制(ABAC)

ABAC 提供更灵活的控制,适合复杂场景。

[!TIP] 开源工具参考:OPA(Open Policy Agent)arrow-up-right是云原生通用策略引擎,使用 Rego 语言编写策略,非常适合在 LLM 网关中实现 RBAC/ABAC 访问控制;Casbinarrow-up-right 是支持多种编程语言的高效访问控制框架,适合在业务层管控“谁能调用哪个模型执行什么操作”。

8.3.4 LLM 特有的权限控制

能力权限

工具权限

spinner

图 8-14:LLM 特有的权限控制流程图

数据权限

8.3.5 上下文相关的权限

权限决策可能依赖于运行时上下文:

条件权限

条件
权限调整

时间

工作时间外限制敏感操作

地点

特定地点允许更多权限

设备

托管设备有更高权限

风险评分

高风险行为需要确认

动态权限升级

spinner

图 8-15:上下文相关的权限时序图

8.3.6 智能体权限设计

智能体系统的权限控制尤为关键:

权限边界

spinner

图 8-16:智能体权限设计流程图

分级执行策略

8.3.7 多租户向量数据库安全

在多租户 LLM 应用中,向量数据库(Vector DB)常被用来存储和检索知识库、用户文档等数据。多租户场景下的向量库隔离至关重要,否则会出现跨租户数据泄露或相互污染:

跨租户检索中毒

攻击者可能通过共享向量库中的恶意文档影响其他租户的检索结果:

  • 在向量库中注入带有隐蔽恶意指令的文档(如精心设计的 RAG 投毒)。

  • 当其他租户发起查询时,检索系统返回这些恶意文档,从而在 LLM 的上下文中引入攻击载荷。

防御措施

物理隔离

  • 每个租户使用 独立的向量索引(Collection/Namespace),而非共享一个全局索引。

  • 独立索引意味着物理分离,A 租户的查询无法跨越到 B 租户的向量空间。

逻辑隔离

  • 在检索查询中强制附加租户标识过滤条件(如 WHERE tenant_id = current_user.tenant_id)。

  • 即使向量库在物理上可能有重叠,逻辑层的租户过滤确保返回结果属于当前租户。

结果验证

  • 检索返回结果后,验证每个文档的所有权标签(ownership metadata)。

  • 确认 owner_tenant_id 匹配当前请求的租户,否则拒绝该文档被纳入后续 LLM 推理。

缓存污染风险

共享缓存(如 Redis、Memcached)可能导致一个租户的查询结果被另一个租户错误地获取:

风险场景

  • 租户 A 查询“机密数据”,结果被缓存。

  • 租户 B 发起相同查询(或相似的语义向量),从缓存中获取了 A 的结果,导致跨租户泄露。

防御策略

  • 缓存键必须包含租户标识:将 tenant_id 作为缓存键的一部分(如 cache_key = f“search:{tenant_id}:{query_hash}”)。

  • 敏感场景禁用共享缓存:对于涉及高度机密数据的查询或租户,禁用跨租户共享缓存,每次都从向量库直接检索。

  • 缓存失效策略:当租户的数据发生变更时,及时清除相关的缓存条目,避免过时的错误信息被返回。

8.3.8 权限审计与监控

审计日志

异常检测

spinner

图 8-17:权限审计与监控流程图

监控指标

指标
描述

权限拒绝率

被拒绝的请求比例

权限升级频率

请求额外权限的频率

异常行为率

可疑行为的比例

权限与访问控制是 LLM 安全的基础设施。良好的权限设计可以显著降低安全风险。

最后更新于