使用说明
MCP安全网关
一个参考实现 MCP安全网关 专为企业代理的安全、基于角色的控制而设计。
网关在LLM主机和上游MCP服务器之间放置了一个明确的安全控制平面,强制执行:
- 工具列表:只有明确声明的工具对代理可见。
- 读/写/管理分离:每个工具都有明确的风险分类。
- 根据工具授权:基于用户身份的粒度访问控制。
- 人工审批:高风险操作必须由管理员签字。
- 结构化审计日志记录:所有安全决策都记录在案,以确保合规。
建筑
LLM Host / Agent Client
|
| JSON-RPC over HTTP (MCP)
v
+------------------------------+
| MCP Security Gateway |
| - tool exposure allowlist |
| - role-based access control |
| - approval workflow |
| - audit events |
+------------------------------+
|
+--> Upstream MCP servers
- read-only tools
- write tools
- destructive tools
回购布局
mcp-security-gateway/
├── README.md
├── run_dev.sh # Unified local development script
├── config/ # Allowlist and risk policy files
├── gateway/ # Security Gateway (FastAPI)
├── sample_server/ # Sample Finance MCP Server (Upstream)
├── scripts/ # Validation and testing scripts
└── data/ # Local SQLite storage
地方发展(推荐)
该项目针对本地执行进行了优化。使用提供的辅助脚本来管理环境并启动所有服务。
1.设置
请确保您已安装Python 3.10+。创建虚拟环境并安装依赖项:
# From the project root
python3 -m venv .venv
source .venv/bin/activate
pip install -r gateway/requirements.txt
2.启动服务
./run_dev.sh
这将开始:
- MCP服务器示例 上
http://127.0.0.1:18090 - 安全网关 上
http://127.0.0.1:18080
3.运行烟雾测试
在单独的终端中,运行验证脚本以验证一切正常:
.venv/bin/python scripts/smoke_test.py http://127.0.0.1:18080
烟雾测试验证:
- 协议初始化
- 按角色筛选的工具发现
- 成功执行只读工具
- 拒绝未经授权的工具访问
- 生成手动审批请求
- 待决请求的行政审批
- 以前被阻止的工具的批准后成功
安全模型
1.允许名单
仅在中声明的工具 config/tool_policies.json 暴露。其他一切都对代理人隐瞒了。
2.风险分类
工具分类如下 read, write,或 admin 以确保适当的护栏。
3.身份和角色
网关通过请求标头期望用户身份和角色(模拟身份感知网关):
X-User-ID:呼叫者的唯一标识符。X-Roles:逗号分隔的角色列表(例如。,reader, writer, admin).
4.人在环审批
高风险工具(例如。, destructive 动作)可以被配置为在网关代理呼叫之前需要经由管理员API的明确人工批准。
5.持续审计跟踪
所有决策都记录到stdout中,并存储在本地SQLite数据库中,用于审计和取证。
工具发现过程
当 tools/list 被称为网关:
- 从所有配置的上游服务器获取工具。
- 通过本地列表过滤工具。
- 使用风险级别元数据对工具进行注释。
- 隐藏调用者缺少所需角色的任何工具。
工具执行过程
当 tools/call 被称为网关:
- 解析复合工具名称(例如。,
finance.purge_order). - 检查是否有有效的、未过期的审批记录。
- 评估工具策略(角色+风险+批准)。
- 拒绝呼叫、请求批准或将其代理到源服务器。
下一个扩展
- 多服务器工具联盟
- 按租户政策捆绑
- 语义风险评分
- 数据分类标签
- 带过期窗口的JIT审批
- 审批界面和聊天通知
- Langfuse或OpenTetry跟踪相关性
