身份与信任管理:防止权限滥用

Confused Deputy Problem(困惑代理人问题)

经典场景

攻击链条:
1. 开发者无意中将开源仓库内容粘贴到 IDE 上下文
2. 仓库中隐藏恶意指令(提示注入)
3. 过权限 Agent 执行未授权命令
4. Agent 成为攻击者的"代理人"

核心问题

Agent 拥有开发者的委托凭证 → 继承开发者宽泛权限 → 被欺骗时造成严重损害

解决方案:Agentic Identity(代理身份)

原则:Agent 绝不能作为访问的最终裁决者

传统模式 安全模式
Agent 使用用户委托凭证 Agent 使用专用身份
继承用户所有权限 权限严格绑定
难以审计 粒度审计日志
权限难以控制 权限可追踪、可限制

实现

  • Unique Cryptographic Identity(唯一加密身份)
    • 每个 Agent 使用 SPIFFE ID(可验证的分布式身份)
    • 明确标记为 agentic 类型
  • Dedicated Agentic Identity(专用代理身份)
    • 身份明确区分代理行为
    • 权限严格绑定
    • 受限于细粒度审计

Zero Ambient Authority(零环境权限)

核心原则:执行”vibe”的 Agent 绝不能继承开发者完整的管理权限

实现:JIT Token Downscoping(即时令牌降级)

传统模式:
开发者 → 全权限 → Agent → 宽泛访问 ❌

JIT 降级模式:
开发者 → Agent 请求执行脚本
→ 系统生成:
  • 新脚本专用凭证
  • 仅限于脚本需要的特定数据源
  • 不继承父 Agent 宽泛权限
→ 凭证高度临时 → 任务结束立即过期 ✓

文件树 Allowlist(文件树白名单)

  • 读写操作限制在特定项目目录
  • 默认拒绝规则
  • 阻止访问:
    • Secrets(密钥)
    • Build scripts(构建脚本)
    • Production manifests(生产清单)

High-Stakes Actions(高风险操作)

定义:需要明确验证的关键操作,如: - 修改生产数据库 - 执行金融转账 - 改变 IAM 配置

问题:Vibe Coders 常依赖 AI 写复杂语法但不完全理解 → “It Works, Ship It”(能用就发布)谬误 → 简单批准门导致确认疲劳 → 开发者盲目授权不理解代码

解决方案:Structured Elicitation(结构化 elicitation)

两个安全边界

  1. Cryptographic Hardware MFA

    系统要求 → 开发者触碰硬件 USB 安全密钥 → 加密批准执行
  2. The Vibe Diff

    关键工具运行前 → Evaluator Quorum(评估者仲裁团)拦截
    → 将复杂生成代码翻译为简明英文摘要
    → 展示原始模糊意图如何映射到提议执行步骤
    → 开发者真正理解授权内容 → 提供明确加密同意 ✓

可视化对比

传统批准:
代码生成 → "批准"按钮 → 点击 ✓(开发者不理解代码) ❌

Vibe Diff 批准:
代码生成 → 翻译为自然语言 → 展示意图映射 → 硬件密钥批准 ✓