跳到主要内容

第 2.13.2 节:把 RBAC、ABAC 和 RAG 权限统一到访问控制模型

RBAC、ABAC 与 RAG 权限不仅要能运行,还要明确权限边界、审批条件和审计记录。完成本节后,你应该能够设计 RBAC、ABAC 与 RAG 权限的角色权限、审批条件、审计记录和越权处理。

核心概念​

Authentication(认证)​

人话解释:认证是确认“你是谁”。例如用户登录、客服登录、管理员登录、API Key(接口密钥)识别服务身份。

项目位置:客服工作台里,认证发生在用户进入系统、客服打开后台、Agent(智能体)调用内部工具之前。

工程动作:设计 user_id(用户编号)、role(角色)、tenant_id(租户编号)、session_id(会话编号)、auth_context(认证上下文)。不要让模型自己判断用户身份。

面试说法:我会把身份认证放在应用层和网关层,模型只能接收经过脱敏和授权后的上下文,不能直接决定“这个人是谁”。

Authorization(授权)与 Permission(权限)​

人话解释:认证确认你是谁,授权决定你能做什么。权限是授权结果的具体表达。

项目位置:同一个客服工作台里,普通用户只能看自己的订单,客服能看负责范围内的工单,主管能看团队统计,管理员能配置工具和知识库。

工程动作:按资料、工具、字段和动作分别授权。资料权限控制“能不能检索到”;工具权限控制“能不能调用”;字段权限控制“能不能看到手机号、地址、金额”;动作权限控制“能不能创建、修改、发送、退款”。

面试说法:我不会只做页面按钮权限,而是把权限落到检索过滤、工具网关、字段脱敏和审计日志里。

RBAC(基于角色的访问控制)与 ABAC(基于属性的访问控制)​

人话解释:RBAC(基于角色的访问控制)按角色授权,ABAC(基于属性的访问控制)按用户、部门、租户、地区、订单归属、资料等级等属性做更细判断。

项目位置:客服工作台可以用 RBAC(基于角色的访问控制)定义用户、客服、主管、管理员;再用 ABAC(基于属性的访问控制)判断某个客服是否能看某个租户、某个订单或某个资料。

工程动作:设计角色表、权限表、资料标签、工具风险等级和策略规则。RAG(检索增强生成)查询时必须带上权限过滤条件。

面试说法:我会用 RBAC(基于角色的访问控制)做基础角色,用 ABAC(基于属性的访问控制)处理多租户、部门和业务对象归属,避免只靠粗粒度角色导致越权。

Guardrail(护栏)​

人话解释:Guardrail(护栏) 是系统在输入、处理、工具、输出和审批节点上的安全检查机制。

项目位置:客服工作台里,护栏可以检查用户输入是否恶意、检索结果是否有权限、工具参数是否合规、模型输出是否泄露隐私、高风险动作是否需要人工审批。

工程动作:护栏不是一个单点。要把它拆成 input guardrail(输入护栏)、retrieval guardrail(检索护栏)、tool guardrail(工具护栏)、output guardrail(输出护栏)、approval guardrail(审批护栏)和 runtime guardrail(运行时护栏)。

面试说法:我理解的 Guardrail(护栏)不是一句安全 Prompt(提示词),而是一组自动校验、人工审批、权限控制和审计机制。

Prompt(提示词) Injection(提示注入)​

人话解释:Prompt Injection(提示注入)是用户或外部资料中藏有恶意指令,试图让模型忽略系统规则、泄露资料、调用工具或输出不该输出的内容。

项目位置:客服 Agent 可能从用户输入、网页、PDF(便携式文档格式)、工单历史、邮件内容和工具返回结果中读到恶意指令。

工程动作:不要假设模型能永远分清“指令”和“资料”。要降低被攻击后的影响:限制工具权限、隔离资料、禁止高风险自动执行、记录异常、转人工。

面试说法:我不会把 Prompt Injection(提示注入)当成普通关键词过滤问题。我的策略是降低模型被诱导后的权限和影响范围,而不是相信一次过滤能彻底解决。

Human-in-the-loop(人工参与闭环)​

人话解释:人工参与闭环是让人类在高风险节点做确认、审批或复核。

