十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

智能体面试准备(八十):智能体凭证治理与最小权限访问工程——密钥托管、临时凭证与全链路审计

智能体面试准备(八十):智能体凭证治理与最小权限访问工程——密钥托管、临时凭证与全链路审计 智能体面试准备八十智能体凭证治理与最小权限访问工程——密钥托管、临时凭证与全链路审计引言本文是系列第 80 篇。前面讲过工具沙箱、人在回路、多租户权限这一篇聚焦一个更细但后果极重的问题Agent 调用外部系统时凭证Credential怎么管。这件事一旦做错后果是灾难性的把数据库密码写进 prompt、把长期有效的 API Key 硬编码在镜像里、Agent 被提示词注入后拿着高权限 token 删库。而面试官考察Agent 安全时凭证治理是绕不开的一环——因为它最能区分知道要加锁和真的做过权限体系。本篇讲清四件事凭证不能出现在模型可见的任何地方、要用短期凭证、要按任务最小授权、要能追溯每一次使用。凭证治理总览 用户 / 上游系统 │ 1. 身份认证OIDC/OAuth ▼ ┌─────────────────────┐ │ 凭证颁发服务 STS │ │ 签发短期、受限凭证 │ └──────────┬──────────┘ │ 2. 短期凭证分钟级、范围受限 ▼ ┌─────────────────────┐ │ Agent 运行时 │ │ ┌───────────────┐ │ │ │ 凭证代理 Proxy │ │ - 模型永远拿不到明文 │ └───────┬───────┘ │ └──────────┼──────────┘ │ 3. 代理注入到真实调用 ▼ 外部系统DB / SaaS / 内部 API │ ▼ 4. 审计与回溯一、铁律凭证绝不进模型上下文先看反面清单这些都是真实事故反模式后果API Key 写进 system prompt模型可能原样输出注入/追问即泄露密钥硬编码在镜像/环境变量镜像泄漏即全量泄露轮换要重新发版用同一个高权限账号跑所有任务一次越权影响全部数据凭证长期有效不过期泄露后窗口无限大把数据库 DSN含密码传给 LLM 让它自己连完全失控正确做法是凭证代理Credential Proxy模型只发出我要调用 X 工具的意图真实凭证由旁路代理注入模型全程接触不到明文。# 反例凭证进入 promptbad_promptf用这个 key 调接口api_key{SECRET}# 严禁# 正例Agent 只声明意图凭证由代理注入definvoke_tool(tool_name,args,ctx):credsts.issue(# 向凭证服务申请短期、限范围凭证tooltool_name,tenantctx.tenant,ttl_seconds300,scopef{tool_name}:read,# 最小权限reasonctx.task_id,)headers{Authorization:fBearer{cred.token}}returnhttp_call(TOOLS[tool_name].endpoint,args,headersheaders)二、短期凭证与最小权限凭证设计三原则短期、最小、可撤销。原则做法参数示例短期TTL 分钟级用完即废ttl300s最小权限按工具操作资源范围授权crm:order:read而非crm:*可撤销支持按 task_id 即时吊销revoke(task_id)绑定上下文凭证绑定租户/会话/任务换任务即失效classScopedCredential:def__init__(self,token,scope,expires_at,task_id):self.token,self.scopetoken,scopeself.expires_at,self.task_idexpires_at,task_iddefvalid(self,required_scope,task_id):return(time.time()self.expires_atandtask_idself.task_idandscope_allows(self.scope,required_scope))defscope_allows(granted,required):支持前缀通配的最小权限判定g,rgranted.split(:),required.split(:)returnlen(g)len(r)andall(abora*fora,binzip(g,r))三、按任务授权与人工升级不同风险等级的任务凭证获取方式不同风险等级示例授权方式只读低风险查询天气、检索文档自动颁发无需审批有副作用发消息、写工单自动颁发 事后通知高风险转账、删数据、发外部邮件人工审批后颁发或人在回路确认越权请求超出该 Agent 权限范围直接拒绝并告警实现上给每个工具标注风险等级注册在工具注册中心见上篇 B79凭证服务根据等级决定自动发 / 需审批 / 拒绝。风险分级 自动颁发 高风险人工升级是标准三段式。RISK{read_only:auto,side_effect:autonotify,high_risk:require_approval}defissue_for(tool,ctx):levelTOOLS[tool].riskpolicyRISK[level]ifpolicyrequire_approval:ifnotapprovals.granted(ctx.task_id,tool):raisePermissionError(f{tool}需人工审批)returnsts.issue(tooltool,tenantctx.tenant,ttl_seconds300iflevel!high_riskelse600,scopeTOOLS[tool].required_scope,reasonctx.task_id)四、防注入凭证在攻防中的位置提示词注入的真实危害不是模型说错话而是攻击者借模型之手调用高权限工具。凭证治理正是对抗链的关键一环防线叠加缺一不可 1. 凭证不进上下文 - 注入者无法直接套出密钥 2. 最小权限 scope - 即使被诱导调用影响范围受限 3. 高风险需审批 - 关键动作有人工闸门 4. 短期 TTL - 泄露窗口极小 5. 全链路审计 - 事后可追溯、可告警注意不要把模型判断安全当作唯一闸门。模型的判断可被诱导真正的闸门必须是策略引擎代码级、确定性模型只能提供建议。五、审计与轮换能力说明审计日志每次凭证颁发与使用记录谁、何时、工具、参数摘要、结果异常检测频率异常、非常规时段、跨租户访问、权限提升尝试密钥轮换定期自动轮换泄露时一键吊销最小可见日志中脱敏绝不记录明文凭证defaudit_log(tool,args,ctx,result):log.info({ts:time.time(),tenant:ctx.tenant,task_id:ctx.task_id,tool:tool,args_digest:hashlib.sha256(json.dumps(args,sort_keysTrue).encode()).hexdigest()[:16],status:okifresult.okelsefail,# 注意不记录明文参数与凭证})六、落地检查清单凭证是否 100% 不进入模型上下文prompt / 工具返回值 / 日志是否全部使用短期凭证TTL ≤ 分钟级是否按工具操作资源三维最小授权高风险工具是否有人工审批闸门且闸门在策略层而非模型层是否能按 task_id 即时吊销是否所有调用都有审计且日志脱敏密钥是否支持自动轮换与一键吊销面试速答问Agent 调用外部 API 的密钥怎么管答凭证绝不进模型上下文。用凭证代理模型只声明调用意图真实凭证由旁路服务按短期 TTL 最小 scope 绑定 task_id签发并注入模型全程接触不到明文。问短期凭证的具体参数怎么设答TTL 分钟级如 300sscope 按工具操作资源三维最小授权如 crm:order:read 而非 crm:*绑定 task_id 与租户支持按 task_id 即时吊销。问提示词注入怎么防答五层叠加——凭证不进上下文、最小权限 scope、高风险人工审批、短期 TTL、全链路审计。关键是安全闸门必须在策略层代码确定性不能依赖模型判断。问高风险操作怎么控制答工具在注册中心标注风险等级凭证服务按等级决定自动颁发/需审批/拒绝。高风险转账、删数据、外发邮件走人工审批或人在回路确认审批通过才发凭证。高频追问清单凭证代理挂了或被绕过怎么保证 Agent 拿不到明文多租户场景下凭证怎么隔离跨租户访问怎么检测短期凭证 TTL 设太短导致频繁申请性能和可用性怎么权衡工具返回值里意外带了密钥如接口返回 token怎么清洗Agent 需要代表用户操作on-behalf-ofOAuth 委托授权怎么设计高风险审批流超时未响应任务应该阻塞、降级还是中止凭证审计日志本身怎么防篡改密钥自动轮换时在途请求怎么处理才不中断如何检测凭证被异常使用频率、地理、时段异常本地/私有化部署没有云厂商 STS怎么自建短期凭证服务
返回列表