策略执行
OpsKat 会根据资产和分组策略评估受支持的命令与数据操作,无论操作来自 AI 智能体、应用内数据控制台还是适用的 opsctl 命令。策略决策为 Allow、Deny 或 NeedConfirm。
策略覆盖范围取决于具体能力。内置类型覆盖 shell 命令、SQL、Redis、MongoDB、Kafka、Kubernetes 和 etcd。交互式 RDP 会话与内置对象存储浏览器目前没有专用的放行/拦截策略类型。
策略类型
SSH 命令策略
控制哪些 shell 命令可以在 SSH 资产上执行。
- 允许列表 — 自动放行的命令模式(例如
ls *、cat *、systemctl status *) - 拒绝列表 — 始终阻止的命令模式(例如
rm -rf /*、shutdown *) - 分组 — 引用策略组,其规则会被合并
命令使用 shell 解析器(mvdan.cc/sh)进行精确匹配。* 通配符匹配任意参数。
SQL 查询策略
控制哪些 SQL 语句可以在数据库资产上执行。
- 允许类型 — 允许的语句类型(例如
SELECT、SHOW、DESCRIBE、EXPLAIN、USE) - 拒绝类型 — 阻止的语句类型(例如
DROP TABLE、DROP DATABASE、TRUNCATE、GRANT、REVOKE、CREATE USER、DROP USER、ALTER USER) - 拒绝标记 — 阻止的模式:
no_where_delete— 不带WHERE子句的DELETEno_where_update— 不带WHERE子句的UPDATEprepare—PREPARE语句call—CALL语句
- 分组 — 引用策略组
SQL 语句通过 TiDB Parser 进行分析,用于分类语句类型和检测危险模式。
Redis 策略
控制哪些 Redis 命令可以在 Redis 资产上执行。
- 允许列表 — 允许的命令模式(例如
GET、HGETALL、KEYS、INFO) - 拒绝列表 — 阻止的命令模式(例如
FLUSHDB、FLUSHALL、CONFIG SET *、SHUTDOWN *) - 分组 — 引用策略组
支持多词 Redis 命令(例如 CONFIG SET、ACL DELUSER)。
MongoDB 策略
按方法类型控制 MongoDB 操作。策略可以允许 find、aggregate 等读取操作,拒绝 dropDatabase、dropCollection 等破坏性操作,并将未匹配操作留给用户确认。
Kafka 策略
通过动作和资源模式控制 Kafka 操作,覆盖 Kafka 工具与面板暴露的 Broker、Topic、消费者组、ACL、Schema 和消息操作。
Kubernetes 策略
控制 Kubernetes 资产的 kubectl 命令模式。新资产采用面向只读操作的默认规则,并同时配置危险命令拒绝规则。
etcd 策略
按动作和 Key 模式控制 etcd 操作,适用于内置 etcd 面板与 AI 辅助操作。
决策流程
当操作被评估时,策略引擎会产生以下三种决策之一:
| 决策 | 含义 |
|---|---|
| 允许(Allow) | 命令匹配了允许规则,立即执行。 |
| 拒绝(Deny) | 命令匹配了拒绝规则,被阻止。 |
| 需要确认(NeedConfirm) | 没有匹配的规则,提示用户允许或拒绝。 |
评估顺序为:
- 首先检查拒绝列表 — 如果匹配,操作立即被拒绝。
- 然后检查允许列表 — 如果匹配,操作被允许。
- 无匹配 — 决策为
NeedConfirm,需要用户审批。
策略组
策略组是可复用的规则集合,可以被多个资产和分组引用。
内置策略组
OpsKat 内置了以下策略组(不可修改):
SSH 命令组
| 组名 | 说明 |
|---|---|
| Linux Read-Only | 常用的 Linux 只读命令(ls、cat、head、tail、grep、ps、df、netstat 等) |
| Kubernetes Read-Only | Kubernetes 只读命令(kubectl get、kubectl describe、kubectl logs 等) |
| Docker Read-Only | Docker 只读命令(docker ps、docker images、docker logs 等) |
| Dangerous Deny | 阻止危险的系统命令(rm -rf /*、mkfs、dd、shutdown、reboot 等) |
SQL 查询组
| 组名 | 说明 |
|---|---|
| SQL Read-Only | 仅允许 SELECT、SHOW、DESCRIBE、EXPLAIN、USE |
| SQL Dangerous Deny | 阻止 DROP TABLE、DROP DATABASE、TRUNCATE、GRANT、REVOKE、用户管理,以及标记 no_where_delete、no_where_update、prepare |
Redis 组
| 组名 | 说明 |
|---|---|
| Redis Read-Only | 仅允许只读命令(GET、HGETALL、LRANGE、SMEMBERS、ZRANGE、INFO、KEYS 等) |
| Redis Dangerous Deny | 阻止 FLUSHDB、FLUSHALL、CONFIG SET、SHUTDOWN、DEBUG、SLAVEOF、ACL 修改等 |
自定义策略组
你可以创建自定义策略组:
- 打开策略组管理页面。
- 点击 创建,选择与资产操作相匹配的策略类型。
- 定义允许/拒绝规则。
- 保存策略组。
你也可以复制一个内置策略组来创建基于它的自定义策略组。
分配策略组
策略组通过资产或分组的策略配置进行分配。当资产或分组引用了一个策略组时,该策略组的规则会被合并到资产的有效策略中。
默认情况下,新建的 SSH 资产会引用 Linux Read-Only 和 Dangerous Deny 策略组。新建的数据库资产会引用 SQL Read-Only 和 SQL Dangerous Deny。新建的 Redis 资产会引用 Redis Read-Only 和 Redis Dangerous Deny。
策略组继承
资产树中的分组可以拥有自己的策略。评估资产的有效策略时:
- 加载资产自身的策略规则和引用的策略组。
- 同时考虑父分组的策略(如果有)。
- 所有引用的策略组被解析,其规则合并到最终的允许/拒绝列表中。
这使你可以在分组级别设置组织范围的规则,同时允许资产级别的自定义覆盖。
策略测试
OpsKat 为已注册的内置策略类型提供实时策略测试器。在策略编辑器中输入操作,即可查看它会被允许、拒绝还是需要确认,以及匹配了哪条规则。