Skip to content

配置和使用 EMQX Platform v5 部署中的授权

在 EMQX Platform v5 中,客户端授权用于控制 MQTT 客户端的发布和订阅权限。本文将详细介绍如何配置客户端 ID、用户名、配额限制,以及如何使用白名单、占位符和扩展授权实现更高级的权限控制。

添加授权信息

提示

  • 内置授权的最大条目数为部署连接数的两倍,上限是 10w。若超过此限额,请使用外部授权。
  • 授权字段支持字母、数字以及部分特殊字符(_、-、/、+、#、$、%、@、& 和 .),最大长度为 128 个字符。

授权可以在以下三个层级进行权限控制:

  1. 客户端 ID:对特定客户端 ID 进行授权验证。
  2. 用户名:对特定用户名进行授权验证。
  3. 全部用户:对所有用户基于主题进行授权验证。

在添加授权信息时,依次填写客户端 ID 或用户名、主题,选择动作(发布/订阅/发布 & 订阅),再选择是否允许,最后点击添加按钮完成操作。

批量导入授权信息

您可以使用提供的 CSV 模板批量导入授权信息(全部用户不支持)。导入字段说明如下:

  • clientid:客户端 ID
  • username:用户名
  • topic:授权的主题
  • action:动作(sub/pub/pubsub)
  • access:是否允许(allow/deny)

使用占位符

占位符只能用于替换主题的整个字段,例如 a/b/${username}/c/d,而不能替换字段的一部分,例如 a/b${username}c/d

主题中使用占位符时,您可以动态替换当前客户端信息。支持的占位符包括:

  • ${clientid}
  • ${username}

如果您想要限制所有用户只允许订阅或者发布特定主题,可以类似这样填写:

  • 用户名 ${username},主题 xx/${username}/report
  • 客户端ID ${clientid},主题 xx/${clientid}/report

add_acl

开启白名单

提示

  • 默认情况下,授权采用黑名单模式(即默认允许所有订阅和发布操作)。
  • 授权的匹配顺序为:全部用户权限控制 -> 用户名/客户端权限控制。
  • ClientId/Username 与 Topic 的组合是唯一的,对于同一 ClientId/Username + Topic 的多条记录,仅最新一条记录有效。
  • 如果您添加了扩展授权数据源,请确保在扩展授权页面的授权排序中将“默认授权”排在最后,以启用白名单模式。

如需在 EMQX Platform 中开启白名单(即默认拒绝所有订阅和发布操作),请在部署左侧菜单中选择认证鉴权 -> 访问控制。在全部用户页签中,添加一条授权信息,在主题字段中输入 #,选择主题动作发布 & 订阅,然后设置权限为不允许,即可开启白名单模式。

add_acl

使用外部授权实现高级权限控制

提示

  • Serverless 版本不支持外部认证授权,其他版本均支持。
  • 虽然最多支持两种扩展授权,但为确保性能,不建议同时使用多种扩展授权。

通过启用扩展授权,您可以使用自定义服务进行鉴权。当前支持的外部数据源包括 Redis、MySQL、PostgreSQL,以及通过 HTTP 服务进行鉴权。

授权排序

添加扩展授权数据源后,您可以对授权数据源进行排序,即支持自定义授权链:可通过拖动授权数据源图标,左右排列授权顺序。

在扩展授权页面点击授权排序进入排序页面。部署将按从左到右的顺序进行授权检查,默认情况下最新添加的授权排在最前面,默认授权排在最后。

  • 操作与权限匹配时,依据权限决定允许或拒绝客户端的操作。
  • 操作与权限不匹配时,将由下一个授权检查器继续检查。

add_acl