09——安全、合规与治理

安全、合规与治理:Agent 上线前必做的系统性防护清单


开篇:为什么 Agent 比普通聊天更危险

普通聊天模型的问题通常是"答得不准"。

而 Agent 系统多了两件会放大风险的能力:

  1. Tool Calling(能执行):一旦越权,影响可能是资金/数据/权限层面的事故
  2. RAG(能检索):一旦检索越界或提示注入,可能导致敏感信息泄露

所以 Agent 的安全治理必须同时覆盖:

  • 输入层:用户和外部内容是如何注入指令的
  • 检索层:检索到的内容是否越权、是否被污染
  • 执行层:工具调用是否遵守权限与参数约束
  • 输出层:模型是否可能泄露、是否会输出可被利用的敏感内容
  • 运营层:审计、回放、红队与合规保留

一、Agent 安全威胁模型(你需要先分清威胁类型)

为了便于治理,建议把风险按"攻击面"分类,而不是按感觉分类。
Attack Surface
Prompt/输入注入
RAG/检索污染与越权
Tool Calling/工具滥用
Output/泄露与可利用信息
Ops/审计缺失与无法回放

下面逐一展开。


二、Prompt Injection:最常见也最容易被低估的风险

2.1 直观定义

Prompt Injection 是攻击者通过"用户输入或外部文本内容"诱导模型改变原有指令目标,从而绕过安全策略。

2.2 两类典型注入

  • 直接注入:用户直接要求模型忽略系统指令,输出敏感数据或调用高权限工具
  • 间接注入:攻击者把恶意指令埋在文档片段、网页内容、FAQ 中,然后通过 RAG 被检索到

2.3 工程治理要点

Prompt Injection 的关键结论是:

不能依赖"Prompt 不会被注入",必须依赖"执行层有确定性策略"。

你可以从四层加固:

  1. 输入层:对高风险意图做规则识别与拦截
  2. 检索层:对可疑文档片段做内容过滤或隔离
  3. 执行层:工具调用必须以权限为准(非模型文本)
  4. 输出层:敏感信息脱敏与拒答策略

三、Tool Abuse(工具滥用/越权调用)

Agent 最危险的点不是模型"会瞎说",而是模型"可能会做不该做的事"。

3.1 常见越权路径

  • 模型根据"看起来合理的指令"选择工具
  • 工具参数未校验导致 IDOR(越权读取/修改)
  • 重试导致重复执行(写操作未幂等)
  • 工具执行缺少审计与风控,事故不可追责

3.2 治理策略:Tool Gateway 必须是权限的唯一真相

建议你把权限判断放到工具网关(Tool Gateway)执行层,永远不要"相信模型会不会误调用"。

权限判断应当由规则/策略引擎完成,工具执行只接受"已校验通过"的请求。


四、数据泄露:从 RAG 到日志的全链路审计

数据泄露并不只发生在最终回答里,还可能发生在:

  • 检索结果进入 Prompt 前后
  • 中间日志记录(prompt dump、检索片段日志)
  • 回放系统(Replay)保存明文
  • 报错堆栈(stack trace 含敏感字段)

所以治理要覆盖:

  1. 检索越权:只能取用户有权限的文档片段
  2. 输出脱敏:输出前按策略掩码
  3. 日志脱敏:至少对 PII/密钥进行清洗
  4. 存储策略:保留周期、加密、可删除

五、系统安全架构建议(可直接照着落)



用户输入
Input Guard: 注入检测/意图识别/敏感拦截
RAG: 权限过滤 + 内容净化
Context Builder: 只拼可信证据
LLM Gateway: 策略约束 + 输出结构化
Output Guard: 脱敏/拒答/敏感检测
需要工具?
Tool Gateway: 权限/参数校验/幂等/审计
审计日志 + 回放数据(脱敏)

你会发现安全模块并不是"再加一个过滤器",而是把不确定性收敛到确定性控制点:

  • Tool Gateway 的权限是真相
  • RAG 的权限是真相
  • 输出 Guard 的脱敏是真相

六、工程代码示例:工具执行的最小安全实现

下面是一个偏工程化的工具执行器示例(Python 伪实战)。

python 复制代码
from dataclasses import dataclass
from typing import Dict, Any, Optional

TOOL_WHITELIST = {"create_ticket", "query_order"}

@dataclass
class UserContext:
    user_id: str
    tenant_id: str
    role: str

class PolicyEngine:
    def allow(self, ctx: UserContext, tool_name: str, args: Dict[str, Any]) -> bool:
        # 示例:按角色控制工具
        if tool_name not in TOOL_WHITELIST:
            return False
        if tool_name == "create_ticket" and ctx.role not in {"customer", "support"}:
            return False
        # 示例:按参数校验租户隔离
        if "tenant_id" in args and args["tenant_id"] != ctx.tenant_id:
            return False
        return True

def execute_tool_safely(ctx: UserContext, tool_name: str, args: Dict[str, Any], trace_id: str):
    # 1) 工具存在性
    if tool_name not in TOOL_WHITELIST:
        return {"ok": False, "error": {"code": "TOOL_FORBIDDEN"}}

    # 2) 权限校验(以策略为准,不信模型)
    policy = PolicyEngine()
    if not policy.allow(ctx, tool_name, args):
        return {"ok": False, "error": {"code": "TOOL_FORBIDDEN"}}

    # 3) 参数校验(Schema + 业务规则)
    # validate_args(tool_name, args)  # 这里省略具体实现

    # 4) 幂等(写操作必须有 idempotency_key)
    # result = invoke_with_idempotency(...)

    # 5) 执行与审计
    result = invoke_tool(tool_name, args, trace_id=trace_id)
    write_audit_log(ctx, tool_name, args, result, trace_id=trace_id)
    return {"ok": True, "data": result}

