企业内部做 AI Agent 落地,最容易被低估的不是模型能力,而是权限边界。很多团队把精力放在提示词工程、工具调用、上下文窗口上,结果 Agent 接上数据库、支付、内部 API 之后,才发现一个问题:大模型本身没有“安全边界”的概念,它只会按照给定凭证去执行。凭证给多了,一个被提示词注入的 Agent 就能读全库、改配置、发消息;凭证给少了,业务链路跑不通,频繁报权限错误。
这次我们来看一套可以直接落到工程里的做法:把 Agent 权限拆成三层——分级授权、凭证隔离、签名许可。这套体系的思路不绑定具体框架,OpenAI Agents SDK、LangGraph、自研编排层都能用。重点解决三个问题:Agent 能做什么、用什么身份做、做之前是否需要二次许可。下面会给出权限模型、配置示例、验证流程和排查清单,偏架构设计,不是纯概念讲解。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 体系定位 | 面向 AI Agent 的企业级权限控制框架,覆盖“模型-工具-数据”三层访问链路 |
| 核心能力 | 分级授权、凭证隔离、签名许可、审计追踪 |
| 关键机制 | RBAC/ABAC 策略、短期凭证、密钥托管、操作签名、变更留痕 |
| 依赖组件 | 策略引擎、密钥管理服务(如 Vault / KMS)、签名服务、审计日志存储 |
| 部署方式 | 通常作为 Agent 编排层的中间件或 Sidecar 部署,与具体模型解耦 |
| 接口能力 | 权限校验 API、凭证签发 API、签名验证 API、审计查询 API |
| 批量任务 | 支持,批量任务建议统一走“任务级身份 + 独立凭证 + 签名工作流” |
| 是否绑定模型 | 不绑定,只要是走函数调用 / 工具调用的 Agent 都可以接入 |
| 推荐落地顺序 | 先做分级授权,再做凭证隔离,最后补签名许可 |
从实战角度看,这套体系的价值不在某个单一功能,而是把“权限”从代码里硬编码的if判断,升级成可配置、可审计、可撤销的基础设施。 Agent 权限越复杂,越需要这种分层设计。
2. AI Agent 安全的适用场景与边界
2.1 适合谁
这套方案最适合以下团队:
- 正在开发企业级 AI Agent,Agent 需要访问数据库、内部工单、邮件、代码仓库或云平台资源。
- 当前用“全局 API Key + 管理员账号”驱动 Agent 运行,担心越权风险。
- 需要满足内部审计要求,要求 Agent 的每一次敏感操作可追溯到具体任务和授权链路。
- 正在做多租户 SaaS 产品,每个租户的 Agent 必须互相隔离。
- 已经踩过 Agent 误调接口、删除数据、读取越权文件等生产事故。
2.2 能解决什么问题
第一,权限收敛。Agent 默认没有任何敏感操作权限,每个工具调用都要经过策略引擎判断。
第二,身份可追溯。Agent 执行任务时使用的不是固定主账号,而是任务级临时身份,出了问题能定位到具体任务。
第三,敏感操作可干预。高危险操作必须经过签名许可,没有签名的调用直接拒绝。
第四,遗留权限可回收。凭证设置了有效期,即使 Agent 会话泄露,攻击者拿到也是一串过期凭证。
2.3 不适合什么场景
- 纯个人玩票、只在本机跑个演示 Demo,不需要引入复杂权限体系。
- Agent 没有任何外部工具调用,只做文本生成,不存在权限放大的问题。
- 团队还没有基础的用户权限系统,直接上 Agent 权限治理会非常吃力。建议先把业务系统的用户权限理清。
2.4 合规与安全边界
AI Agent 权限体系本身是安全加固方案,但落地时必须注意几个边界:
- 涉及个人信息、用户画像、人脸声音等敏感数据时,即使有授权体系,也要额外确认数据使用范围和用户授权。
- Agent 代用户执行操作,建议保留“用户主动确认”的环节,避免 Agent 擅自下单、发布、转账。
- 凭证隔离只能降低泄露风险,不能防范恶意开发的模型后门,模型投毒属于供应链安全问题,需要单独治理。
- 审计日志里如果包含个人信息,日志系统本身也要做访问控制和脱敏。
3. 三层权限体系的总体设计
3.1 分层思路
三层权限体系对应 Agent 执行链路中的三个阶段:
| 层级 | 解决什么问题 | 核心机制 | 类比传统系统 |
|---|---|---|---|
| 分级授权 | 允许 Agent 做什么 | RBAC / ABAC、资源级权限、最小权限 | Linux 用户组、IAM 策略 |
| 凭证隔离 | 用什么身份做 | 短期凭证、任务级身份、密钥托管 | STS 临时凭证、服务账号 |
| 签名许可 | 高风险操作是否放行 | 操作签名、预授权确认、审计背书 | 双人复核、指令签名 |
实际执行时,Agent 的每一次工具调用都会经过这条链路:
用户请求 -> Agent 编排层识别意图 -> 分配任务级身份(凭证隔离) -> 权限策略引擎校验(分级授权) -> 风险等级判断 -> 低风险:直接执行 -> 高风险:进入签名许可,等待授权 -> 执行结果写审计日志3.2 核心原则
- 默认拒绝。白名单策略,没有明确允许的操作全部拒绝,不建议用黑名单。
- 最小权限。每个任务只拿完成任务所需的最小凭证集合。
- 权限不过期不释放。任务结束后立即回收临时凭证。
- 敏感操作强制二次确认。删除、转账、发布、变更生产配置必须走签名许可。
- 审计完整。谁在什么时候、用什么身份、调用了什么工具、结果如何,全部记录。
4. 第一层:分级授权
4.1 权限分级模型
分级授权不是简单给模型一个“管理员”或“普通用户”角色,而是要把“人- Agent- 工具- 数据资源”全部纳入模型。
推荐把权限分成五级:
| 级别 | 名称 | 能力范围 | 典型操作 |
|---|---|---|---|
| L0 | 无权限 | 不可访问任何工具 | 仅允许文本对话 |
| L1 | 只读权限 | 可读不可写 | 查询订单、读取文档、查询日志 |
| L2 | 执行权限 | 可执行低风险操作 | 发送通知、创建草稿、运行只读脚本 |
| L3 | 变更权限 | 可修改业务数据 | 更新订单状态、修改配置项、提交代码 MR |
| L4 | 管理权限 | 可管理资源或执行高风险操作 | 删除数据、批量迁移、修改权限、支付转账 |
每个 Agent 或每个任务默认落在 L1,只有任务确实需要更高权限时才临时提升。这里的提升不是永久授权,而是与凭证隔离、签名许可配合的临时放行。
4.2 角色与资源映射配置示例
下面给出一份简化版的权限策略配置,使用 JSON 描述,实际项目中可以换成 OPA(Open Policy Agent)、Casbin 或自研策略引擎。字段结构自行调整。
{ "roles": { "agent_reader": { "level": 1, "permissions": [ "db:select:order", "api:read:user_profile", "file:read:public_docs" ] }, "agent_operator": { "level": 2, "extends": ["agent_reader"], "permissions": [ "api:send:notification", "db:insert:operation_log" ] }, "agent_editor": { "level": 3, "extends": ["agent_operator"], "permissions": [ "db:update:order_status", "api:update:config" ], "sensitive_ops": [ "db:delete:order", "api:payment:transfer" ] } }, "resources": { "order_db": { "allowed_actions": ["select", "insert", "update"] }, "payment_api": { "allowed_actions": ["read", "transfer"], "transfer_requires_signature": true } } }这个配置想表达的关键点:敏感操作不放在普通 permissions 里,而是单独标记sensitive_ops。普通权限直接放行,敏感操作必须进入签名许可流程。
4.3 权限校验的代码结构
权限策略引擎的校验逻辑可以做成一个独立服务,Agent 编排层不要自己写权限判断,避免逻辑分散。
# 伪代码,实际字段按项目调整 def check_permission(task_identity: str, action: str, resource: str) -> bool: policy = load_policy(task_identity.role) permission_key = f"{action}:{resource}" if permission_key in policy["sensitive_ops"]: # 进入签名许可流程,当前调用被挂起 raise PermissionRequiresSignature(permission_key) if permission_key in policy["permissions"]: return True return False这里的关键设计是:权限校验只在编排层调用,工具层不再校验。否则 Agent 可以通过直接构造工具调用来绕过策略。
5. 第二层:凭证隔离
5.1 为什么不能共用主密钥
常见的错误做法是:给 Agent 一个全局 API Key,所有工具都走这个 Key,任务日志里所有操作都来自同一个身份。问题很明显:
- 权限无法区分,Agent 能访问所有资源。
- 审计无法定位,出了事故不知道是哪个任务干的。
- Key 泄露后影响面是全部资源,不是单个租户。
- Key 不能按任务回收,只能整体轮换。
凭证隔离的目的是让每个任务、每个 Agent 实例都拥有独立身份和独立凭证,生命周期与任务一致。
5.2 凭证隔离方案
推荐组合:
- 任务级身份。每个任务创建一个服务身份
agent-task-{taskId},绑定该任务所需角色。 - 短期凭证。不直接下发永久 Key,而是签发短期凭证,有效期 5 分钟到 30 分钟,任务结束立即销毁。
- 密钥托管。所有静态密钥放入 Vault / KMS,Agent 进程不接触真实密钥,运行时临时读取。
- 网络隔离。不同租户的 Agent 放在不同命名空间,网络策略默认拒绝跨命名空间访问。
5.3 凭证签发示例
下面是使用 Vault 风格的短期凭证签发逻辑,代码为伪代码,实际 API 因密钥管理平台而异。
import os import time import jwt # 伪代码:实际环境从 Vault 读取签发密钥 VAULT_TOKEN = os.environ.get("VAULT_TOKEN") VAULT_ADDR = os.environ.get("VAULT_ADDR", "http://127.0.0.1:8200") def issue_task_credentials(task_id: str, role: str, ttl_minutes: int = 15): """ 为一个 Agent 任务签发临时凭证。 """ # 1. 从 Vault 获取短暂凭证 # 这里简化为 JWT 演示,真实场景建议使用云厂商 STS 或 Vault 动态密钥 now = int(time.time()) payload = { "sub": f"agent-task-{task_id}", "role": role, "iat": now, "exp": now + ttl_minutes * 60, "scope": role_permissions(role), "jti": f"cred-{task_id}-{now}" } cred = jwt.encode(payload, VAULT_TOKEN, algorithm="HS256") # 2. 写入任务上下文,不写入 Agent 系统提示词 store_task_credential(task_id, cred, expire_at=now + ttl_minutes * 60) return cred def revoke_task_credentials(task_id: str): """ 任务结束立即回收凭证。 """ revoke_credential_in_vault(task_id) delete_task_credential(task_id)注意几个细节:凭证不能出现在模型 Prompt 中,否则模型可能把凭证当作普通文本输出到日志。凭证只能注入到工具调用上下文里。任务级身份建议带上taskId,方便审计日志追踪。
5.4 多层凭证的隔离边界
如果 Agent 需要访问数据库、云平台、内部服务,凭证隔离要贯彻到每一层:
- 数据库:为 Agent 创建只读账号,连接串由编排层动态注入,不写在 Agent 配置里。
- 内部 API:使用短期服务令牌,按角色订阅权限。
- 云平台:使用安全令牌服务(STS)的临时凭证,不持久化 AK/SK。
多个子 Agent 并行时,每个子 Agent 使用自己的任务身份,互不共享密钥。某个子 Agent 被诱导执行恶意操作,影响也限制在它自己的权限范围内。
6. 第三层:签名许可
6.1 签名许可要解决什么问题
分级授权解决“能不能做”,凭证隔离解决“用什么身份做”,但还有一个漏洞:高风险操作如果只靠角色判断,攻击者只需诱导 Agent 提升到高权限角色,就能做高危操作。
签名许可就是在高权限操作执行前,增加一道“外部授权”门槛。操作只有拿到授权方的签名后才能执行。授权方可以是用户本人、审批系统、或策略引擎配置的自动规则。没有签名的请求一律拒绝,即使 Agent 拿到高权限凭证也无法单独完成删除、转账、发布等操作。
6.2 签名许可流程
Agent 发起高风险操作 -> 策略引擎发现该操作需要签名许可 -> 操作挂起,生成签名请求 -> 授权方(用户/审批人/自动规则)审核 -> 授权方对请求内容哈希签名 -> Agent 携带签名重试 -> 策略引擎验证签名,校验通过后放行6.3 签名校验示例
下面用 HMAC 演示签名校验的思路。实际项目建议使用非对称签名,私钥由授权方保存,策略引擎只保存公钥,即使策略引擎被攻破也无法伪造签名。
import hashlib import hmac import json def generate_signature(secret: bytes, operation: dict) -> str: """ 授权方对操作内容签名。 operation 包含 action、resource、task_id、nonce 等关键字段。 """ raw = json.dumps(operation, sort_keys=True).encode("utf-8") return hmac.new(secret, raw, hashlib.sha256).hexdigest() def verify_signature(public_info: dict, signature: str, secret: bytes) -> bool: """ 策略引擎验证签名是否合法,并校验关键字段是否被篡改。 这里的 secret 在真实场景中应为授权方的公钥。 """ expected = generate_signature(secret, public_info) return hmac.compare_digest(expected, signature) # 示例:Agent 要删除一条订单记录 operation = { "action": "db:delete:order", "resource": "order_20260820_001", "task_id": "task_12345", "nonce": "a1b2c3d4", "requested_by": "agent-task-12345" } # 授权方签名 auth_secret = b"auth-secret" signature = generate_signature(auth_secret, operation) # 策略引擎验签 is_ok = verify_signature(operation, signature, auth_secret) print("签名验证结果:", is_ok)签名许可还需要注意:
- 防重放。签名请求里必须带
nonce或时间戳,策略引擎对已使用的nonce做去重。 - 限时有效。签名只能在一定时间内有效,比如 5 分钟,过期作废。
- 操作内容不可篡改。签名必须覆盖操作的所有关键字段,否则攻击者可以改一个字段再提交。
- 授权方不可抵赖。签名服务要记录授权记录,作为审计证据。
7. 落地部署环境准备与前置条件
三层权限体系不是一个大一统系统,而是围绕 Agent 编排层的一组中间件。部署前需要准备以下环境。
7.1 基础组件
| 组件 | 作用 | 可选实现 |
|---|---|---|
| 策略引擎 | 判断操作是否允许 | OPA、Casbin、自研策略服务 |
| 密钥管理服务 | 托管静态密钥、签发动态凭证 | Vault、KMS、云厂商 Secret Manager |
| 签名服务 | 生成和验证操作签名 | 自研签名服务、内部审批系统 |
| 审计日志存储 | 记录所有调用和授权记录 | Elasticsearch、ClickHouse、对象存储 + 数据库 |
| Agent 编排层 | 接入权限中间件 | OpenAI Agents SDK、LangGraph、自研编排 |
7.2 通用检查清单
以下命令只是检查思路,具体路径和版本需要按实际环境调整。
# 1. 确认 Python 版本,建议使用 3.10 以上,实际按项目要求 python3 --version # 2. 确认容器或虚拟化环境可用(如果采用容器化部署) docker --version # 3. 确认策略引擎服务地址 curl -I http://127.0.0.1:8181/v1/policies # 4. 确认密钥管理服务地址 curl -I http://127.0.0.1:8200/v1/sys/health # 5. 确认审计日志存储服务 curl -I http://127.0.0.1:9200/7.3 编码规范前置
- Agent 的提示词中不要出现任何密钥、凭证、内部地址。
- 工具定义统一走 schema,权限策略基于工具名和资源名做匹配,不要基于自然语言描述。
- 开放给 Agent 的工具尽量做到“单职责”,一个工具只做一件事,降低权限拆分难度。
- 部署时区分开发、测试、生产三套策略,别用同一套权限配置跑所有环境。
8. 功能测试与效果验证
8.1 测试维度
权限体系上线前,建议按下面的矩阵测试:
| 测试项 | 测试方法 | 预期结果 |
|---|---|---|
| 默认拒绝 | 未授予任何角色时直接调用工具 | 请求被拒绝 |
| 只读角色越权写操作 | 以 L1 角色尝试更新数据 | 操作被拒绝 |
| 高风险操作无签名 | 以 L3 角色直接调用删除接口 | 进入签名许可,未签名不放行 |
| 签名正确放行 | 授权方签名后重试删除接口 | 删除成功,审计有授权记录 |
| 签名过期/重放 | 同一签名提交两次或过期签名 | 第二次或过期请求被拒绝 |
| 凭证过期 | 任务结束 15 分钟后重试工具调用 | 凭证失效,需要重新签发 |
| 租户间越权 | 租户 A 的 Agent 访问租户 B 的资源 | 被隔离,拒绝访问 |
| 批量任务隔离 | 多个任务并发,各任务凭证不同 | 任务间互不影响 |
| 审计完整性 | 检查所有调用是否有日志 | 无遗漏操作 |
8.2 越权测试步骤
越权测试是最容易暴露权限配置问题的环节,建议按以下步骤执行:
- 创建一个只有只读身份的测试 Agent。
- 用测试 Agent 调用所有写操作工具。
- 观察策略引擎返回如何拒绝。
- 检查拒绝原因日志,确认不会因为校验逻辑漏洞直接放行。
- 使用一个跨租户的资源 ID 发起访问,验证隔离策略。
- 对高风险操作,验证未签名时请求是否被挂起等待授权。
- 验证授权签名过期后,请求是否被拒绝。
8.3 批量任务验证
批量任务场景更容易出现权限放大器问题。常见错误是:批量任务使用同一个高权限凭证跑全部任务,一旦某个子任务被恶意提示词诱导,整个批量任务都会越权。
正确的做法:
{ "task_id": "batch_20260820_001", "task_mode": "batch", "sub_task_list": [ "sub_task_001", "sub_task_002", "sub_task_003" ], "credential_policy": { "mode": "per_sub_task", "ttl_minutes": 15, "role": "agent_operator" } }批量任务中的每个子任务使用独立的短时凭证,任务完成后立即回收。如果某个子任务异常,只会影响它自己,不会波及其他任务。
9. 接口能力、审计与观测
9.1 统一接入方式
权限体系对外暴露四个核心接口,实际路径以项目实现为准:
| 接口 | 说明 |
|---|---|
| POST /api/v1/credentials | 为任务签发临时凭证 |
| DELETE /api/v1/credentials/{taskId} | 回收任务凭证 |
| POST /api/v1/check | 权限校验 |
| POST /api/v1/signatures/verify | 签名许可验证 |
9.2 权限校验请求示例
下面是一个通用调用示例,需要按实际项目的鉴权方式和接口路径调整。
curl -X POST http://127.0.0.1:8888/api/v1/check \ -H "Content-Type: application/json" \ -H "X-Credential: <临时凭证>" \ -d '{ "action": "db:update:order_status", "resource": "order_20260820_001", "task_id": "task_12345" }'返回结果示意:
{ "allowed": false, "reason": "requires_signature", "signature_request_id": "sig_req_98765" }当返回requires_signature时,Agent 不应自行尝试绕过,而应发起签名许可请求,等待授权。
9.3 审计日志格式
审计日志需要覆盖以下信息:
{ "timestamp": "2026-08-20T10:30:00Z", "event_id": "evt_001", "task_id": "task_12345", "agent_id": "agent_support_bot", "credential_id": "cred-task-12345-1724185800", "action": "db:delete:order", "resource": "order_20260820_001", "decision": "allowed_after_signature", "signature_ref": "sig_req_98765", "authorizer": "user_alice", "result": { "status": "success", "rows_affected": 1 } }审计日志建议采用追加写模式,不允许修改和删除。日志系统本身要做好访问控制,避免 Agent 或普通用户读取审计记录后掩盖痕迹。
10. 资源占用与性能观察
10.1 权限校验的开销
权限体系引入后,每次工具调用都会增加一次到几次的内部服务调用。需要重点观察:
- 策略引擎的 P99 延迟。如果单次策略判断超过 20ms 到 50ms,考虑加缓存或优化规则匹配。
- 凭证签发频率。高频任务如果每次都从 KMS 签发凭证,可能打爆服务配额,建议按任务粒度缓存。
- 签名验签的 CPU 开销。非对称签名比 HMAC 开销大,但对绝大多数业务量来说可以忽略,不需要刻意优化。
10.2 降低延迟的策略
- 权限判断结果做短期缓存,比如 30 秒,前提是对权限变更不敏感。
- 工具调用的权限匹配使用资源前缀索引,避免正则表达式全量匹配。
- 凭证签发模块与任务创建流程合并,避免 Agent 启动后再等待签发。
10.3 不稳定因素观察
- 如果 KV 服务变慢,凭证获取会阻塞 Agent 调度,需要给 Agent 编排层加超时和重试。
- 审计日志写入如果走同步链路,高峰期可能拖慢主流程。建议改为异步写`,先落本地或消息队列,再批量写入审计存储。
- 批量任务并发时,关注策略引擎的连接数,避免连接池耗尽。
11. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Agent 调用工具一直提示 permission denied | 角色未绑定或权限策略没覆盖该工具 | 查看策略引擎日志和角色配置 | 检查工具名与策略中 action 是否一致 |
| 某些用户可以通过 Agent 越权操作 | 只对 Agent 做了权限控制,业务 API 本身没有校验 | 检查业务 API 是否校验来自 Agent 的身份凭证 | 统一在 API 网关层校验身份,不只依赖 Agent 编排层 |
| 凭证过期后批量任务中断 | 批量任务时长超过凭证 TTL | 查看凭证有效期和任务耗时 | 延长 TTL,或改为任务内动态续期 |
| 签名验证失败 | 操作内容字段顺序或格式不一致 | 对比签名时的操作内容与验签时的内容 | 统一序列化规则,按字段排序、空值处理一致 |
| 签名被重放攻击 | 没有对 nonce 做去重 | 检查签名服务是否记录已用 nonce | 增加 nonce 或时间戳校验,过期作废 |
| 审计日志出现大量失败记录 | 权限策略配置过严或 Agent 高频尝试越权 | 分析失败原因分布 | 区分误拦截和恶意攻击,调整策略 |
| 某个租户可以访问另一个租户的数据 | 凭证隔离没有按资源边界透传 | 检查任务身份与资源归属关系 | 在资源访问时校验 tenantId 字段 |
| 策略引擎成为性能瓶颈 | 校验逻辑过重或缓存命中率低 | 查看 P99 延迟和缓存命中率 | 加缓存、优化规则、扩容 |
| Agent 把密钥输出到对话中 | 凭证注入方式错误,模型可能读取到上下文 | 查看会话日志中是否有密钥泄漏 | 凭证只注入工具调用上下文,不放入模型 Prompt |
12. 最佳实践与合规建议
12.1 落地优先级
不要试图一次性上全部三层。建议按顺序推进:
- 先做分级授权。把 Agent 所有工具调用纳入白名单策略。
- 再做凭证隔离。为每个任务签发短期凭证,替换全局密钥。
- 最后补签名许可。只对真正高风险的操作加签名门槛,避免影响大多数普通工具调用。
12.2 工程化建议
- 维护一套“最小可运行权限配置”,开发、测试、生产三套独立,相互之间不要复用密钥。
- 模型文件、Agent 配置、权限策略、凭证数据分目录管理,配错权限比配错模型参数更容易出事故。
- 批量任务必须加审计日志和失败重试,不能因为某个子任务失败就静默吞掉。
- 接口服务要限制访问范围,权限校验接口只允许 Agent 编排层的固定网段访问。
- 涉及真实用户数据、支付、发布、删除等操作时,必须有人工确认环节,不能完全交给 Agent 自动执行。
- 定期做权限巡检,回收长期不用的任务角色和凭证。
12.3 合规与安全边界
- 涉及人脸、声音、肖像、个人隐私数据的处理,必须先取得合法授权,并明确数据使用范围。
- Agent 代用户操作需要遵循“最小必要、用户知情、可撤销”的原则。
- 模型本身的安全不能靠权限体系兜底,提示词注入、模型投毒、供应链风险需要单独的检测手段。
- 审计日志中的敏感信息必须脱敏,日志访问权限也要纳入权限体系管理。
- 企业上线 Agent 前,建议走内部安全评审,明确事故响应和紧急熔断机制。
13. 总结与下一步
三层权限体系的核心价值,是把“大模型能做什么”从一个不可控的推测问题,变成一个可配置、可审计、可撤销的工程问题。分级授权决定行为边界,凭证隔离决定身份边界,签名许可决定高风险管理边界。三者配合,才能在企业环境中放心地把数据库、支付、内部系统交给 Agent 执行。
如果你想快速验证这套思路,建议先做一个最小原型:用策略引擎跑通分级授权,把 Agent 的数据库连接换成 15 分钟有效的临时凭证,再挑一个删除类操作加上签名校验。跑通之后,基本就能摸清自己项目里哪些地方是最危险的。
最容易踩的坑有三个:一是权限策略只覆盖了编排层,工具内部没有二次校验;二是凭证写进了系统提示词,模型一长上下文就把密钥漏出来;三是签名许可没有防重放,被拦截的请求被重新提交。
先把这三个堵住,再谈更复杂的安全能力。后续可以继续扩展的方向包括:基于用户行为动态调整权限等级、把权限策略接入 CI/CD 做自动变更审批、以及将审计日志接入风险监控平台做异常行为检测。对做企业级 AI Agent 的团队来说,这套“权限三层”建议收藏备用,后面接更多内部系统时一定能用上。