审计与审批
OpsKat 中的每一个操作都会被记录,并附带完整的决策追踪。审计系统覆盖来自 AI 智能体、opsctl CLI 和 MCP 集成的所有操作。审批工作流为 CLI 操作提供受控的访问机制,授权系统支持命令模式的预审批。
审计日志
所有工具执行都会自动记录在审计日志中,无论操作来源如何。每条日志包含以下信息:
| 字段 | 说明 |
|---|---|
| 来源 | 操作发起方:ai、opsctl 或 mcp |
| 工具名称 | 被调用的工具(例如 run_command、exec_sql、upload_file) |
| 资产 | 目标资产(ID 和名称) |
| 命令 | 执行的命令或查询 |
| 请求 / 结果 | 完整的请求参数和执行结果(截断至 4KB) |
| 成功 | 执行是否成功 |
| 决策 | allow(允许)或 deny(拒绝) |
| 决策来源 | 决策的产生方式(见下方) |
| 匹配模式 | 匹配的具体规则或模式 |
| 会话 ID | opsctl 或 AI 会话标识符 |
| 对话 ID | 该操作所属的 AI 对话(如适用) |
| 授权会话 ID | 授权该操作的授权会话(如适用) |
| 时间戳 | 操作发生的时间 |
决策来源
每条审计日志都记录了决策来源,说明允许/拒绝决策是如何产生的:
| 来源 | 说明 |
|---|---|
policy_allow | 被策略允许列表规则放行 |
policy_deny | 被策略拒绝列表规则阻止 |
user_allow | 用户在提示时手动批准 |
user_deny | 用户在提示时手动拒绝 |
grant_allow | 匹配了已批准的授权模式 |
grant_deny | 授权请求被拒绝 |
session_allow | 匹配了"记住"的会话规则(来自确认对话框中的"记住"按钮) |
auto_allow | 自动允许(未配置策略) |
审计日志查看器
桌面应用中的审计日志查看器提供:
- 可筛选列表 — 按来源、工具、资产、决策和时间范围筛选
- 会话筛选 — 查看特定会话中的所有操作
- 详情视图 — 查看任意操作的完整请求和结果
审批工作流
当 opsctl CLI 在桌面应用运行期间使用时,需要审批的操作会被路由到应用的 UI 界面。
工作原理
opsctl通过 Unix 套接字(<data-dir>/approval.sock)发送审批请求。- 桌面应用显示审批对话框,展示操作详情。
- 用户审核后批准或拒绝。
- 响应发送回
opsctl,后者继续执行或中止。
这适用于 exec、cp、create、update 和 grant 等操作。
审批类型
| 类型 | 说明 |
|---|---|
exec | 远程命令执行 |
cp | 文件传输(本地到远程、远程到本地或跨服务器) |
create | 创建新资产 |
update | 更新已有资产 |
grant | 提交命令模式进行预审批 |
授权系统
授权系统允许你预先批准命令模式,使后续匹配的命令自动通过审批,减少重复确认。
提交授权
授权可以从两个地方提交:
- AI 智能体 —
request_permission工具提交命令模式并附带理由。 - opsctl CLI —
opsctl grant submit从命令行提交模式。
opsctl 示例:
opsctl grant submit 1 "cat /var/log/*" "systemctl * nginx"
授权生命周期
- 创建一个
GrantSession,状态为 pending(待处理),包含一条或多条GrantItem记录(每条指定一个资产和命令模式)。 - 桌面应用显示审批对话框,用户可以在批准前审核并编辑模式。
- 批准后,授权会话状态变为 approved(已批准)。
- 后续匹配已批准模式的
run_command调用将自动通过(决策来源:grant_allow)。
授权项支持 * 通配符匹配(例如 cat /var/log/* 匹配 cat /var/log/syslog)。已批准的授权项不会被消耗 — 它们在整个会话期间持续有效,可以匹配多个命令。
记住模式
除了授权系统外,执行确认对话框还有一个 记住 按钮。点击后,命令模式会被存储在当前会话的内存中。这与授权系统是分开的 — 记住的模式仅在会话范围内有效,不会持久化到数据库。
opsctl 会话管理
opsctl session 命令用于管理审批会话:
- 会话将相关操作分组在一起
- 同一会话中的所有操作在审计日志中共享相同的会话 ID
- 授权项的作用范围限定在其授权会话内