关于 VMware Harden
VMware Harden 是面向 VMware 环境的合规扫描与基线检查 MCP 服务,适合安全和运维团队。它提供多种合规基线、VMSA 漏洞核查及漂移检测,并且只读访问基础设施。
主要功能
- 01覆盖 CIS、vSphere SCG、PCI-DSS 等基线
- 02检查 ESXi 和 vCenter 的 VMSA 漏洞
- 03检测配置漂移并生成报告
- 04展示检查覆盖范围和未评估项
- 05提供 LLM 修复建议
适用场景
- 01核查 vSphere 环境是否符合选定基线
- 02按离线目录检查已知 VMware 安全公告
- 03比较观测结果以发现配置漂移
MCP 相关
提供 8 个只读 MCP 工具,用于扫描与检查 VMware 环境;工具不会修改受管基础设施。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
vmware-harden
免责声明:由社区维护的开源项目。与 VMware, Inc. 或 Broadcom Inc. 无关联,也未获得其认可或赞助。“VMware”、“vSphere”、“ESXi”和“NSX”是 Broadcom 的商标。源代码依据 MIT 许可证公开供审查,地址为 github.com/vmware-skills/VMware-Harden。
English | 中文
面向 AI 的 VMware 合规与基线实施工具。属于 vmware-* 技能系列的同系列项目。
- 对 vSphere 只读:全部 8 个 MCP 工具均带有
[READ]标记,不会更改受管理的 VMware 基础设施;scan_target仅写入本地 Twin 数据库(用于缓存其自身观测结果)。请参阅只读设计。
GA 系列成员(自 v1.5.18 起)
可用于生产环境的合规平台,内置 9 个基线(CIS ESXi 8.0 + 9.0、vSphere SCG v8 + v9、与 vSphere 9 STIG 对齐、等保 2.0 三级、PCI-DSS 4.0、EU NIS2、BSI IT-Grundschutz),包含 99 条规则、针对 ESXi 和 vCenter 构建版本的 VMSA 已知漏洞检查、多 vCenter Twin、偏移检测、大模型修复顾问、包含 8 个经审计工具的 MCP 服务、Web 控制面板,以及 vmware-harden doctor 环境诊断工具。
快速入门
# The collectors extra is what makes `scan` work: harden reads inventory
# through vmware-aiops / vmware-storage / vmware-nsx-security, and `uv tool
# install` gives each tool its own environment — installing them separately
# puts them where harden cannot import them from.
uv tool install "vmware-harden[collectors]"
# Reporting on an existing twin DB needs no collectors:
# uv tool install vmware-harden
# List built-in baselines
vmware-harden baseline list
# Run a scan
vmware-harden scan --target <vcenter-name> --baseline cis-vmware-esxi-8.0-subset
# Or use 等保 2.0 三级 (国内合规独家)
vmware-harden scan --target <vc> --baseline dengbao-2.0-level3-vmware
# View results
vmware-harden report
vmware-harden drift
# Generate remediation suggestions
export ANTHROPIC_API_KEY=... # optional; falls back to mock without
vmware-harden advise --all-critical
# Web dashboard
vmware-harden web --port 8080 # → http://127.0.0.1:8080
解读结果:违规项本身不能作为判定依据
规则只能判断实际采集到的配置,而采集可能以两种互不相关的方式失败。若没有采集器能够生成某条规则所需的属性,该规则就不会执行。即使规则确实运行了,对于某台特定主机也可能一无所获,因为返回的值缺失或为 N/A 哨兵值——例如主机无法访问、账户权限不足,或 ESXi 构建版本不支持该设置。这两种情况都不会被报告为通过:
$ vmware-harden report
No violations among the checks that could be made.
16 of 20 rules could not be evaluated — no collector provides the data they
check, so their result is unknown, not compliant. 6 of 8 per-node checks could
not be made across 2 node(s): the rules ran, but the values they read were
missing on those nodes, so those nodes are unknown rather than compliant.
Not evaluated:
cis-esxi-2.1.1 no collector writes host.ntp_enabled
...
Not judged on these nodes (data missing):
cis-esxi-2.2.1 esx-02 esxi_build
...
--format json 会返回 {"violations": [...], "coverage": {...}},MCP 工具也会返回相同的 coverage 区块,因此 Agent 不能仅凭 violations: 0 就断定“合规”。在 v1.9.0 之前,未采集属性的规则会匹配到零行,并被静默计为通过;在 v1.10.0 之前,按节点区分的情况也存在同样问题。请参阅 RELEASE_NOTES.md。
这两个列表需要分别处理:第一种情况需要等待采集器,第二种情况则需要确保节点可访问,并确认扫描账户具备相应权限。
离线/隔离网络安装(从源代码安装)
本项目采用现代 PEP 517 构建系统(hatchling),因此有意不提供 setup.py——这是预期设计,并非文件缺失。如果你克隆源代码后遇到 ERROR: File "setup.py" or "setup.cfg" not found ... editable mode currently requires a setuptools-based build,说明你的 pip 版本低于 21.3,无法通过非 setuptools 后端进行可编辑(-e)安装。可编辑模式只是开发便利功能,并非运行该工具所必需——可选择以下任一方式:
# From the source tree — a normal (non-editable) install builds a wheel:
pip install . # NOT pip install -e .
# ...or upgrade pip first, and editable works too:
pip install --upgrade pip && pip install -e .
对于完全隔离网络的主机,请在联网机器上构建 wheel 并复制过去——目标主机无需联网:
# On a connected machine, collect this package + its dependencies as wheels:
pip wheel . -w dist # → dist/*.whl (or: uv build, for just this package)
# Copy dist/ to the air-gapped host, then install offline:
pip install --no-index --find-links dist vmware-harden
只读设计
vmware-harden 对 vSphere 和 NSX 只读——全部 8 个 MCP 工具均带有 [READ]
标记,不会更改受管理的 VMware 基础设施。scan_target 仅写入本地 Twin 数据库(~/.vmware-harden/twin.duckdb),
用于缓存其自身观测结果,而非受管理的基础设施。此技能不会应用修复操作;修复工作交由
vmware-pilot 处理,后者为写操作提供审批门控和审计跟踪。
内置基线
| 基线 | 规则 | 适用于 | 来源 |
|---|---|---|---|
cis-vmware-esxi-8.0-subset | 20 | host | CIS Benchmark v1.0 |
vsphere-scg-v8-subset | 15 | host, vm | VMware vcf-security-and-compliance-guidelines |
dengbao-2.0-level3-vmware | 20 | host, vm, datastore, dfw_rule | GB/T 22239-2019 三级 |
pci-dss-4.0-vmware | 10 | host, dfw_rule | PCI-DSS v4.0 |
eu-nis2-vmware | 12 | host, dfw_rule | EU NIS2 Directive(第 21/23 条,附件 I) |
bsi-itgs-basisabsicherung-vmware | 10 | host | BSI IT-Grundschutz(OPS.1.1.4 + SYS.1.1) |
cis-vmware-esxi-9.0-subset | 20 | host | 通过 extends: 继承自 cis-vmware-esxi-8.0-subset |
vsphere-scg-v9-subset | 15 | host, vm | 通过 extends: 继承自 vsphere-scg-v8-subset |
vmsa-advisories | 3(每条已编入目录的公告一条) | host, vcenter | 离线 VMSA 目录 — 参见已知漏洞 |
vsphere-stig-v9-subset ⚠️ 实验性 | 12 | host | 与 vSphere 9 STIG 对齐的主机高级设置(DoD/DISA STIG 内容)— 已在 ESXi 8.0.3 上验证采集器;尚未在 9.x 上运行 |
baseline list 会返回 10 个 ID:上述 7 个包含规则的 YAML 基线(共 99 条规则)、两个
v9 别名(本身不包含规则,会解析为其 v8 父级的规则),以及
vmsa-advisories(由公告目录生成,而非从文件读取)。
已知漏洞(VMSA)
vmsa-advisories 会根据随软件包提供的离线 VMware 安全公告目录(vmware_harden/advisories/catalog.yaml,并在目录日期对照其来源进行核查),评估每台 ESXi 主机和 vCenter 自身的版本与构建号。每条公告对应一条规则;每条规则的文本都会引用其作为证据所依据的等保 2.0 三级控制项(安全计算环境·入侵防范:发现已知漏洞,并在测试后修补)。
vmware-harden scan --target prod-vc --baseline vmsa-advisories
vmware-harden report # each affected component: its fix, and whether the CVE is in CISA KEV
vmware-harden report --format csv > vmsa.csv
| 判定 | 含义 |
|---|---|
| affected | 存在违规。证据会指出修复该问题的发行版。 |
| fixed | 同一版本线,且版本达到或高于修复版本。 |
| unknown | 按节点列出原因:无法读取构建号、公告未列出的版本线或已超出支持期限的版本线、来源之间存在分歧的分支,或目录尚未收录的产品。绝不表示通过。 |
结果干净,表示截至目录日期没有已知的未修复公告,而不是“没有漏洞”:之后发布的公告不会收录在目录中。构建号只在同一 major.minor 版本线内比较(7.0 U3 的构建号可能在数值上大于 8.0 GA 的构建号)。
目录的构建方式。 Broadcom 的公告页面设有机器人验证,无法通过脚本读取;Broadcom 也没有发布 CSAF 源。每条记录根据 NVD CVE API(CVE、CVSS、易受攻击的版本)、CISA KEV 源(在野外遭利用)和 Broadcom 构建号 KB 文章(修复版本)汇编,并通过引用该公告的独立来源确认每个修复版本。每项修复都会与 builds.yaml 中的构建号 KB 快照进行机械核验。首个目录(2026-10-19)收录了三条列入 KEV 的公告:VMSA-2025-0004(ESXi)、VMSA-2024-0019 和 VMSA-2026-0006(vCenter;其 ESX 部分尚未收录,结果为 unknown)。
可选刷新。 vmware-harden advisories update 会下载 CISA KEV 源(使用 --nvd 时还会下载 NVD 评分)至 ~/.vmware-harden/advisories-cache.json,目录加载器会将其叠加到目录中:只会新增 KEV 标记,只会补充缺失的 CVSS,绝不会从中获取修复构建号。它还会列出 KEV 中尚无目录内公告涵盖的 ESXi/vCenter CVE。KEV 获取失败时会以状态码 1 退出,并保留先前的缓存;无法读取的 NVD 记录会予以报告,但不会阻止 KEV 刷新。运行中的 MCP 服务会在下一次调用时加载新缓存。报告会显示上次检查 KEV 的时间。vmware-harden advisories show 会打印目录日期和上次刷新时间。
VCF 9.0 / 9.1 兼容性
现有基线(cis-vmware-esxi-8.0-subset、vsphere-scg-v8、dengbao-2.0-level3-vmware、pci-dss-4.0-vmware)可以成功扫描 VCF 9.0 / 9.1 集群——大多数规则针对的是在 8.x → 9.x 之间保持稳定的主机高级设置。cis-vmware-esxi-9.0-subset 和 vsphere-scg-v9-subset 目前以其 v8 父基线的 extends: 别名形式提供——规则相同,但使用 v9 名称的 ID 来执行扫描和报告。Broadcom 发布 v9 指南后,将向其中添加专用于 9.x 的规则。
vsphere-stig-v9-subset 是包含规则、与 STIG 对齐的基线:包含 12 项主机高级设置控制(账户锁定、密码策略、DCUI 访问、Shell/DCUI 超时、MOB、来宾 BPDU、远程 syslog),映射到官方开源 vSphere STIG 内容(MITRE InSpec / Cinc Auditor)。状态:实验性。 其检查会读取 ESXi 主机高级设置,这些设置由主机收集器通过 config.option PropertyCollector 流程获取。该流程已于 2026-08-13 在端到端测试中验证,测试对象为一台正在运行的独立 ESXi 8.0.3(build 24280767):12 个属性均有返回值,且值的格式符合规则预期(account_lock_failures=5、dcui_access='root'、password_quality_control='retry=3 min=disabled,disabled,disabled,7,7'、mob_enabled=False、syslog_remote_host=''),扫描发现了 3 项真实违规。仍未验证的内容,也是状态保持实验性的原因:ESXi 9.x(此基线实际面向的版本)以及任何由 vCenter 管理的多主机清单。请将 9.x 上的结果视为非权威结果。v1.9.0 的未确定机制本身不会处理获取失败:只有在没有收集器声明某个属性时(这是对词汇表的静态检查),规则才会被拒绝;而这些 STIG 属性已被声明,因此对应规则会运行。如果真实的 PropertyCollector 流程在实际硬件上返回空结果,该属性就会缺失,规则仍会匹配到零行。v1.10.0 会捕获这种情况——此类主机会被记录为单节点覆盖缺口(coverage.undetermined_node_checks),而不是判定为通过,因此未验证的收集器会显示为未评判的主机,而非生成一份干净的报告。仍未验证的是该流程是否返回了正确的值,而任何覆盖机制都无法告知这一点。基线的 status 字段会通过 list_baselines 和 describe_stig_content_sync 呈现,因此扫描会自行声明这一限制。这是一次内容同步,而非 API 封装——VCF Operations 9.1 Automated Configuration Compliance (ACC) / Security Posture Management (SPM) 由 UI 和计划任务驱动,不提供公开的合规性 REST API。如需持续的全机群强制执行和自动修复,请使用 VCF Operations SPM/ACC(UI);vmware-harden 是一个可通过 API 脚本控制、使用 DuckDB 持久化、支持跨目标的即时扫描器。请参阅 references/stig-content-sync.md,并使用 vmware-harden stig controls 检查目录。
Broadcom 官方参考资料
- 安全配置指南:https://core.vmware.com/security/ — vSphere SCG v8 / 未来的 v9
- SDK:https://developer.broadcom.com/sdks — VCF Python SDK(用于通过 REST 获取主机配置)
- CIS 基准:https://www.cisecurity.org/cis-benchmarks/ — CIS VMware ESXi Benchmark v1.0(8.0 / 未来的 9.0)
自定义基线
vmware-harden baseline validate ./my-strict.yaml
vmware-harden baseline import ./my-strict.yaml --name my-strict-cis
vmware-harden scan --target <vc> --baseline my-strict-cis
YAML 支持通过 extends: 继承内置基线。请参阅 skills/vmware-harden/references/cli-reference.md。
MCP 服务
vmware-harden mcp # stdio MCP server (legacy alias: vmware-harden-mcp)
使用 examples/mcp-configs/*.json 中的任一配置文件配置 MCP 客户端。提供 8 个只读工具:list_baselines、get_baseline_rules、list_stig_controls、describe_stig_content_sync、list_violations、get_remediation、list_drift_events、scan_target。
架构
- Estate Digital Twin — 位于
~/.vmware-harden/twin.duckdb的 DuckDB 单文件。通过所有节点 ID 的目标前缀支持多目标安全操作。 - Collectors — 延迟导入同级 vmware-* 技能(无需进程启动开销)。所有扫描均为只读;写入操作延后至 vmware-pilot。
- Baseline schema — Pydantic v2,严格模式(
extra="forbid"),支持extends:继承和用户目录覆盖。 - Drift — 纯差异函数,支持可选持久化;每次扫描后自动运行。
- Advisor — 由 LLM 驱动的 Suggestion 生成;使用带提示词缓存的 Anthropic provider;在测试环境或无 API 密钥的环境中回退到模拟实现。
- Audit — 每个 MCP 工具都由 vmware-policy 系列的
@vmware_tool封装。 - Web — FastAPI + Jinja2 + Tailwind/HTMX/ECharts CDN。
实验室回归
export VMWARE_HARDEN_LAB_TARGET=<your-vc>
pytest tests/eval/regression -v -m lab
系列
- vmware-aiops — 主机清单 + 运维(由 harden 的 HostCollector 使用)
- vmware-monitor — 只读对应项
- vmware-storage — 数据存储清单
- vmware-nsx-security — DFW 清单
- vmware-pilot — 执行修复(涉及写入;不在 harden 范围内)
- vmware-policy —
@vmware_tool审计装饰器
验收标准(v1.5.18 GA)
- 221 项测试通过
- Bandit:所有严重级别均为 0 个问题
- 全部 8 个 MCP 工具均通过审计
- SKILL.md ≤ 3000 字,符合系列约定
- SECURITY.md 包含 6 个要素 + Broadcom 免责声明
- 9 个内置基线(7 个含规则集合中的 99 条规则 + 2 个 v9 别名)
- 提供用于环境诊断的
vmware-harden doctor - vmware-* 系列的 GA 成员(版本与 1.5.28 对齐)
参考资料
- 系列 CLAUDE.md:单体仓库根目录下的
CLAUDE.md
远程访问(HTTPS)和限制工具
默认情况下,vmware-harden mcp 通过 stdio 与一个本地客户端通信,并提供所有工具。以下两个选项可以改变这一行为
(vmware-policy ≥ 1.21.0)。
通过 HTTPS 提供服务,让其他机器上的客户端也能连接。每个调用方都需要一个 bearer token:
vmware-audit token create alice # prints the token once; give it to alice
vmware-audit token list # names only
vmware-audit token revoke alice # refused from its next request, no restart
vmware-harden mcp --transport https --host 0.0.0.0 --port 8443 \
--cert /etc/vmware-mcp/server.pem --key /etc/vmware-mcp/server-key.pem \
--public-name mcp.example.com
连接客户端(此处以 Claude Code 为例;任何支持 streamable HTTP 和自定义标头的 MCP 客户端均可):
claude mcp add --transport http vmware-harden https://mcp.example.com:8443/mcp \
--header "Authorization: Bearer $VMWARE_MCP_TOKEN"
{
"mcpServers": {
"vmware-harden": {
"type": "http",
"url": "https://mcp.example.com:8443/mcp",
"headers": { "Authorization": "Bearer ${VMWARE_MCP_TOKEN}" }
}
}
}
- 如果没有令牌,服务将无法启动;它会拒绝
--public-name之外的 Host/Origin 值,并在绑定端口前检查未经身份验证的请求是否会收到 401。请使用客户端信任的证书,且证书适用于这些名称。 - 如果在同一台机器上使用 TLS 终止反向代理,请使用
--transport http --host 127.0.0.1 --public-name mcp.example.com,并透传Authorization标头。 - 如果负载均衡器或网关位于另一台机器上,请保留
--transport https(自签名证书也可以),在--public-name中列出负载均衡器发送的 Host 主机名,并让它转发Authorization。其健康探测可以使用GET /healthz,该请求不需要令牌,且只返回{"status": "ok"}(vmware-policy ≥ 1.23.0)。 - 每个请求都发送
traceparent或X-Request-ID,以便将其记录在审计行中;随后使用vmware-audit log --correlation-id ID即可找到一个平台请求所涉及的调用。 - 审计日志会将每个调用方记录为
token:<name>。指定不同目标的调用会并行运行;未指定目标的调用则逐个运行,因此多人共用一台服务器时,请指定目标。 - 所有能够访问此端点的人都会使用此服务器的账户执行操作。 令牌用于识别调用方;它们不会授予任何平台权限。请为每个权限级别运行一个端点。
- 多人或多种角色共用一个端点: 运行一次
vmware-audit roles enable,然后为每个令牌指定一个角色(例如vmware-audit token create NAME --role reader,或在roles.yaml中指定角色及其工具和目标;vmware-policy ≥ 1.24.0)。角色会限制令牌在此端点上可以调用的工具;其权限不会超过账户本身的权限。对于限制目标的角色,scan_target的目标会根据 vmware-aiops 的配置进行检查;数据存储和 DFW 收集器会在 vmware-storage 和 vmware-nsx-security 的配置中查找同名目标,因此这三个配置中的名称必须指向同一个系统。请参阅 vmware-policy 的 README 中的“网络调用方的角色”。
**限制工具:**此服务的所有工具均为只读,因此 --expose read 在这里不会改变任何内容;该选项是为具备写入能力的技能提供的。最小权限取决于服务器使用的账户。
详情:skills/vmware-harden/references/setup-guide.md(“通过 HTTPS 提供 MCP 服务”“限制提供的工具”)。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。