跳到主要内容

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、traceroutescript.get、script.execute用户角色中的 Execute scripts 动作,以及全局脚本本身对该账号和主机的权限设置

权限和菜单名称以所用 Zabbix 版本的界面为准。上表中的写操作在网关一侧还受产品角色约束,管理员可以在设置的 权限 中对分析员、查看者关闭。

创建专用账号

前提条件

  • 使用 Super admin 账号登录 Zabbix 前端。

步骤

  1. 在 Users > User groups 中新建用户组,例如 rst-copilot。在主机权限中,对要查询的主机组授予 Read;需要创建触发器或维护窗口的主机组授予 Read-write。平台体检还需要对 Zabbix servers 组有读权限。
  2. 在 Users > User roles 中新建用户角色,例如 rst-copilot:
    • 只读:用户类型选 User。
    • 需要创建触发器或维护窗口:用户类型选 Admin。
    • 开启 API 访问。
    • 在动作中只勾选需要的项:Acknowledge problems、Close problems、Add problem comments、Create and edit maintenance、Execute scripts。
  3. 在 Users > Users 中新建用户,例如 rst-copilot,加入上面的用户组,选择上面的角色。
  4. 为这个用户创建 API token,按安全策略设置过期时间,复制 token。Zabbix 6.0 在 Administration > General > API tokens,6.4 起在 Users > API tokens。
  5. 把 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 指定要拉取的主机组,见配置项参考。

本页内容