安全MCP代码网关模式

一个基于GitOps的验证模式,用于在Red Hat OpenShift上部署安全的企业级MCP基础设施,提供统一认证、基于角色的访问控制和全面审计日志。

  • by gaurav-nelson
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 gaurav-nelson/secure-mcp-code-gateway

使用说明

安全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服务器,出现了三个关键挑战:

  1. 安全和合规差距 -传统的MCP实施缺乏企业安全控制:

    • 无集中式身份验证 -每个MCP服务器都管理自己的身份验证,从而造成不一致的安全态势
    • 无审计追踪 -没有统一的日志记录谁访问了哪些工具、何时以及处理了哪些数据
    • 无RBAC -用户可以访问所有工具,也可以不访问任何工具;没有细粒度的基于角色的权限
    • 数据暴露风险 -敏感数据通过外部人工智能服务流动,不受任何控制
    • 合规失败 -SOC 2、HIPAA和PCI-DSS需要传统MCP无法提供的审计日志和访问控制
  2. 操作复杂性 -管理数十台独立的MCP服务器意味着:

    • 多个端点用于保护和监控
    • 日志记录格式不一致
    • 操作时没有单块玻璃
    • 在没有集中可见性的情况下难以应对事件
  3. 成本和性能 -没有优化:

    • 预先加载数百个工具模式会消耗大量令牌(每个工具定义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 <your-api-key>"
        }
      }
    }
  }
}

# 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多个令牌。

解决方案:这一模式将关切分开:

  1. 网关处理发现 -仅返回基于用户请求和角色的相关工具定义
  2. 沙盒处理执行 -工具直接相互调用;沙盒内的数据流
  3. 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关键支持 永不过期的长期代币(可选)

文档

入门指南

配置

验证与测试

运营

扩展模式

额外资源

先决条件

  • 红帽OpenShift容器平台4.10+
  • 群集管理员访问权限
  • oc CLI和 podman (4.3.0+)
  • 容器注册表(用于自定义映像)

添加自己的工具集

多租户架构使其变得简单:

# 1. Create your tools
mkdir -p tools/database
cat > tools/database/postgres.py <<'EOF'
def execute_query(database: str, query: str):
    """Execute SQL query against database."""
    return results
EOF

# 2. Clone sandbox chart
cp -r charts/hub/mcp-log-analysis-sandbox charts/hub/mcp-database-sandbox

# 3. Update gateway configuration
# Edit charts/hub/mcp-gateway/values.yaml to add tool set

# 4. Deploy
git add .
git commit -m "Add database tool set"
git push
# ArgoCD automatically syncs

就是这样! 现有网关现在路由到您的新沙盒。

看 扩展模式 详细说明。

现实世界的影响:行动中的情境效率

场景1:日志分析

没有这种模式 (传统AI聊天):

Developer: "Find production errors from last hour"
AI: "Please download logs and paste them..."
Developer: *downloads 500MB of logs*
Developer: *tries to paste*
AI: "Error: Input exceeds context limit"
Developer: *manually filters logs*
Developer: *pastes filtered logs*
AI: "Here are the errors..." (processes 50K tokens)

→ Result: 30 minutes, $5 in tokens, manual work required

使用此模式 (沙盒执行):

Developer: "Find production errors from last hour"
AI: *calls log_store tool in sandbox*
   Sandbox: Queries 2M log lines locally
   Sandbox: Filters for level=ERROR, time=last_hour
   Sandbox: Returns top 5 with context
AI: "Here are the top 5 errors..." (processes 200 tokens)

→ Result: 5 seconds, $0.01 in tokens, fully automated

代币节省:99.6% (50000个代币→ 200 代币)


场景2:数据管道(电子表格→ CRM)

无沙盒执行:

Request: "Import customer contacts from Sheet-123 to Salesforce"

Step 1: Fetch spreadsheet
  API: Returns 10,000 rows
  Tokens: 150,000 (all rows flow through AI context)

Step 2: AI processes each row
  AI: Validates 10,000 rows in context
  Tokens: 150,000 (reading again)

Step 3: AI writes to CRM
  AI: Formats 10,000 records
  Tokens: 200,000 (writing out)

Total: 500,000 tokens, 5 minutes, $25

使用此模式 (数据保存在沙盒中):

Request: "Import customer contacts from Sheet-123 to Salesforce"

Step 1: Gateway routes to sandbox
  Sandbox: Fetches Sheet-123 (10,000 rows stay in sandbox)

Step 2: Sandbox processes internally
  for row in sheet.rows:
    salesforce.create_contact(row)

Step 3: Sandbox returns summary
  Returns: "Imported 10,000 contacts, 3 validation errors"

AI receives: Summary only (50 tokens)

Total: 50 tokens, 30 seconds, $0.02

代币节省:99.99% (500000代币→ 50 代币)


场景3:多步数据处理

任务:“分析第四季度销售数据:按地区汇总,确定顶级产品,生成总结报告”

传统方法 (所有数据均通过人工智能):

1. Load sales.csv (50K rows) → 200K tokens in context
2. AI groups by region → keeps all data in context
3. AI calculates top products → still all in context
4. AI formats report → reads everything again
Total: 600K+ tokens

此图案 (沙盒处理):

1. Sandbox loads sales.csv (data stays in sandbox)
2. Sandbox runs: df.groupby('region').agg({'sales': 'sum'})
3. Sandbox calculates: df.groupby('product').head(10)
4. Sandbox generates: summary.json with 20 lines
5. AI receives: Only the 20-line summary → 300 tokens
Total: 300 tokens

代币节省:99.95% (600000代币→ 300 代币)


关键洞察

该模式保留数据 安全沙箱内部 它属于哪里。人工智能协调操作并看到结果,但从未成为数据传输机制。这提供了:

  • 大幅降低成本 -在数据繁重的任务上减少90-99%的令牌
  • 更快的响应 -无需等待巨大的上下文窗口来处理
  • 更好的安全性 -敏感数据永远不会离开您的基础设施
  • 可扩展性 -处理超出上下文限制的数据集

API密钥管理

对于生产使用,建议使用API密钥而不是OAuth令牌:

# Create API key (never expires)
./scripts/create-api-key.sh alice mcp-log-analyst never

# List all API keys
./scripts/list-api-keys.sh

# Revoke API key
./scripts/revoke-api-key.sh <key-id>

# Rotate API key
./scripts/rotate-api-key.sh <key-id>

# Test API keys
./scripts/test-api-keys.sh

API密钥:

  • 永不过期(或可配置过期)
  • 无需刷新
  • 易于旋转
  • 每个用户的身份和角色

支持

许可证

Apache许可证2.0-请参阅 许可证 了解详情。

贡献

这是一个经过验证的模式 沙箱层。欢迎社区捐款!

  • 通过GitHub报告问题
  • 提交新功能的拉取请求
  • 分享您的工具集和用例
  • 改进文档

图案状态

等级:沙箱 状态:积极发展 OpenShift版本: 4.10+ 最后更新:2025年12月