安全的自动化模式
安全的 AI 自动化都让人留在写入那一刻:助手提议、人确认,默认只读、单账号可写,或 AI 起草脚本、人来执行。
这页只讲一条边界:你放手让 AI 改多少,以及靠什么拦住「改错了变成故障」。 结论很短——安全的模式都是「写入那一刻人还在环里」的模式。 这件事夜莺在一个入口上是强制的,在另外两个上要靠你自己。
三个入口,三种写入姿态
| 入口 | 能写吗 | 模型和数据库之间隔着什么 |
|---|---|---|
| 内置助手 | 能,一小撮 | 每次修改都有服务端的确认卡片;创建缺信息时弹表单 |
/mcp | 打开写工具之后才能 | 调用时什么都没有——写工具第一次调用就落库 |
/a2a | 它就是内置助手 | 同样的确认,只是那句确认得由调用方的 Agent 发出来 |
有一条它们共同的性质,值得说明白:任何地方都没有删除工具。 助手的工具箱里没有,MCP 的工具清单里也没有。AI 对一条规则、一个仪表盘、 一个用户能干出的最坏的事是把它改了——所以这里「谁改的」比「谁删的」重要得多。
模式一——助手提议,你确认
这是默认,也是首选,因为门开在服务端,不是写在提示词里等人绕过去。
覆盖的是那些修改已有对象的工具——告警规则、仪表盘、屏蔽规则、通知规则、订阅规则—— 再加上 Skill 编写。每一个都分两条腿:
- 提议。 工具把改动算出来,用一个一次性的 id 存下,不落库。 这一轮以一张列出「会改什么」的卡片结束,文案由工具自己写,模型软化不了它。
- 确认。 只有你在下一轮回复,改动才会按存下来的内容重放执行。 模型不再被问一次,所以它没法在给你看 diff 和真正写入之间偷偷改掉内容。
提案有三条边界,都是刻意的:
- 30 分钟过期;
- 只能确认一次——再确认一遍就找不到可执行的东西了;
- 提议时会给对象状态按指纹留底,这期间被别人改过的话,确认会被拒绝, 而不是把别人的修改盖掉。
创建类的处理方式不同,但用意一样:创建工具缺了不该猜的信息——业务组、团队—— 它不会随便挑一个,而是返回一个下拉,等你选。
模式二——默认只读,一个账号能写
/mcp 上没有确认卡片,所以边界得用账号和配置搭出来。有效的做法是:
- 每个客户端一个最小权限账号、一个自己的 Token,出了事能追到具体哪个集成 (个人 Token 认证);
- 写工具保持关闭,除非某一个客户端确实需要;即使需要,也把工具集收窄到它真用的那些,
并且把
users、roles摘掉(安全地启用写工具); - 账号的业务组归属才是影响面的真正上限,因为它对读和写一视同仁 (权限继承与 RBAC)。
如果你想要的其实是「让 AI 帮我改配置」,注意内置助手已经在做这件事,而且带确认步骤。 为了同一个结果去打开 MCP 写工具,等于把这个确认换掉了。
模式三——AI 起草脚本,人来执行
告警自愈是最想自动化、也最危险的场景,所以有必要把开源版到底做什么说准。
助手能读你的自愈脚本,也能把新脚本作为文本写出来。 它对脚本库有读权限, 并且有一个专门写脚本的内置 Skill:
帮我写一个磁盘清理的自愈脚本
自愈脚本怎么从 stdin 拿告警字段?
但它建不了脚本,也跑不了脚本。 这两件事都没有对应的工具。 把脚本存下来、在机器上执行,完全留在告警通知 → 告警自愈里, 按那边既有的管控走——见用 ibex / webhook 做告警自愈。
这个分工就是这个模式本身:模型产出一份你看得懂、审得动的方案,人来落地, 执行链路上从头到尾没有模型。
值得刻意设一下的护栏
| 护栏 | 在哪 |
|---|---|
/mcp 上写工具保持关闭——默认就是关的,别动它 | [HTTP.A2A] 下的 MCPEnableWriteTools |
任何要写的客户端都把 users、roles 摘掉 | MCPToolsets |
注册了 SQL 数据源就把 logs 摘掉 | MCPToolsets,理由见权限继承与 RBAC |
| 宁可拒绝执行 Skill 脚本,也不要在没隔离的情况下跑 | [Center.Sandbox] 下的 RequireIsolation,见安装、管理与编写 Skills |
| 别把 AI 账号放进它不该看的业务组 | 人员组织 → 团队管理 |
永远不要给 AI 账号 Admin 角色 | 它会整个绕过业务组这一层 |
改了什么怎么查
三条线索,按费劲程度排:
对象本身。 经助手或经 MCP 改过的东西,「更新人」字段里是那个操作账号的名字, 和在界面上改完全一样。列表页就能看到。
对话本身。 助手改过的东西,提案卡片和你的那句确认都留在对话记录里, 按用户存着而且不过期——所以「我到底批准了什么」几个月后还答得上来。 见 Agent 与对话历史。
日志。 每一个 /mcp 请求都记了工具名、参数和操作人;每一次 Skill 脚本执行
都记了隔离级别和退出码。细节和可以直接用的 grep 命令在
安全地启用写工具。
它不会自己做的事
开源版里,每一个 AI 动作都由某个人在某个对话里发起。没有定时任务, 没有无人值守的执行,也没有任何工具会在被监控的机器上执行命令。 唯一会跑代码的是 Skill 脚本,它只在你发起的那一轮里被模型调用, 而且你可以直接配置成拒绝执行——还是那句,见安装、管理与编写 Skills。
下一步
- 确认机制在整体里的位置:Nightingale AI 概览
- MCP 的写开关:安全地启用写工具
- 让一轮对话保持只读的提示词:常见排查工作流