安全网关

MCP安全网关是一个用于企业代理的基于角色的安全控制参考实现,提供工具白名单、读写分离、细粒度访问控制和审计日志等功能。

  • by arjeetanand
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 arjeetanand/mcp-security-gateway

使用说明

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. 协议初始化
  2. 按角色筛选的工具发现
  3. 成功执行只读工具
  4. 拒绝未经授权的工具访问
  5. 生成手动审批请求
  6. 待决请求的行政审批
  7. 以前被阻止的工具的批准后成功

安全模型

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 被称为网关:

  1. 从所有配置的上游服务器获取工具。
  2. 通过本地列表过滤工具。
  3. 使用风险级别元数据对工具进行注释。
  4. 隐藏调用者缺少所需角色的任何工具。

工具执行过程

当 tools/call 被称为网关:

  1. 解析复合工具名称(例如。, finance.purge_order).
  2. 检查是否有有效的、未过期的审批记录。
  3. 评估工具策略(角色+风险+批准)。
  4. 拒绝呼叫、请求批准或将其代理到源服务器。

下一个扩展

  • 多服务器工具联盟
  • 按租户政策捆绑
  • 语义风险评分
  • 数据分类标签
  • 带过期窗口的JIT审批
  • 审批界面和聊天通知
  • Langfuse或OpenTetry跟踪相关性