跳到主要内容

策略执行

OpsKat 对每一个操作都执行允许/拒绝规则 — 无论是通过 AI 智能体、查询编辑器还是 opsctl CLI 触发的操作。三种策略类型分别覆盖 SSH 命令、SQL 语句和 Redis 操作。

策略类型

SSH 命令策略

控制哪些 shell 命令可以在 SSH 资产上执行。

  • 允许列表 — 自动放行的命令模式(例如 ls *cat *systemctl status *
  • 拒绝列表 — 始终阻止的命令模式(例如 rm -rf /*shutdown *
  • 分组 — 引用策略组,其规则会被合并

命令使用 shell 解析器(mvdan.cc/sh)进行精确匹配。* 通配符匹配任意参数。

SQL 查询策略

控制哪些 SQL 语句可以在数据库资产上执行。

  • 允许类型 — 允许的语句类型(例如 SELECTSHOWDESCRIBEEXPLAINUSE
  • 拒绝类型 — 阻止的语句类型(例如 DROP TABLEDROP DATABASETRUNCATEGRANTREVOKECREATE USERDROP USERALTER USER
  • 拒绝标记 — 阻止的模式:
    • no_where_delete — 不带 WHERE 子句的 DELETE
    • no_where_update — 不带 WHERE 子句的 UPDATE
    • preparePREPARE 语句
    • callCALL 语句
  • 分组 — 引用策略组

SQL 语句通过 TiDB Parser 进行分析,用于分类语句类型和检测危险模式。

Redis 策略

控制哪些 Redis 命令可以在 Redis 资产上执行。

  • 允许列表 — 允许的命令模式(例如 GETHGETALLKEYSINFO
  • 拒绝列表 — 阻止的命令模式(例如 FLUSHDBFLUSHALLCONFIG SET *SHUTDOWN *
  • 分组 — 引用策略组

支持多词 Redis 命令(例如 CONFIG SETACL DELUSER)。

决策流程

当操作被评估时,策略引擎会产生以下三种决策之一:

决策含义
允许(Allow)命令匹配了允许规则,立即执行。
拒绝(Deny)命令匹配了拒绝规则,被阻止。
需要确认(NeedConfirm)没有匹配的规则,提示用户允许或拒绝。

评估顺序为:

  1. 首先检查拒绝列表 — 如果匹配,操作立即被拒绝。
  2. 然后检查允许列表 — 如果匹配,操作被允许。
  3. 无匹配 — 决策为 NeedConfirm,需要用户审批。

策略组

策略组是可复用的规则集合,可以被多个资产和分组引用。

内置策略组

OpsKat 内置了以下策略组(不可修改):

SSH 命令组

组名说明
Linux Read-Only常用的 Linux 只读命令(lscatheadtailgreppsdfnetstat 等)
Kubernetes Read-OnlyKubernetes 只读命令(kubectl getkubectl describekubectl logs 等)
Docker Read-OnlyDocker 只读命令(docker psdocker imagesdocker logs 等)
Dangerous Deny阻止危险的系统命令(rm -rf /*mkfsddshutdownreboot 等)

SQL 查询组

组名说明
SQL Read-Only仅允许 SELECTSHOWDESCRIBEEXPLAINUSE
SQL Dangerous Deny阻止 DROP TABLEDROP DATABASETRUNCATEGRANTREVOKE、用户管理,以及标记 no_where_deleteno_where_updateprepare

Redis 组

组名说明
Redis Read-Only仅允许只读命令(GETHGETALLLRANGESMEMBERSZRANGEINFOKEYS 等)
Redis Dangerous Deny阻止 FLUSHDBFLUSHALLCONFIG SETSHUTDOWNDEBUGSLAVEOF、ACL 修改等

自定义策略组

你可以创建自定义策略组:

  1. 打开策略组管理页面。
  2. 点击 创建,选择策略类型(命令、查询或 Redis)。
  3. 定义允许/拒绝规则。
  4. 保存策略组。

你也可以复制一个内置策略组来创建基于它的自定义策略组。

分配策略组

策略组通过资产或分组的策略配置进行分配。当资产或分组引用了一个策略组时,该策略组的规则会被合并到资产的有效策略中。

默认情况下,新建的 SSH 资产会引用 Linux Read-OnlyDangerous Deny 策略组。新建的数据库资产会引用 SQL Read-OnlySQL Dangerous Deny。新建的 Redis 资产会引用 Redis Read-OnlyRedis Dangerous Deny

策略组继承

资产树中的分组可以拥有自己的策略。评估资产的有效策略时:

  1. 加载资产自身的策略规则和引用的策略组。
  2. 同时考虑父分组的策略(如果有)。
  3. 所有引用的策略组被解析,其规则合并到最终的允许/拒绝列表中。

这使你可以在分组级别设置组织范围的规则,同时允许资产级别的自定义覆盖。

策略测试

OpsKat 为三种策略类型都提供了实时策略测试器。输入命令、SQL 语句或 Redis 命令,即可查看它是否会被允许、拒绝或需要确认,以及匹配了哪条规则。