安全MCP代码网关模式

基于GitOps的验证模式,用于在Red Hat OpenShift上部署安全的企业级MCP基础设施。此模式为多个MCP(模型上下文协议)服务器提供了一个集中式网关,具有统一的身份验证、基于角色的访问控制(RBAC)和全面的审计日志。
灵感
该模式实现了Anthropic的 使用MCP执行代码:构建更高效的代理 博客文章。
关键的见解是:AI代理可以通过AI的上下文窗口传递大型数据集(消耗数十万个令牌) 编写在安全沙箱中执行的代码.沙盒内工具之间的数据流,只有最终结果返回给AI——实现 90-99%的代币节省 数据密集型操作。
此模式通过添加以下内容将这一概念扩展到企业环境:
- GitOps管理工具 -安全团队通过pull请求批准工具
- OAuth 2.1身份验证 -通过Keycloak实现集中身份
- 多租户沙盒 -OpenShift上的独立执行环境
- 持续状态和技能 -AI代理可以保存检查点和可重用的代码模式
- 渐进式工具发现 -作为可浏览文件公开的工具,用于按需加载
什么是MCP?
模型上下文协议(MCP)是一个开放标准,它使AI助手(如Cursor、Claude Desktop或自定义代理)能够连接到外部工具和数据源。MCP服务器公开了AI可以调用以执行操作的工具——查询数据库、分析日志、调用API或处理文件。
挑战:企业MCP部署
随着企业大规模部署MCP服务器,出现了三个关键挑战:
- 安全和合规差距 -传统的MCP实施缺乏企业安全控制:
- 无集中式身份验证 -每个MCP服务器都管理自己的身份验证,从而造成不一致的安全态势 - 无审计追踪 -没有统一的日志记录谁访问了哪些工具、何时以及处理了哪些数据 - 无RBAC -用户可以访问所有工具,也可以不访问任何工具;没有细粒度的基于角色的权限 - 数据暴露风险 -敏感数据通过外部人工智能服务流动,不受任何控制 - 合规失败 -SOC 2、HIPAA和PCI-DSS需要传统MCP无法提供的审计日志和访问控制
- 操作复杂性 -管理数十台独立的MCP服务器意味着:
- 多个端点用于保护和监控 - 日志记录格式不一致 - 操作时没有单块玻璃 - 在没有集中可见性的情况下难以应对事件
- 成本和性能 -没有优化:
- 预先加载数百个工具模式会消耗大量令牌(每个工具定义200-500个令牌) - 流经LLM的中间结果可能会为单个请求消耗200000多个令牌 - 大型数据集必须通过人工智能上下文窗口,从而增加成本
示例一家部署了20个MCP工具的金融服务公司面临着20个独立的身份验证系统,监管机构没有统一的审计日志,也无法同时撤销受损用户对所有工具的访问。
此模式的解决方案:安全MCP网关
此模式实现了 企业MCP网关 它位于AI客户端和MCP工具服务器之间:
- 集中身份验证 -单个密钥斗篷实例为所有工具提供OAuth 2.1和API密钥验证
- 完成审计日志记录 -每个MCP请求都记录了用户身份、调用的工具和时间戳
- 基于角色的访问控制 -用户只能看到其角色允许的工具
- 合规性就绪 -针对SOC 2、HIPAA和监管要求的内置审计跟踪
- 隔离沙盒 -工具在OpenShift上的安全、隔离环境中运行
- 渐进式工具发现 -Gateway仅公开基于用户角色的相关工具,从而减少令牌开销
- 高效的数据处理 -沙盒内工具之间的结果流;只有最终结果返回给AI
结果:部署具有企业安全性、统一治理和数据密集型运营成本降低90%以上的MCP工具。
快速开始
# 1. Deploy the pattern
./pattern.sh make install
# 2. Create an API key (recommended)
./scripts/create-api-key.sh alice mcp-log-analyst never
# 3. Add to your AI (.your AI/mcp.json)
{
"mcpServers": {
"secure-mcp-gateway": {
"url": "https://your-gateway-url",
"transport": {
"type": "http",
"headers": {
"Authorization": "Bearer "
}
}
}
}
}
# 4. Ask Your AI
"Use log_store to find all errors from the last hour"看 部署指南 详细说明。
建筑
此模式使用 具有隔离沙盒的多租户网关 -一种为大规模上下文效率和安全性而设计的架构。
┌────────────────────────────────────────────────────────┐
│ Shared Infrastructure │
│ ┌─────────────┐ ┌──────────────────────┐ │
│ │ Keycloak │ │ OpenShift Logging │ │
│ │ (SSO) │ │ (Loki) │ │
│ └─────────────┘ └──────────────────────┘ │
└────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Multi-Tenant MCP Gateway │
│ • Authenticates users (API keys, OAuth, demo token) │
│ • Loads tool schemas on-demand (not all upfront) │
│ • Routes requests to appropriate sandboxes │
│ • Enforces RBAC (users see only authorized tools) │
└─────────────────────────────────────────────────────────┘
│
├─────────────────┬──────────────────┬
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Sandbox: │ │ Sandbox: │ │ Sandbox: │
│ Log Analysis │ │ Custom │ │ YOUR-SERVER │
│ │ │ Tools │ │ │
│ Tools: │ │ Tools: │ │ Tools: │
│ log_store.py │ │ your-api.py │ │ ... │
│ privacy.py │ │ ... │ │ │
│ │ │ │ │ │
│ Data flows │ │ Data flows │ │ Data flows │
│ between │ │ between │ │ between │
│ tools here │ │ tools here │ │ tools here │
│ (not via AI) │ │ (not via AI) │ │ (not via AI) │
└──────────────┘ └──────────────┘ └──────────────┘为什么是这种架构?
问题:传统的MCP实现将所有工具定义预先加载到AI的上下文窗口中,所有数据在工具调用之间通过AI流动。使用1000个工具,这意味着在处理第一个请求之前消耗了200000多个令牌。
解决方案:这一模式将关切分开:
- 网关处理发现 -仅返回基于用户请求和角色的相关工具定义
- 沙盒处理执行 -工具直接相互调用;沙盒内的数据流
- AI协调,不运输 -AI决定做什么,沙盒做这项工作
示例:过滤10000行电子表格,然后上传到CRM:
- 传统:将10000行加载到AI上下文中→ AI过滤器→ AI上传(40万代币)
- 这种模式:沙盒在内部过滤行→ 返回“已更新247条记录”(50个令牌)
该架构提供 98%+代币节省 数据密集型工作流程。
此模式提供了什么
1.生产就绪MCP网关
- 完整的JSON-RPC 2.0协议实现
- 与您的AI IDE和其他MCP客户端开箱即用
- 高可用性(多个副本)
- 健康检查和监测
2.集中认证
- OAuth 2.1的密钥斗篷(Red Hat SSO)
- 用于自动化的API密钥(永不过期)
- 用于开发的演示令牌
- 跨所有工具集的单点登录
3.基于角色的访问控制(RBAC)
- 用户只能看到他们有权使用的工具
- 在Keycloak中定义角色(
mcp-admin,mcp-log-analyst等等) - 将角色映射到工具集
- 在运行时强制访问
4.完成审计跟踪
- 每个请求都记录了用户身份
- 结构化JSON日志
- OpenShift日志集成(Loki+Grafana)
- OpenShift控制台中的查询日志
5.安全与隔离
- 工具在隔离的沙盒中运行
- 非根容器,丢弃功能
- 网络策略限制流量
- 只读根文件系统
- GitOps管理工具(通过PR进行安全审查)
6.示例工具集
- 日志分析沙盒 使用工具:
- log_store -高效搜索和分析日志 - privacy -从文本中清除PII
7.可扩展架构
- 克隆沙盒图表以添加自己的工具集
- 所有工具集共享相同的网关和身份验证
- 无需部署新的网关
设计哲学:效率源于设计
此模式实现了几个最大化效率的架构模式:
渐进式工具发现
网关不是预先加载所有工具定义,而是基于以下内容公开工具:
- 用户角色 -用户只能看到他们有权访问的工具
- 请求上下文 -仅提供相关工具集
- 按需加载 -工具模式在需要时加载,而不是在启动时加载
影响:一个拥有50个工具集(总共500个工具)的组织只能向每个用户提供5-10个相关工具,从而将初始化开销减少90%。
数据本地化和处理
工具在沙盒中执行,数据可以直接在操作之间流动:
# All processing happens in sandbox - data never enters AI context
logs = log_store.query(service="api", level="ERROR", hours=24)
filtered = [log for log in logs if "timeout" in log.message]
summary = privacy.scrub_pii(filtered[:10])
return summary # Only this small summary goes to AI益处:
- 无上下文限制地处理大型数据集
- 无令牌开销的链操作
- 在返回结果之前进行过滤和转换
- 处理不应到达外部人工智能服务的敏感数据
隐私保护架构
默认情况下,敏感数据保留在沙盒中:
- 沙盒到沙盒通信 -工具内部的数据流
- 可配置的结果过滤 -返回摘要,而非原始数据
- 无风险审计 -不记录数据的日志操作
- 合规友好 -将PII/PHI保留在您的基础架构中
示例:处理50000名患者的医疗数据集以找到治疗模式。沙盒在本地进行分析,只返回聚合统计数据——单个记录永远不会进入人工智能上下文。
国家管理和组成
沙盒可以跨操作维护状态,实现复杂的工作流:
# First request: Start processing
dataset = large_data_source.fetch() # 10GB dataset
progress = process_batch(dataset, batch_size=1000)
save_checkpoint(progress)
return "Processed 1,000 records, checkpoint saved"
# Follow-up request: Continue from checkpoint
progress = load_checkpoint()
result = process_remaining(progress)
return final_summary(result)这允许代理处理超过单个请求限制的长时间运行的任务。
用例
- IT运维:日志分析、基础设施自动化、事件响应
- 数据科学:数据处理、模型训练、特征工程
- 安全:威胁分析、合规性检查、漏洞扫描
- 发展:代码审查、测试生成、文档编制
主要特点
| 特点 | 优点 |
|---|---|
| 沙盒执行 | 隔离环境中的数据处理-节省90-99%的令牌 |
| 渐进式工具加载 | 只加载相关工具,而不是全部预先加载-更快的初始化 |
| 直接数据流 | 沙盒中工具之间的结果流,而不是通过AI上下文 |
| 多租户网关 | 一个网关服务于所有工具集-部署更简单 |
| 集中式身份验证 | 所有MCP服务器的一个Keycloak实例 |
| 基于角色的工具访问 | 用户只看到授权工具-减少上下文开销 |
| GitOps治理 | 所有工具均通过Git管理,并获得PR批准 |
| 隐私保护 | 敏感数据留在沙箱中,永远不会进入人工智能环境 |
| 审计日志 | 完整的线索:谁做了什么,什么时候做的 |
| OpenShift本机 | 使用运算符、路由、日志记录、安全上下文 |
| API关键支持 | 永不过期的长期代币(可选) |
文档
入门指南
配置
验证与测试
- 验证指南 -全面的功能验证和测试说明
运营
- 第2天操作指南 -监控、扩展、维护和事件响应
扩展模式
额外资源
先决条件
- 红帽OpenShift容器平台4.10+
- 群集管理员访问权限
ocCLI和podman(4.3.0+)- 容器注册表(用于自定义映像)
添加自己的工具集
多租户架构使其变得简单:
# 1. Create your tools
mkdir -p tools/database
cat > tools/database/postgres.py
# Rotate API key
./scripts/rotate-api-key.sh
# Test API keys
./scripts/test-api-keys.shAPI密钥:
- 永不过期(或可配置过期)
- 无需刷新
- 易于旋转
- 每个用户的身份和角色
支持
许可证
Apache许可证2.0-请参阅 许可证 了解详情。
贡献
这是一个经过验证的模式 沙箱层。欢迎社区捐款!
- 通过GitHub报告问题
- 提交新功能的拉取请求
- 分享您的工具集和用例
- 改进文档
图案状态
等级:沙箱 状态:积极发展 OpenShift版本: 4.10+ 最后更新:2025年12月