项目位置:退款、发券、发送外部通知、批量更新资料、删除工单、改合同条款,都不应该由 Agent 自动完成。

工程动作:设计审批请求、审批状态、审批人、审批理由、过期时间、执行结果和审计记录。审批前后都要重新校验权限和参数,防止审批绕过。

面试说法:我会按风险分级决定是否需要人工审批。审批不是降低智能化,而是让系统能进入企业生产环境。

本章在客服工作台中的位置​

本章可以理解为客服 Agent 工作台的安全控制面。

工作台层级本章负责什么典型控制点
用户入口层认证、限流、输入安全登录、租户、用户身份、恶意输入、频率限制。
会话状态层状态边界、敏感字段隔离session(会话)状态、订单归属、缺失字段、风险等级。
知识检索层资料权限、引用安全tenant_id(租户编号)、permission_tags(权限标签)、source_id(来源编号)、版本。
工具调用层工具白名单、权限、幂等查订单、建工单、发短信、退款审批。
模型输出层脱敏、拒答、转人工不输出完整手机号、地址、内部策略和无依据结论。
审批审计层高风险动作复核审批记录、安全事件、Trace ID(追踪编号)、复盘。

如果把第 1.6 章 Tool Calling(工具调用)理解为“让 Agent 能办事”,本章就是“让 Agent 只在允许范围内办事”。

系统流程图​

这张图里最重要的是:安全检查不是只在开头或结尾做一次,而是在输入、检索、工具、审批和输出多个节点重复出现。

读图重点:先读上组:认证、输入护栏和权限上下文决定能检索什么,候选片段还要二次复核;再读下组:工具请求经过网关与审批,回答草稿经过输出护栏,任何不可返回路径都拒绝或转人工并记安全日志。

风险分级​

安全设计要先分级。没有分级,系统就会在两个极端之间摇摆:要么什么都不敢自动化,要么什么都交给 Agent。

风险等级典型动作自动化策略验收重点
L0 信息整理总结公开 FAQ(常见问题)、解释公开政策可以自动执行引用来源准确。
L1 只读查询查知识库、查公开产品信息自动执行,但要有权限过滤不越权、不泄露。
L2 敏感只读查订单、查客户资料、查内部工单需要身份和对象归属校验只返回必要字段。
L3 低风险写入创建普通工单、提交反馈用户确认后执行幂等、防重复、可撤回。
L4 外部副作用发短信、发邮件、发优惠券人工审批或强规则审批防滥用、防误发、记录审批。
L5 高风险动作退款、改合同、删除数据、批量发布必须人工审批和复核双人复核、审计、回滚方案。

面试时,不要把风险说成“安全等级高低”这种空话。要能说明:风险等级决定工具能不能自动执行、需不需要审批、需要记录哪些日志、失败后怎么兜底。

模块拆分​

安全章节可以拆成 9 个模块。

模块职责输入输出
Identity Context(上下文)提供用户、租户、角色、部门和会话信息登录态、服务凭证auth_context(认证上下文)。
Permission Policy(权限策略)判断资料、工具和动作是否允许用户属性、资源属性、动作类型allow(允许)、deny(拒绝)、review(需审批)。
Retrieval Filter(检索过滤)给 RAG 查询加权限条件查询、租户、资料标签可访问的候选资料。
Tool(工具) Gateway(网关)统一校验工具调用tool_name(工具名称)、参数、风险等级工具执行或拒绝原因。
Guardrail(护栏) Engine(护栏引擎)检查输入、输出、工具和审批请求内容、模型输出、工具结果安全决策。
Approval Center(审批中心)管理人工审批高风险动作请求审批结果和执行许可。
Redaction Service(服务层)隐藏敏感字段客户资料、订单资料、日志内容脱敏后的可展示内容。
Audit Logger(审计日志器)记录安全决策和工具动作Trace ID(追踪编号)、决策、执行结果可检索审计记录。
Incident Monitor(安全事件监控)发现异常和告警安全日志、失败率、越权尝试告警、封禁、复盘任务。

这些模块不一定都要做成独立服务。作品集或中小项目可以先在一个后端项目里实现模块边界,关键是职责要清楚。

继续学习​