](https://mseep.ai/app/alexgoller-illumio-mcp-server)
Illumio MCP服务器
一种模型上下文协议(MCP)服务器,提供与Illumio PCE(策略计算引擎)交互的接口。此服务器支持对Illumio工作负载管理、标签操作、流量分析、自动围栏和基础设施服务识别的编程访问。
它能做什么?
使用会话式AI与您的PCE对话:
- 完整CRUD 关于工作负载、标签、IP列表、服务和规则集
- 流量分析 --查询流、获取摘要、按策略决策筛选
- 自动围栏 --使用一个命令分析流量并创建应用程序到应用程序的细分策略
- 选择性执行 --为具有可配置消费者口味的选择性模式下的应用程序添加拒绝规则
- 基础设施服务标识 --使用图中心性分析发现哪些应用程序是基础设施服务,这样你就知道首先要制定什么政策
- 拒绝规则管理 --创建、更新和删除拒绝规则(包括紧急情况下的覆盖拒绝)
- 事件监控 --使用严重性和类型筛选器查询PCE事件
- PCE健康检查 --验证连接和凭据
先决条件
- Python 3.8+
- 访问Illumio PCE实例
- PCE的有效API凭据
安装
- 克隆存储库:
git clone https://github.com/alexgoller/illumio-mcp-server.git
cd illumio-mcp-server- 安装依赖项:
uv sync配置
您应该使用 uv 命令,这使得传递环境变量并在后台运行它变得更加容易。
使用uv和Claude Desktop
在MacOS上: ~/Library/Application\ Support/Claude/claude_desktop_config.json 在Windows上: %APPDATA%/Claude/claude_desktop_config.json
将以下内容添加到 custom_settings 章节:
"mcpServers": {
"illumio-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/illumio-mcp-server",
"run",
"illumio-mcp"
],
"env": {
"PCE_HOST": "your-pce-host",
"PCE_PORT": "your-pce-port",
"PCE_ORG_ID": "1",
"API_KEY": "api_key",
"API_SECRET": "api_secret"
}
}
}
}使用OAuth资源服务器的HTTP传输(阶段3a)
服务器使用MCP Streamable HTTP传输通过HTTP运行(规范修订版 2025-03-26)并验证由您的IdP颁发的OAuth 2.1承载令牌。这是 阶段3a:身份得到强制执行;每个用户的PCE密钥进入阶段3b。
使用身份验证运行(生产形态)
export MCP_PUBLIC_URL=https://mcp.illumio.example
export MCP_OAUTH_ISSUER=https://login.microsoftonline.com//v2.0
export MCP_OAUTH_JWKS_URL=https://login.microsoftonline.com//discovery/v2.0/keys
export MCP_OAUTH_AUDIENCE=https://mcp.illumio.example
export MCP_OAUTH_REQUIRED_SCOPE=illumio-mcp.use # default; override if needed
illumio-mcp-http --host 127.0.0.1 --port 8080服务器拒绝在没有这些环境变量的情况下启动(除非 MCP_DEV_INSECURE=1).
MCP客户端通过标准RFC 9728端点发现AS:
GET /.well-known/oauth-protected-resource未经身份验证的请求 /mcp 返回 401 随着 WWW-Authenticate: Bearer resource_metadata="",符合任何规范 MCP客户端(Claude Desktop、ChatGPT、MCP Inspector)自动跟随 对配置的AS运行PKCE身份验证代码流。
无身份验证运行(仅限开发人员)
MCP_DEV_INSECURE=1 illumio-mcp-http服务器记录了一个突出的警告。请勿在生产中使用。
健康端点(始终未经身份验证)
GET /healthz--活性GET /readyz--准备就绪(阶段3a返回与健康相同的结果;阶段3b/c将增加PCE+JWKS可达性)
两种PCE模式(阶段3b与阶段3e)
HTTP服务器支持两种方式来获取PCE凭据,通过以下方式选择 MCP_PCE_MODE:
| 模式 | MCP_PCE_MODE | PCE信誉 | 入职 | PCE侧审计 |
|---|---|---|---|---|
| 每用户 (默认) | per_user | 每个经过身份验证的用户一个PCE API密钥,在密钥库中加密 | 用户通过 /setup 页面或 register-pce-credentials 工具 | PCE日志通过每个用户的API密钥显示真实的人类 |
| 共享 | shared | env中的一个PCE服务帐户密钥(与stdio相同) | 无-对任何经过身份验证的用户立即有效 | PCE日志显示服务帐户;MCP审计日志是“谁做了什么”的真相来源 |
在以下情况下按用户选择:
- 您希望PCE侧审计归因能够识别人员
- 用户很乐意提供自己的PCE API密钥一次
- 您可以容忍每个用户的PCE密钥蔓延(PCE有限制)
在以下情况下选择共享:
- PCE对每个用户的API密钥的限制对于每个用户模式来说过于激进
- 您希望零摩擦入职(否
/setup步骤) - 您可以仅依靠MCP审核日志进行人员级别归因
- 您自己操作PCE服务帐户,并按计划轮换
在 共享 模式, /setup 未安装凭据管理工具 (register-pce-credentials, delete-pce-credentials)友好地拒绝 错误,以及 MCP_KEK 不需要。SSO+JWT+基于角色的认证+审计 log+confirm标记仍然同样适用。
# Shared mode — same env that stdio uses today, plus auth/role config
export MCP_PCE_MODE=shared
export PCE_HOST=https://your-pce.example.com
export PCE_PORT=8443
export PCE_ORG_ID=1
export API_KEY=your_pce_api_key_name
export API_SECRET=your_pce_api_key_secret
# (other auth/role env vars from earlier sections still apply)
illumio-mcp-http每个用户PCE密钥(阶段3b)
每个经过身份验证的用户都有自己的PCE API密钥/机密存储在 加密的SQLite密钥库。每个人的PCE端审计日志属性正确; 撤销用户是一个单一的工具调用。
使用auth运行时需要额外的env:
export MCP_KEK=$(python -c 'import os, base64; print(base64.b64encode(os.urandom(32)).decode())')
export MCP_KEYSTORE_PATH=/var/lib/illumio-mcp/keys.db # default: ./data/keys.dbKEK是 从不 存储在数据库旁边。KEK损失=总损失 储存的信用证(故意、失败关闭)。对于生产,MCP_KEK来源于 KMS或Vault,而不是操作员的shell。
入职路径(可选择其中之一):
- 浏览器 --参观
/setup认证后;将凭据粘贴到表单中。 - MCP客户端 --呼叫
register-pce-credentials工具;唯一的工具
在注册凭据之前可用。
其他凭证工具:
check-pce-credentials-status--此用户是否已注册凭据?delete-pce-credentials--删除此用户的凭据。
基于角色的授权(第3c阶段)
服务器将每个用户的IdP组映射到三个内部角色之一: 读者, 操作员, 管理员。每个工具的授权由 调度员使用 roles 每个上的元数据 ToolSpec.
配置组→ 通过env进行角色映射(逗号分隔):
# A user matching ANY of these groups gets that role; highest role wins.
export MCP_ROLE_GROUPS_ADMIN=sg-illumio-mcp-admin
export MCP_ROLE_GROUPS_OPERATOR=sg-illumio-mcp-operator,sg-illumio-mcp-admin
export MCP_ROLE_GROUPS_READER=sg-illumio-mcp-readonly,sg-illumio-mcp-operator,sg-illumio-mcp-admin
# Optional: fallback role when no group matches. Leave unset to refuse.
# export MCP_ROLE_DEFAULT=reader逐个工具默认值:
| 工具类别 | 允许的角色 | 示例 |
|---|---|---|
| 读取 | 阅读器、操作员、管理员 | get-labels, get-workloads, get-traffic-flows |
| 写入 | 运算符、管理员 | create-*, update-*, delete-* |
| 配置+批量 | 管理员 | provision-policy, ringfence-batch |
没有匹配角色的用户(也没有 MCP_ROLE_DEFAULT)接收结构化 forbidden_no_role 错误。
审计日志(第3c阶段)
每个调度器决策(允许/拒绝/错误)都会写入SQLite审计 数据库。架构和存储位置:
# Defaults to /audit.db
export MCP_AUDIT_LOG_PATH=/var/lib/illumio-mcp/audit.db审核行包括 (ts, sub, iss, tool, decision, reason, role, request_id) — 从不 工具论证。这 request_id 匹配 X-Request-Id 响应标头,以便可以关联外部跟踪。
查询示例:
-- Recent denied calls per user
SELECT ts, sub, tool, reason FROM audit_log
WHERE decision='denied'
ORDER BY ts DESC LIMIT 20;
-- Tool-call volume by user
SELECT sub, COUNT(*) FROM audit_log
WHERE ts > date('now', '-7 days')
GROUP BY sub ORDER BY 2 DESC;确认变异工具的令牌(第3d阶段)
标记的工具 requires_confirm=True (目前 provision-policy, ringfence-batch, register-pce-credentials, delete-pce-credentials)要求 服务器在中颁发了一次性确认令牌 params._meta.confirm_token 当 通过HTTP调用。Stdio模式不受影响——启动 该过程可以直接调用变异工具。
身份验证模式下所需的环境变量:
export MCP_CONFIRM_HMAC_KEY=$(python -c 'import os, base64; print(base64.b64encode(os.urandom(32)).decode())')
# Optional:
# export MCP_CONFIRM_TTL_SECONDS=120
# export MCP_CONFIRM_JTI_PATH=/var/lib/illumio-mcp/jti.db
# export MCP_CONFIRM_FRESH_AUTH_SECONDS=300 # require JWT auth_time within 5 min客户如何使用它
- 在没有令牌的情况下调用变异工具→ 服务器返回:
{"error": "confirm_required", "params_hash": "", "message": "..."}- 呼叫
POST /confirm使用JWT和params_hash:
curl -X POST https://mcp.illumio.example/confirm \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{"tool":"provision-policy","params_hash":""}'
# → {"confirm_token": "...", "expires_in": 120}- 使用令牌重新调用工具
params._meta.confirm_token.
代币是 一次性使用 (回放返回 confirm_token_replay)以及 作用域的 到 (sub, tool, params_hash)篡改任何字段都会使令牌无效。
逐步认证(可选,建议用于生产)
集 MCP_CONFIRM_FRESH_AUTH_SECONDS=300 要求JWT auth_time 声称在最后5分钟内。强制用户重新进行身份验证 在铸造代币之前——最强大的即时注射防御 没有交互式会话模型。需要发布IdP auth_time (Entra和Okta都为OIDC签到流程提供服务)。
工具
负载管理
get-workloads--通过按名称、主机名、IP、标签和最大结果进行可选筛选来检索工作负载create-workload--使用名称、IP地址和标签创建非托管工作负载update-workload--更新现有工作负载的属性delete-workload--从PCE中删除工作负载
标签操作
get-labels--通过可选的按键、值和最大结果过滤来检索标签create-label--使用键值对创建新标签update-label--更新现有标签delete-label--删除标签
规则集和规则管理
get-rulesets--获取具有按名称、描述和启用状态进行可选筛选的规则集create-ruleset--创建具有作用域的新规则集update-ruleset--更新规则集属性delete-ruleset--删除规则集create-deny-rule--在规则集中创建拒绝规则(常规或覆盖拒绝)update-deny-rule--更新现有的拒绝规则delete-deny-rule--删除拒绝规则
IP列表管理
get-iplists--获取IP列表,可选择按名称、描述、FQDN和最大结果进行筛选create-iplist--创建新的IP列表update-iplist--更新现有IP列表delete-iplist--删除IP列表
服务管理
get-services--通过按名称、端口、协议和最大结果进行可选筛选来获取服务create-service--创建新的服务定义update-service--更新现有服务delete-service--删除服务
流量分析
get-traffic-flows--通过按日期范围、源/目的地、服务、策略决策等进行过滤,获取详细的流量数据get-traffic-flows-summary--获取按应用程序、环境、端口和协议分组的聚合流量摘要
自动围栏
create-ringfence— 自动创建应用程序到应用程序的细分策略。 分析流量以发现哪些远程应用程序与目标应用程序通信,然后使用以下内容创建规则集:
- 范围内允许规则 --应用程序中的所有工作负载都可以自由通信 - 额外范围允许规则 --每个发现的远程应用程序都会在所有服务上获得一个允许规则 - 选择性执行模式 (selective=true)--添加了一个拒绝规则,阻止所有入站,首先处理已知应用程序的允许规则。使您比完全强制模式更快地进入强制模式。 - 拒绝消费口味 (deny_consumer 参数): - any (默认)--IP列表任意(0.0.0.0/0)作为消费者,仅在目的地拒绝。最安全。 - ams --所有工作负载作为消费者,拒绝推送到每个受管理的工作负载。更广泛。 - ams_and_any --两者都有。最大覆盖范围。 - 政策覆盖意识 --每条规则都注释为 already_allowed (现有政策涵盖的流量,为记录而创建)或 newly_allowed (填补政策空白)。摘要显示了有多少远程应用程序已经覆盖,而需要新的规则。 - skip_allowed 参数 --设置为 true 仅为现有策略尚未涵盖的流量创建规则,生成仅填补空白的最小规则集 - 合并安全 --检测现有规则集和规则,从不创建重复项 - 模拟运行支持 --预览在不进行更改的情况下创建的内容
基础设施服务标识
identify-infrastructure-services— 发现哪些应用程序是基础设施服务 通过分析交通模式。构建应用程序到应用程序的通信图并使用 双重模式评分 识别两种类型的基础设施:
供应商基础设施 (AD、DNS、共享数据库)——被许多应用程序使用,程度高,程度低。 消费者基础设施 (监控、备份、日志传送)——连接到许多应用程序,输出程度高,输入程度低。
每个应用程序计算两个分数,较高者获胜:
| 分数 | 程度指标(40%) | 方向性(30%) | 中间性(25%) | 数量(5%) |
|---|---|---|---|---|
| 提供者 | 程度 | 消费者比率(占/总) | 中间中心性 | 连接量 |
| 消费者 | 输出度 | 生产者比率(输出/总) | 中间中心性 | 连接量 |
混合交通抑制: score *= 1 / (1 + min(in_degree, out_degree) * 0.3) --同时具有重要入站和出站连接的应用程序是业务应用程序,而不是基础设施。纯定向应用程序(全部输入或全部输出)不会受到惩罚。
非生产环境(登台、开发等)收到 50%的扣分 因为基础设施服务通常存在于生产中。
应用程序分为不同的层次:
- 核心基础设施 (得分>=75)——监控、AD、SIEM、DNS。政策首先。 - 共享服务 (得分>=50)——共享数据库、消息队列。第二个政策。 - 标准应用 (得分\ .env << EOF PCE_HOST=your-pce-host PCE_PORT=8443 PCE_ORG_ID=1 API_KEY=your-api-key API_SECRET=your-api-secret EOF
Run all tests
uv run pytest tests/ -v
测试套件包括:
- 工具列表和模式验证
- 工作负载、标签、IP列表、服务、规则集和拒绝规则的完整CRUD生命周期
- 交通流量查询和汇总
- 围栏创建(标准、选择性、拒绝消费者口味、合并幂等性)
- 基础设施服务识别(评分、排序、层次分类)
- 丢失资源的错误处理
## Illumio规则处理订单
了解规则处理对于围栏至关重要:
1. **基本规则** --内置,不能修改
1. **覆盖拒绝规则** --阻止交通覆盖所有允许(紧急使用)
1. **允许规则** --允许流量(环形围栏远程应用程序规则请点击此处)
1. **拒绝规则** --阻止特定流量(环形围栏拒绝所有入站流量进入此处)
1. **默认操作** --选择性模式=允许所有,完全执行=拒绝所有
在选择性执行中,默认值是允许所有,因此需要一个拒绝规则来使围栏有效。已知的远程应用程序会获得允许规则(步骤3),这些规则在拒绝(步骤4)之前进行处理。
## 视觉示例
以下所有示例均由Claude Desktop生成,并使用通过此MCP服务器获得的数据。
### 应用分析

*应用程序通信模式和依赖关系的详细视图*

*不同应用层之间的流量模式分析*
### 基础设施洞察

*显示关键基础设施指标和状态的概览仪表板*

*基础设施服务通信的详细分析*
### 安全评估

*综合安全分析报告*

*高风险漏洞的安全评估结果*

*PCI合规性评估结果*

*SWIFT合规性评估结果*
### 补救计划

*安全补救计划概述*

*安全补救实施的详细步骤*
### 策略管理

*IP列表管理界面*

*规则集类别和组织概述*

*应用程序规则集排序配置*
### 负载管理

*详细的工作量分析和指标*

*工作负载流量模式的识别和分析*
### 标签管理

*按类型和类别组织PCE标签*
### 服务分析

*基于流量模式的服务角色自动推理*

*前五大交通来源和目的地分析*
### 项目规划

*项目实施时间表和里程碑*
## 可用提示
### 围栏应用
这 `ringfence-application` prompt帮助创建安全策略,通过控制入站和出站流量来隔离和保护应用程序。
**必需参数:**
- `application_name`:环栅栏应用程序的名称
- `application_environment`:应用程序到环栅栏的环境
**特征:**
- 为应用程序内的层间通信创建规则
- 使用流量来识别所需的外部连接
- 基于源应用程序实施入站流量限制
- 为必要的外部通信创建出站流量规则
- 处理作用域内(相同的app/env)和作用域外(外部)连接
- 为远程应用程序连接创建单独的规则集
### 分析应用程序流量
这 `analyze-application-traffic` prompt提供了对应用程序流量模式和连接的详细分析。
**必需参数:**
- `application_name`:要分析的应用程序的名称
- `application_environment`:要分析的应用程序环境
**分析特点:**
- 按入站和出站流量订购流量
- 按应用程序/环境/角色组合分组
- 识别相关标签类型和模式
- 以React组件格式显示结果
- 显示协议和端口信息
- 尝试识别已知的服务模式(例如,端口5666上的Nagios)
- 将流量分为基础设施和应用程序类型
- 确定互联网曝光率
- 显示Illumio角色、应用程序和环境标签
### 如何使用MCP提示
第一步:点击界面中的“从MCP连接”按钮

步骤2:从已安装的MCP服务器中进行选择

步骤3:填写所需的提示参数:

第四步:点击提交,发送配置好的提示
### 提示如何工作
- MCP服务器将配置的提示发送给Claude
- Claude通过模型上下文协议接收上下文
- 允许专门处理Illumio的特定任务
此工作流程实现了Illumio系统和Claude之间的自动上下文共享,用于应用程序流量分析和围栏任务。
## 码头工人
该应用程序可以从GitHub容器注册表中作为Docker容器使用。
### 拉动容器
docker pull ghcr.io/alexgoller/illumio-mcp-server:latest
您还可以通过替换来使用特定版本 `latest` 带有版本号:
docker pull ghcr.io/alexgoller/illumio-mcp-server:1.0.0
### 使用Claude Desktop运行
要将容器与Claude Desktop一起使用,您需要:
1. 创建环境文件(例如。 `~/.illumio-mcp.env`)使用您的PCE凭据:
PCE_HOST=your-pce-host PCE_PORT=your-pce-port PCE_ORG_ID=1 API_KEY=your-api-key API_SECRET=your-api-secret
2. 将以下配置添加到您的Claude Desktop配置文件中:
在MacOS上(`~/Library/Application Support/Claude/claude_desktop_config.json`):
{ "mcpServers": { "illumio-mcp-docker": { "command": "docker", "args": [ "run", "-i", "--init", "--rm", "-v", "/Users/YOUR_USERNAME/tmp:/var/log/illumio-mcp", "-e", "DOCKER_CONTAINER=true", "-e", "PYTHONWARNINGS=ignore", "--env-file", "/Users/YOUR_USERNAME/.illumio-mcp.env", "illumio-mcp:latest" ] } } }
确保:
- 更换 `YOUR_USERNAME` 使用您的实际用户名
- 创建日志目录(例如。 `~/tmp`)
- 根据您的系统调整路径
### 独立运行
您也可以直接运行容器:
docker run -i --init --rm \ -v /path/to/logs:/var/log/illumio-mcp \ -e DOCKER_CONTAINER=true \ -e PYTHONWARNINGS=ignore \ --env-file ~/.illumio-mcp.env \ ghcr.io/alexgoller/illumio-mcp-server:latest
### Docker Compose
对于开发或测试,您可以使用Docker Compose:
version: '3' services: illumio-mcp: image: ghcr.io/alexgoller/illumio-mcp-server:latest init: true volumes: - ./logs:/var/log/illumio-mcp environment: - DOCKER_CONTAINER=true - PYTHONWARNINGS=ignore env_file: - ~/.illumio-mcp.env
然后运行:
docker-compose up
## 贡献
1. 分叉存储库
1. 创建要素分支
1. 提交您的更改
1. 推到分支
1. 创建拉取请求
## 许可证
该项目根据GPL-3.0许可证获得许可。看 [许可证](LICENSE) 文件以获取详细信息。
## 支持
如需支持,请 [创建问题](https://github.com/alexgoller/illumio-mcp-server/issues).