支持智能体不意味着失去控制。MCP-first 系统以机器可读的方式描述每项能力—— 同时规定谁可以调用它、在什么条件下调用,以及会留下什么痕迹。 安全不是事后添加的功能,而是能力设计的一部分。
如果智能体可以调用它,Policy 就必须能够控制它。
六个授权层
身份验证回答:你是谁? 授权回答:你能做什么? MCP-first 系统需要两个问题——并在六个独立层次上回答, 这些层次共同决定有效访问权限。
第一层:用户角色(User Role)
已登录用户的角色构成最宽泛的层次。它决定基本访问类别, 而非具体工具。
admin
manager
employee
viewer
external_client
第二层:租户范围(Tenant Scope)
在多租户系统中,每次访问必须绑定到租户。即使用户角色 在技术上允许,智能体也不得跨租户读写。
tenant:abc
project:123
contact:456
第三层:工具范围(Tool Scope)
每个工具都有自己的 Scope 保护。智能体只获得其定义任务 所必需的 Scope。
contacts:read
contacts:write
projects:read
projects:write
files:read
files:write
emails:draft
emails:send
calendar:create
billing:read
billing:write
admin:users
admin:security
第四层:资源范围(Resource Scope)
除工具 Scope 外,还可以对单个资源类型的访问进行限制。
这确保拥有 contacts:read 的智能体仍然无法查看每个联系人资源。
resource.project.visible
resource.contact.visible
resource.employee.visible
resource.file.downloadable
resource.email.readable
第五层:风险等级(Risk Level)
每个工具都标注了声明的风险等级。该等级影响确认策略和审计配置。
| 等级 | 含义 |
|---|---|
| Low | 自主执行通常无害 |
| Medium | 在范围和上下文明确时可自主执行 |
| High | 建议确认 |
| Critical | 始终需要确认,通常需要升级身份验证 |
| Forbidden for AI | 不允许 AI 访问 |
第六层:确认策略(Confirmation Policy)
确认策略规定执行前需要满足哪些额外条件。它按工具配置, 由 Policy 层强制执行——而非由智能体自行决定。
no_confirmation_required
confirmation_required
step_up_auth_required
admin_approval_required
four_eyes_required
not_allowed_for_ai
工具可见性
工具是否存在本身就是一条安全相关信息。知道某个被禁止的工具的智能体 可以将其作为攻击面——即使后续调用会被拦截。
例如,销售助理会收到以下经过过滤的工具列表:
-
contacts.search -
projects.list -
emails.create_draft -
reminders.create -
calendar.create_event -
users.delete不可见 Forbidden for AI -
billing.change_plan不可见 Forbidden for AI -
security.rotate_keys不可见 Forbidden for AI -
tenant.export_all_data不可见 Forbidden for AI
人在回路(Human-in-the-loop)
MCP-first 不意味着全自动。它意味着完全可控——但受到监督。 对于敏感或高风险操作,系统会中断智能体并主动征求用户同意。
智能体根据声明的风险元数据识别操作需要人工审批, 并将控制权移交。只有在明确确认后,工具才会执行。
以下示例展示了外部批量邮件发送的典型审批对话框—— 这是最常见的关键智能体操作之一:
销售助理
emails.send_external 向所有潜在客户发送当前项目介绍的个性化邮件。
- 收件人
- Havelblick 项目的 43 位潜在客户
- 主题
- 您的项目介绍 – Havelblick 项目
- 附件
- 无直接附件——下载链接,14 天后过期
- 发送时间
- 确认后立即发送
Grund包含项目相关信息和个人收件人数据的外部批量发送。操作不可撤销。
升级身份验证(Step-up Authentication)
对于特别敏感的操作,已有活跃会话是不够的。即使是已登录的管理员 也必须在执行关键操作前重新确认身份。
典型的升级身份验证触发条件:
- 更改或分配管理员权限
- 更改支付数据或订阅
- 薪资数据或薪资导出
- 生成或轮换 API 密钥
- 完整数据导出
- 删除用户或租户
可接受的升级身份验证方法(取决于系统策略):
重新输入密码
TOTP / 身份验证器应用
Passkey
第二人的管理员审批
四眼原则
同意账本(Consent Ledger)
对智能体操作的每次同意都是一个应永久保存的事件。同意账本 使得事后可以追溯哪个操作由谁、针对什么范围、通过何种安全方法获得了批准。
同意记录中保存的字段:
consentId — 同意的唯一 ID
userId — 审批用户
agentId — 执行智能体
clientId — 连接的 MCP 客户端
toolName — 调用的工具
inputSummary — 输入的结构化摘要(非明文)
riskLevel — 工具的声明风险等级
approvedAt — 审批时间戳
expiresAt — 审批有效期(如有时间限制)
approvalMethod — 使用的审批方法(如 "totp"、"passkey"、"manual")
某些审批可以有时间限制——例如针对特定发送的一次性批准。 其他的在一个会话或配置的时间段内有效。策略决定粒度。
审计轨迹(Audit Trail)
每个 MCP 操作都会生成一条审计记录。该记录是不可变的、 绑定到租户的且可机器解析的。它是合规证明、异常检测和内部审查的基础。
{
"event": "mcp.tool.executed",
"tool": "emails.send_external",
"tenantId": "tenant_123",
"userId": "user_456",
"agentId": "agent_sales_assistant",
"clientId": "client_claude_desktop",
"riskLevel": "critical",
"confirmationId": "confirm_789",
"inputHash": "sha256:a3f2c1...",
"result": "success",
"createdAt": "2026-06-11T10:00:00Z"
}
审计日志可以机器化监控异常:不寻常的执行频率、 正常工作时间之外的操作或智能体通常不使用的 Scope 访问—— 这一切都是可识别的,因为每个操作都经过清晰的类型标注和审计。
100% 可控意味着:每项能力在生效之前都经过描述、授权、确认 和审计。