企业客户在使用 AI 代理调用 Slack、Salesforce、Notion、Gmail 等第三方工具时,面临三类风险:(1) 敏感操作未受控,如删除生产数据;(2) OAuth 登录绕过企业域,数据泄露到个人账户;(3) 代理使用无关的第三方 workspace,与组织资产脱节。传统的「prompt 约束」不可靠 — 用户可以绕过,代理可以遗忘。
Gumloop App Policies 在工具调用管线层植入检查点,将治理逻辑从 prompt 层下沉到执行引擎层。
| 维度 | 目标 |
|---|---|
| 安全性 | 阻止代理执行高风险工具调用(删除、写入、外发),无法通过 prompt 绕过 |
| 合规性 | 强制 OAuth 绑定企业邮箱域,锁定 SaaS workspace 到组织账户 |
| 可观测性 | 标记可疑操作(tag),记录完整审计轨迹供管理员回溯 |
| 可管理性 | 自然语言 → 可执行规则的 AI 构建器,降低规则编写门槛 |
┌─────────────────────────────────────────────────────────────┐ │ Enterprise App Policies │ │ │ │ ┌──────────────┐ ┌──────────────────┐ ┌───────────────┐ │ │ │ App Rules │ │ Domain │ │ App Claims │ │ │ │ 应用规则 │ │ Restrictions │ │ 应用声明 │ │ │ │ │ │ 域限制 │ │ │ │ │ ├──────────────┤ ├──────────────────┤ ├───────────────┤ │ │ │block 或 tag │ │强制 OAuth 使用 │ │锁定 provider │ │ │ │工具调用,基于 │ │企业邮箱域 │ │workspace 到 │ │ │ │CEL条件表达式 │ │ │ │组织 │ │ │ └──────────────┘ └──────────────────┘ └───────────────┘ │ │ │ │ 执行引擎: check_rules(tool_call) → before + after 双重检查 │ └─────────────────────────────────────────────────────────────┘
| 策略类型 | 功能 | 典型场景 |
|---|---|---|
| App Rules(应用规则) | 在工具调用前/后执行 block 或 tag 操作 | 阻止删除 Slack 消息、标记写入 Salesforce |
| Domain Restrictions(域限制) | 强制 OAuth 连接使用指定企业邮箱域 | 仅允许 @acme.com 邮箱登录 Google Drive |
| App Claims(应用声明) | 锁定第三方 provider 的 workspace 到组织 | 强制 Slack 使用 acme-corp workspace |
每次工具调用触发两次 check_rules 评估 — 执行前和执行后:
┌──────────┐
│Tool Call │
│ 发起 │
└────┬─────┘
│
┌─────▼──────────────────────┐
│ check_rules(check_type= │
│ before) │
│ │
│ Phase match → Target match │
│ → Scope match → Condition │
│ match → Action │
└─────┬──────────────────────┘
│
┌──────┴──────┐
│ │
[block] [pass/tag]
│ │
┌────▼────┐ ┌────▼────┐
│ 拒绝调用 │ │ 执行工具 │
│ 返回通用 │ │ 调用 │
│ 错误消息 │ └────┬────┘
└─────────┘ │
┌────▼──────────────────────┐
│ check_rules(check_type= │
│ after) │
│ (条件可引用 output 变量) │
└─────┬──────────────────────┘
│
┌──────┴──────┐
│ │
[block] [tag/pass]
│ │
┌────▼────┐ ┌────▼────┐
│ 回滚/阻止 │ │ 记录审计 │
│ 返回结果 │ │ 日志/通过 │
└─────────┘ └─────────┘
匹配逻辑(五步顺序评估):
check_type 匹配当前阶段(before/after)truetag(记录并继续)或 block(立即终止)零命中 = 正常放行。评估错误 → 拒绝调用(失败封闭)。
┌─────────────────────────────────────┐
│ Organization-Level │
│ Settings → Org → App Policies │
│ 作用于:所有用户、所有代理 │
│ UI:统计卡片 + 执行活动直方图 │
│ + 按 Server 分组规则列表 │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Agent-Level │
│ 代理配置面板 Rules 标签页 │
│ 或通过代理聊天创建(需 App Rules │
│ Creation 能力开启) │
│ 作用于:仅该代理的工具调用 │
└─────────────────────────────────────┘
| 属性 | Organization-Level | Agent-Level |
|---|---|---|
| 管理入口 | Settings → Organization → App Policies | Agent 配置面板 / 代理聊天 |
| 适用对象 | 所有用户、所有代理 | 特定代理 |
| 用户可见性 | 仅 Admin/Security 角色 | Agent 创建者 + Admin |
| 被阻止时的用户消息 | 「此操作已被组织的安全策略限制」 | 「此操作已被为此代理配置的规则限制」 |
| 管理员可见性 | 完整上下文(Activity 标签页 + Audit Logs) | 同上 |
关键约束:Agent 级规则不能覆盖或放宽 Org 级阻止。只能叠加额外限制(「只能更严格,从不会更宽松」)。没有任何 allow-override 机制。
降低自然语言治理规则的编写门槛:
自然语言输入 结构化规则 模拟验证 ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ "阻止代理删除 │ → │ JSON: │ → │ 对近30天实际 │ │ Slack消息或 │ │ check_type= │ │ 工具调用回放 │ │ 写入超过100条" │ │ before, │ │ 标记误报/漏报 │ │ │ │ action=block, │ │ │ │ │ │ tool_names=[ │ │ 结果: │ │ │ │ slack_send_ │ │ 3次命中 ✅ │ │ │ │ message, │ │ 0次误报 ✅ │ │ │ │ slack_delete_ │ │ │ │ │ │ message], │ │ │ │ │ │ condition=... │ │ │ └──────────────┘ └──────────────┘ └──────────────┘
流程:管理员用自然语言描述意图 → AI 构建器生成结构化规则 JSON(含 CEL 条件表达式)→ 对近期真实工具调用做回放模拟 → 展示命中次数和误报数 → 管理员确认后激活。
check_rules 评估过程中任何错误(CEL 表达式异常、匹配引擎故障、规则数据损坏)统一视为 block。代理端看不到具体原因 — 仅收到通用被拒消息。管理员在 Audit Logs 中查看完整错误上下文。
Org Rule A: block tool_X → baseline Agent Rule B: block tool_X, tool_Y → additive Agent Rule C: tag tool_Z → additional 最终效果:tool_X = block, tool_Y = block, tool_Z = tag
所有匹配规则取 最严格合集。只要任一规则的 action 为 block,调用即被拒绝。没有优先级 — 全部生效。
| ID | 需求 | 来源 |
|---|---|---|
| AR-01 | 管理员可创建规则,指定 check_type(before/after)、action(block/tag)、tool_names(可选)、CEL 条件表达式 | 文档 |
| AR-02 | before 规则可引用变量:args、tool_name、server_id | 文档 |
| AR-03 | after 规则额外可引用 output 变量(工具调用结果) | 文档 |
| AR-04 | tool_names 为空 = 该 app 下所有工具均被规则覆盖 | 文档 |
| AR-05 | block 的代理 → 用户端显示通用错误消息,不泄露具体规则 | 文档 |
| AR-06 | tag 的调用 → 继续执行,事件记入 Activity 和 Audit Logs | 文档 |
| AR-07 | Agent 级规则可由代理在聊天中提议,用户显式 Accept/Reject 后生效 | 文档 |
| ID | 需求 | 来源 |
|---|---|---|
| DR-01 | 管理员配置允许的邮箱域名列表(如 acme.com) | 文档 |
| DR-02 | 用户 OAuth 连接第三方应用时,强制使用匹配域名的账户 | 文档 |
| DR-03 | 非匹配域名的 OAuth 尝试被拒绝并给出明确提示 | 推断 |
| ID | 需求 | 来源 |
|---|---|---|
| AC-01 | 管理员将特定 provider(Slack、Salesforce、Notion)锁定到指定组织 workspace | 文档 |
| AC-02 | 代理只能使用已声明的 workspace,无法切换到其他 workspace | 文档 |
| AC-03 | App Claims 为 Org 级设定,不可在 Agent 级覆盖 | 推断 |
| ID | 需求 | 来源 |
|---|---|---|
| AB-01 | 支持自然语言输入,自动生成结构化规则 JSON | 文档 |
| AB-02 | 生成规则后可对近期真实工具调用做模拟回放 | 文档 |
| AB-03 | 模拟结果展示命中次数和潜在误报数 | 文档 |
| AB-04 | 管理员审阅后手动激活规则 | 推断 |
| ID | 需求 | 来源 |
|---|---|---|
| EA-01 | Org 级 App Policies 页面展示统计卡片和执行活动直方图 | 文档 |
| EA-02 | 所有规则命中(block/tag)写入 Audit Logs,管理员可搜索和回溯 | 文档 |
| EA-03 | 被 block 的代理只能看到通用消息,管理员可见规则详情和触发上下文 | 文档 |
角色:Acme Corp 安全管理员(CISO 团队)
目标:确保 AI 代理不能删除 Slack 消息,无论用户如何 prompt
流程:
check_type=before, action=block, tool_names=["slack_delete_message"], condition=nullslack_delete_message 调用,均命中 → 0 误报slack_delete_message 前触发 check_rules(before) → 命中 → 返回:「此操作已被组织的安全策略限制」角色:Acme Corp 的某个 Agent 用户
目标:让代理在特定场景下自动标记(而非阻止)写入操作
流程:
salesforce_bulk_insert 且 args.count > 50 时 → tag(非 block)| 维度 | Gumloop App Policies | OpenAI Enterprise Policies | Anthropic MCP Governance | AWS IAM for AI |
|---|---|---|---|---|
| 治理层级 | 工具调用管线(infra 层) | API 使用限制 | MCP Server 权限 | 资源级 IAM policy |
| 执行点 | 每次工具调用 before+after | API 调用前鉴权 | Server 连接时 | 资源操作前 |
| 规则语言 | 自然语言 → CEL | 预定义策略模板 | 手动配置 | JSON policy document |
| 代理绕过风险 | 无(infra 强制) | 取决于集成深度 | 取决于 client 实现 | IAM 标准保证 |
| 模拟验证 | AI 回放历史调用的命中率 | 无 | 无 | IAM Policy Simulator(人工) |
| Agent 自治 | Agent 可提议规则(需审批) | 无 | 无 | 无 |
| 失败模式 | Fail-closed | Fail-closed | 取决于实现 | Default deny |
Gumloop 差异化:(1) 执行点在工具调用层,而非 API 入口 — 粒度更细;(2) AI 辅助自然语言 → CEL 转换 + 模拟回放,降低配置门槛;(3) Agent 可自我提议约束,形成「代理治理代理」的闭环。
| 方向 | 动机 | 优先级推断 |
|---|---|---|
| 规则模板市场 | 跨客户共享已验证的 CEL 规则库(如标准 SOC2 合规套装) | 中 |
| 异常检测驱动的规则推荐 | 从 Audit Logs 中自动发现异常 pattern,建议创建规则 | 中 |
| 临时豁免(Time-bound override) | 支持有时效的规则豁免,到期自动恢复,用于应急场景 | 高 |
| 规则影响分析 | 修改/删除规则前,评估对历史工具调用的反向影响 | 低 |
| 跨 Provider 的通用条件表达式 | 将 CEL 条件中的 tool_name/output 抽象为跨 app 的统一 schema | 低 |
| Agent 级规则信任等级 | Agent 自主提议的规则经过一定时间无违规后自动升级为 Org 级 | 低 |
gumloop-docs_app-policies.md — Enterprise App Policies & Rules 官方帮助文档存档(2026-05-30)
原 URL:App Policies Overview · App Rules
由 Claude spec-generate 系统生成 · 来源:Gumloop Enterprise App Policies 官方帮助文档