VMware Policy
免责声明:这是一个社区维护的开源项目,与 VMware, Inc. 或 Broadcom Inc. 无关联、未经其认可或赞助。“VMware”和“vSphere”是 Broadcom 的商标。源码在 github.com/zw008/VMware-Policy 以 MIT 许可证公开审计。
统一审计日志、策略执行与输入清理——VMware MCP 技能家族的基础设施层。
基础设施依赖:所有 8 个 VMware 技能都依赖 vmware-policy。它自动安装并提供
@vmware_tool装饰器、sanitize()函数以及共享审计数据库。 家族:vmware-aiops(VM 生命周期)、vmware-monitor(只读监控)、vmware-storage(iSCSI/vSAN)、vmware-vks(Tanzu Kubernetes)、vmware-nsx(NSX 网络)、vmware-nsx-security(DFW/防火墙)、vmware-aria(指标/告警/容量)、vmware-avi(AVI/ALB/AKO)。 | vmware-pilot(工作流编排)
本技能的功能
| 类别 | 组件 | 数量 |
|---|---|---|
| 审计日志 | AuditEngine(SQLite WAL)、日志轮转、代理检测 | 3 |
| 策略引擎 | deny 规则、维护窗口、热加载 | 3 |
| 清理 | sanitize()——提示注入防御、控制字符剥离 | 1 |
| 装饰器 | @vmware_tool——前置检查 + 执行 + 后置日志 + 元数据 | 1 |
| CLI | vmware-audit log、vmware-audit export、vmware-audit stats | 3 |
快速安装
uv tool install vmware-policy
vmware-audit stats # 验证安装
vmware-policy 会自动作为所有 VMware 技能的依赖安装。仅当需要独立审计查询时才需手动安装。
何时使用本技能
- 查询所有 VMware 技能的统一审计轨迹
- 查看被拒绝的操作和策略违规
- 检查审计统计信息(按技能、状态、时间范围)
- 导出审计日志为 JSON 供外部分析
- 配置 deny 规则或维护窗口
- 将
@vmware_tool装饰器集成到新的 VMware 技能中
此技能作为依赖自动加载——您不需要直接调用它。它在以下情况下激活:
- 调用任何 VMware 技能工具函数时(通过
@vmware_tool装饰器) - 用户询问审计日志、被拒绝的操作或策略规则时
- 用户运行
vmware-auditCLI 命令时
相关技能——技能路由
| 用户意图 | 推荐技能 |
|---|---|
| VM 生命周期、部署、客户机操作 | vmware-aiops(uv tool install vmware-aiops) |
| 只读监控、零风险 | vmware-monitor(uv tool install vmware-monitor) |
| 存储:iSCSI、vSAN、数据存储 | vmware-storage(uv tool install vmware-storage) |
| Tanzu Kubernetes(vSphere 8.x+) | vmware-vks(uv tool install vmware-vks) |
| NSX 网络:分段、网关、NAT | vmware-nsx(uv tool install vmware-nsx-mgmt) |
| NSX 安全:DFW 规则、安全组 | vmware-nsx-security(uv tool install vmware-nsx-security) |
| Aria Ops:指标、告警、容量 | vmware-aria(uv tool install vmware-aria) |
| 负载均衡器、AVI、ALB、AKO、Ingress | vmware-avi(uv tool install vmware-avi) |
| 多步骤工作流(含审批) | vmware-pilot |
| 审计日志查询、策略规则 | vmware-policy——本技能 |
常见工作流
查询近期审计活动
- 查看最近 20 条审计条目:
vmware-audit log --last 20 - 按技能过滤:
vmware-audit log --skill vmware-nsx --last 50 - 检查被拒绝的操作:
vmware-audit log --status denied --since 2026-03-28 - 查看聚合统计:
vmware-audit stats --days 7
为生产环境设置策略规则
- 复制默认规则:
cp $(python -c "import vmware_policy; print(vmware_policy.__file__.replace('__init__.py','rules_default.yaml'))") ~/.vmware/rules.yaml - 编辑
~/.vmware/rules.yaml——为生产环境添加 deny 规则:deny: - name: no-delete-in-prod operations: ["delete_*", "cluster_delete"] environments: ["production"] reason: "破坏性操作已在生产环境中被阻止" maintenance_window: start: "22:00" end: "06:00" - 规则自动热加载——无需重启
- 验证:
vmware-audit log --status denied查看被阻止的操作
导出审计日志以符合合规性
- 将所有日志导出为 JSON:
vmware-audit export --format json > audit-export.json - 按技能过滤:
vmware-audit export --skill vmware-aiops --since 2026-01-01 - 导入到您的 SIEM 或合规工具中
使用模式
| 场景 | 推荐方式 | 原因 |
|---|---|---|
| 查询审计日志 | CLI | vmware-audit 提供丰富的表格输出 |
| 集成到技能中 | Python API | from vmware_policy import vmware_tool, sanitize |
| 自动化合规导出 | CLI | vmware-audit export --format json 可管道到任何工具 |
CLI 快速参考
# 查看近期审计条目
vmware-audit log --last 20
vmware-audit log --skill vmware-nsx --status denied
vmware-audit log --since 2026-03-28 --tool delete_segment
# 导出以符合合规性
vmware-audit export --format json > audit.json
vmware-audit export --skill vmware-aiops --since 2026-01-01
# 聚合统计
vmware-audit stats --days 7
vmware-audit stats --days 30
完整 CLI 参考:参见
references/cli-reference.md
Python API
from vmware_policy import vmware_tool, sanitize
# 包装每个 MCP 工具函数
@vmware_tool(risk_level="high", sensitive_params=["password"])
def delete_segment(name: str, env: str = "") -> dict:
...
# 在返回给 LLM 之前清理不受信任的 API 响应
clean_text = sanitize(api_response_text, max_len=500)
MCP 工具(0 个)
vmware-policy 不暴露 MCP 工具。它是一个被其他 VMware 技能使用的 Python 库和 CLI。
| 组件 | 类型 | 描述 |
|---|---|---|
@vmware_tool | 装饰器 | 包装所有 8 个技能的 156+ 个 MCP 工具 |
sanitize() | 函数 | 对 API 响应的提示注入防御 |
AuditEngine | 类 | 带轮转功能的 SQLite WAL 审计日志记录器 |
PolicyEngine | 类 | 支持热加载的 YAML 规则评估 |
vmware-audit | CLI | 用于查询审计轨迹的 Typer CLI |
detect_agent() | 函数 | 从环境变量推断调用 AI 代理(见下文) |
代理检测(透明性说明)
audit.py 中的 detect_agent() 函数检查以下环境变量以识别调用工具的 AI 代理。这仅用于审计日志记录的只读检查——不提取或存储凭据:
| 环境变量 | 检测到的代理 | 目的 |
|---|---|---|
CLAUDE_SESSION_ID 或 CLAUDE_CODE | claude | Claude Code 会话 |
OPENAI_API_KEY 或 CODEX_SESSION | codex | OpenAI Codex 会话 |
OLLAMA_HOST | local | 本地 Ollama 模型 |
DEERFLOW_SESSION | deerflow | DeerFlow 会话 |
| (没有匹配) | unknown | 无法识别的代理 |
检测到的代理名称存储在 ~/.vmware/audit.db 的 agent 列中,仅用于审计轨迹目的。不会记录 API 密钥或令牌。
故障排除
“Cannot initialize audit DB”警告
审计数据库目录 ~/.vmware/ 必须可写。手动创建:mkdir -p ~/.vmware && chmod 700 ~/.vmware。
策略规则未生效
规则从 ~/.vmware/rules.yaml 加载。验证文件存在且包含有效的 YAML。PolicyEngine 在文件更改时热加载——无需重启。
审计日志过大
AuditEngine 自动在 100MB 时轮转,保留最近的 5 个归档。手动清理:ls ~/.vmware/audit.*.db 查看归档。
技能中出现“PolicyDenied”异常
这意味着 ~/.vmware/rules.yaml 中的 deny 规则匹配了该操作。运行 vmware-audit log --status denied 查看规则名称和原因。要临时绕过:VMWARE_POLICY_DISABLED=1(仍会记录为已绕过)。
装饰器未检测到技能名称
@vmware_tool 装饰器从模块路径推断技能名称(例如 vmware_aiops.ops.vm_lifecycle -> aiops)。如果模块不遵循 vmware_<skill> 约定,技能将被记录为“unknown”。
SQLite“database is locked”错误
多个并发技能进程可以通过 WAL 模式写入同一个 audit.db。如果锁定持续超过 5 秒,请检查是否有持有数据库文件的僵尸进程。
设置
uv tool install vmware-policy
mkdir -p ~/.vmware
vmware-policy 会作为所有 VMware 技能的依赖自动安装。
~/.vmware/目录在首次审计写入时自动创建。
完整设置指南、安全细节和集成说明:参见
references/setup-guide.md
安全
- 源代码:github.com/zw008/VMware-Policy
- 配置文件内容:
~/.vmware/rules.yaml仅包含规则定义,不包含凭据 - Webhook 数据范围:不适用——vmware-policy 不会外部发送数据
- TLS 验证:不适用——vmware-policy 不进行网络连接
- 提示注入保护:
sanitize()截断到 500 字符并剥离 C0/C1 控制字符 - 最小权限:审计数据库仅本地存储(
~/.vmware/audit.db),不暴露到网络