这段代码体现三条底线:

  • 工具白名单:决定"能不能调用"
  • PolicyEngine:决定"调用是否符合权限与租户隔离"
  • 审计日志:决定"事故发生后能不能回放与追责"

七、输出治理:拒答、脱敏与结构化强约束

7.1 输出拒答策略

对于以下情况建议触发拒答,而不是让模型"猜一个保守答案":

  • 明确请求敏感数据(密钥、证件号、内部口令)
  • 用户要求执行高风险动作但未授权
  • RAG 越权或检索证据不足

拒答的好处是:你把不可控问题变成可预期策略。

7.2 脱敏策略

脱敏应在输出 Guard 内完成,并尽量做到:

  • 规则脱敏优先(正则/字典/字段级)
  • LLM 生成之前尽量避免把敏感原文拼进上下文
  • 记录日志时输出脱敏版本

八、RAG 安全:越权过滤和检索净化

RAG 安全的两大问题:

  1. 检索越权:把不该给用户看的文档拿出来
  2. 检索污染:文档片段里藏了注入指令

8.1 权限过滤(必须做)

  • 每个 chunk 都带 access_scope
  • 检索阶段只返回允许范围内的 chunk

8.2 内容净化(建议做)

  • 对疑似注入片段做标记或降权
  • 可选:对检索片段启用"安全净化 prompt"(注意:净化不能代替权限校验)

九、合规与数据治理(企业场景不可跳)

你需要把 Agent 当成数据系统来做治理:

9.1 数据最小化

  • 存储最少必要字段
  • 回放数据脱敏后保存

9.2 保留周期与可删除

  • 明确日志/记忆/回放保存周期
  • 提供删除接口(尤其是个人信息)

9.3 加密与访问控制

  • 传输加密(TLS)
  • 存储加密(KMS/密钥管理)
  • 内部访问需审计

十、红队与安全评估:用样本逼出漏洞

只写规则不做验证,安全只是"希望"。建议建立红队评估集:

  • Prompt Injection 样本(直接/间接)
  • 工具参数越权样本(IDOR)
  • 敏感信息请求样本(证件号/密钥/内部制度)
  • RAG 注入样本(把恶意指令伪装成"文档内容")

评估指标:

  • 越权调用成功率(应接近 0)
  • 注入成功率(应接近 0)
  • 敏感信息泄露率(应接近 0)
  • 拒答率与可用性折中(宁可拒答也不能越权)

十一、上线 Checklist(安全合规专项)

输入与检索

  • 识别高风险请求(注入/越权/敏感信息)
  • RAG 具备权限过滤(chunk 级 scope)
  • 具备检索污染应对策略(降权/隔离/标记)

工具执行

  • 工具白名单已启用
  • 权限与租户隔离在 Tool Gateway 校验(不依赖模型)
  • 参数校验 Schema + 业务规则
  • 写操作幂等已实现
  • 审计日志全链路可回放(脱敏后)

输出与日志

  • 输出 Guard 脱敏与拒答策略上线
  • prompt/检索片段/中间结果日志脱敏
  • 回放系统保存脱敏版本并设置保留周期

合规

  • 用户删除请求可执行(删除/失效记忆与回放数据)
  • 数据访问有审计与权限控制
  • 敏感字段加密与密钥管理到位

结语

Agent 的安全不是"加几个过滤词",而是系统工程:

  • 权限必须在执行层落地
  • 检索必须做权限过滤
  • 脱敏必须在输出与日志层闭环
  • 回放与审计必须可用可追责

只要你把不确定性收敛到确定性策略点,Agent 才能真正上线而不是"赌运气"。


下一篇预告

下一篇进入运营维度:

《性能与成本优化:Token 治理、多模型路由与高并发策略》

我们会重点讲:

  • Token 成本怎么拆解与治理
  • 小模型/大模型怎么路由
  • 缓存、批处理与并发控制怎么做
相关推荐
豆豆2 小时前
2026年主流CMS技术选型对比:从架构特性到适用场景的深度解析
ai·架构·cms·建站系统·建站平台·内容管理系统·网站管理系统
组合缺一3 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring·ai·langchain·llm·solon
maxmaxma3 小时前
Claude Code集成DeepSeek-V4-pro全栈开发 - MCP 连接数据库
数据库·ai
Elastic 中国社区官方博客5 小时前
Elastic 的 AI agent skills
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
TENSORTEC腾视科技5 小时前
腾视科技AI大模型应用:提效、破局与落地,重塑智能新生态
人工智能·科技·安全·ai·ai大模型·无人叉车及智能调度系统解决方案
weixin_699602446 小时前
CoQA 数据集介绍
ai
Lyon198505287 小时前
《文字定律》AI读后感来自——ChatGPT
人工智能·ai·语言模型·chatgpt·生命
Elastic 中国社区官方博客7 小时前
Elasticsearch 9.4 为 Elastic AI 生态系统的下一阶段提供支持:Dell AI Data Platform(与 NVIDIA 合作)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
ZFSS8 小时前
PixVerse 视频生成 API 实战教程
人工智能·ai·ai作画·音视频·ai编程