Zabbix 权限
为网关创建专用的 Zabbix 账号。用户组决定可见的主机组,用户角色决定可调用的接口和可执行的动作。附各功能所需的权限、最小权限配置、验证方法和主机组白名单。
网关用一个 Zabbix API token(或账号密码)访问 Zabbix。可见范围由两层决定:用户组(User group)的主机权限限定主机组,范围之外的主机、问题和历史数据查询不到;用户角色(User role)限定用户类型、是否允许调用 API,以及确认问题、执行脚本等动作。网关在这两层之上不放宽任何限制。
网关默认只读。写入 Zabbix 的只有确认或关闭问题、创建触发器、创建维护窗口、执行 Ping 和 Traceroute 全局脚本四类操作,都由人在界面上发起。不需要这些功能时,给一个只读账号即可。
用户组没有授权的主机组,Zabbix API 直接不返回其中的数据,不报权限错误。查询结果为空时,先检查这一层。
网关调用的接口
| 功能 | 接口 | Zabbix 要求 |
|---|---|---|
| 连接与版本识别 | apiinfo.version | 无。readyz 和测试连接都用它 |
| 对话、实时故障、态势、调查、报告 | problem.get、event.get、trigger.get、item.get、history.get、trend.get、host.get、hostgroup.get | 对相关主机组有读权限 |
| 监控项字典、监控健康度、设备台账、拓扑 | item.get、host.get、template.get、discoveryrule.get、httptest.get、map.get | 对相关主机组有读权限 |
| SLA 报告 | service.get、sla.get、sla.getsli | 能读取对应的服务和 SLA |
| 平台体检 | proxy.get、hanode.get,以及 Zabbix server 主机的内部监控项 | 对监控 Zabbix server 自身的主机(默认名 Zabbix server)有读权限。hanode.get 只对 Super admin 开放,不是 Super admin 时 HA 节点一项显示无法检查,其他项照常 |
| 确认、关闭问题,添加备注 | event.acknowledge | 用户角色中的 Acknowledge problems、Close problems、Add problem comments 动作。关闭还要求触发器允许手动关闭 |
| 创建触发器 | trigger.create | 用户类型为 Admin,对目标主机所在主机组有读写权限。触发器创建后为停用状态 |
| 维护窗口 | maintenance.get、maintenance.create、maintenance.delete | 用户类型为 Admin,对目标主机组有读写权限,用户角色中有 Create and edit maintenance 动作。网关只删除自己创建的维护窗口 |
| 远程 ping、traceroute | script.get、script.execute | 用户角色中的 Execute scripts 动作,以及全局脚本本身对该账号和主机的权限设置 |
权限和菜单名称以所用 Zabbix 版本的界面为准。上表中的写操作在网关一侧还受产品角色约束,管理员可以在设置的 权限 中对分析员、查看者关闭。
创建专用账号
前提条件
- 使用 Super admin 账号登录 Zabbix 前端。
步骤
- 在 Users > User groups 中新建用户组,例如
rst-copilot。在主机权限中,对要查询的主机组授予 Read;需要创建触发器或维护窗口的主机组授予 Read-write。平台体检还需要对Zabbix servers组有读权限。 - 在 Users > User roles 中新建用户角色,例如
rst-copilot:- 只读:用户类型选 User。
- 需要创建触发器或维护窗口:用户类型选 Admin。
- 开启 API 访问。
- 在动作中只勾选需要的项:Acknowledge problems、Close problems、Add problem comments、Create and edit maintenance、Execute scripts。
- 在 Users > Users 中新建用户,例如
rst-copilot,加入上面的用户组,选择上面的角色。 - 为这个用户创建 API token,按安全策略设置过期时间,复制 token。Zabbix 6.0 在 Administration > General > API tokens,6.4 起在 Users > API tokens。
- 把 token 填入
.env的ZABBIX_TOKEN,执行docker compose -f docker-compose.prod.yml up -d。首次安装时在deploy.sh提问 Zabbix API token 时填写即可。
不要使用 Super admin 的 token。token 过期后,readyz 返回 503,查询报 Zabbix 认证错误,按上面第 4、5 步换一个新 token。
没有 API token 时也可以用账号和密码(ZABBIX_USER、ZABBIX_PASSWORD),网关调用 user.login 取得会话。推荐 token,它不受密码策略和登录失败锁定影响。
远程诊断的脚本
远程 ping 和 traceroute 不执行任意命令,只调用两个指定名称的 Zabbix 全局脚本,默认 Ping 和 Traceroute(Zabbix 自带)。脚本必须满足:
- 在 Zabbix server 或 proxy 上执行。在 agent 上执行的脚本会被拒绝。
- 范围为手动主机动作(Manual host action)。
- 脚本的用户组和主机权限设置允许网关账号对目标主机执行。
每次执行先预览,确认后才调用 script.execute,执行、预览和失败都记入审计。改用其他脚本名时设置 RST_DIAG_SCRIPT_PING、RST_DIAG_SCRIPT_TRACEROUTE,见配置项参考。
验证权限
在设置的 Zabbix 连接 中选择 测试连接。成功时显示「已连接 · Zabbix」和版本号,失败时显示「连不上」和原因。这里也可以先填一套地址和 token 试连,正式生效仍以 .env 为准,改完需重启网关。
也可以在网关主机上执行 curl -k https://<域名>/readyz,zabbix 为 ok 表示 token 有效、Zabbix 可达。
主机组白名单
Zabbix 用户组决定网关能读什么,主机组白名单决定网关会读什么。白名单在设置的 数据访问范围与脱敏 中设置,或在 .env 的 RST_INDEX_WHITELIST 中设置,逗号分隔,支持 *,为空时不限制。两层都设置时,用户组只授予需要的主机组,白名单再缩小一层。
设置白名单后:
- 查询白名单之外的主机组被拒绝;读取白名单之外的对象时按不存在处理,不暴露对象是否存在。
- 模型只看到白名单内的主机组。
- Zabbix webhook 推送来的白名单外问题被丢弃,接入状态中显示丢弃数。
- 实时故障的轮询需要用
RST_ALERT_INGEST_GROUPS指定要拉取的主机组,见配置项参考。