跳到主要内容

审计与审批

OpsKat 中的每一个操作都会被记录,并附带完整的决策追踪。审计系统覆盖来自 AI 智能体、opsctl CLI 和 MCP 集成的所有操作。审批工作流为 CLI 操作提供受控的访问机制,授权系统支持命令模式的预审批。

审计日志

所有工具执行都会自动记录在审计日志中,无论操作来源如何。每条日志包含以下信息:

字段说明
来源操作发起方:aiopsctlmcp
工具名称被调用的工具(例如 run_commandexec_sqlupload_file
资产目标资产(ID 和名称)
命令执行的命令或查询
请求 / 结果完整的请求参数和执行结果(截断至 4KB)
成功执行是否成功
决策allow(允许)或 deny(拒绝)
决策来源决策的产生方式(见下方)
匹配模式匹配的具体规则或模式
会话 IDopsctl 或 AI 会话标识符
对话 ID该操作所属的 AI 对话(如适用)
授权会话 ID授权该操作的授权会话(如适用)
时间戳操作发生的时间

决策来源

每条审计日志都记录了决策来源,说明允许/拒绝决策是如何产生的:

来源说明
policy_allow被策略允许列表规则放行
policy_deny被策略拒绝列表规则阻止
user_allow用户在提示时手动批准
user_deny用户在提示时手动拒绝
grant_allow匹配了已批准的授权模式
grant_deny授权请求被拒绝
session_allow匹配了"记住"的会话规则(来自确认对话框中的"记住"按钮)
auto_allow自动允许(未配置策略)

审计日志查看器

桌面应用中的审计日志查看器提供:

  • 可筛选列表 — 按来源、工具、资产、决策和时间范围筛选
  • 会话筛选 — 查看特定会话中的所有操作
  • 详情视图 — 查看任意操作的完整请求和结果

审批工作流

opsctl CLI 在桌面应用运行期间使用时,需要审批的操作会被路由到应用的 UI 界面。

工作原理

  1. opsctl 通过 Unix 套接字(<data-dir>/approval.sock)发送审批请求。
  2. 桌面应用显示审批对话框,展示操作详情。
  3. 用户审核后批准或拒绝。
  4. 响应发送回 opsctl,后者继续执行或中止。

这适用于 execcpcreateupdategrant 等操作。

审批类型

类型说明
exec远程命令执行
cp文件传输(本地到远程、远程到本地或跨服务器)
create创建新资产
update更新已有资产
grant提交命令模式进行预审批

授权系统

授权系统允许你预先批准命令模式,使后续匹配的命令自动通过审批,减少重复确认。

提交授权

授权可以从两个地方提交:

  1. AI 智能体request_permission 工具提交命令模式并附带理由。
  2. opsctl CLIopsctl grant submit 从命令行提交模式。

opsctl 示例:

opsctl grant submit 1 "cat /var/log/*" "systemctl * nginx"

授权生命周期

  1. 创建一个 GrantSession,状态为 pending(待处理),包含一条或多条 GrantItem 记录(每条指定一个资产和命令模式)。
  2. 桌面应用显示审批对话框,用户可以在批准前审核并编辑模式。
  3. 批准后,授权会话状态变为 approved(已批准)。
  4. 后续匹配已批准模式的 run_command 调用将自动通过(决策来源:grant_allow)。

授权项支持 * 通配符匹配(例如 cat /var/log/* 匹配 cat /var/log/syslog)。已批准的授权项不会被消耗 — 它们在整个会话期间持续有效,可以匹配多个命令。

记住模式

除了授权系统外,执行确认对话框还有一个 记住 按钮。点击后,命令模式会被存储在当前会话的内存中。这与授权系统是分开的 — 记住的模式仅在会话范围内有效,不会持久化到数据库。

opsctl 会话管理

opsctl session 命令用于管理审批会话:

  • 会话将相关操作分组在一起
  • 同一会话中的所有操作在审计日志中共享相同的会话 ID
  • 授权项的作用范围限定在其授权会话内