跳到主要内容

安全性

YedMQ 当前的安全能力主要由传输加密、多租户隔离、插件驱动的访问控制,以及带认证的管理 API 共同组成。

传输安全

YedMQ 可以为原生 MQTT 客户端和浏览器客户端分别暴露加密监听器。

MQTT over TLS

[listener.tcp_tls]
external = "0.0.0.0:8883"
cert_file = "/path/to/server.crt"
key_file = "/path/to/server.key"

MQTT over WSS

[listener.wss]
external = "0.0.0.0:8084"
cert_file = "/path/to/server.crt"
key_file = "/path/to/server.key"

当前 Broker 配置真正接入的 TLS 字段是 cert_filekey_file。完整监听器结构请参考 监听器配置

认证与鉴权

YedMQ 将身份认证和 ACL 判定委托给插件系统。

当没有插件响应时的默认行为

[mqtt]
default_authentication = "allow" # "allow" | "deny"
default_authorization = "allow" # "allow" | "deny"
  • allow 便于本地开发和快速验证。
  • deny 更适合受控环境下的安全默认值。

插件当前可参与的判定信息

在连接和消息处理流程里,插件可以基于以下信息进行放行或拒绝:

  • 用户名与密码
  • 客户端 ID
  • 客户端 IP
  • 发布或订阅动作
  • 主题名
  • 租户归属

认证插件还可以返回 tenant_id,它会成为该连接后续的隔离边界。

REST API 保护

管理 API 使用在 yedmq.toml 中配置的 HTTP Basic Authentication:

[listener.api.auth]
users = [
{ username = "admin", password = "change_me_in_production" }
]

所有 /api/v1/* 请求都必须带上合法凭据。实际部署时应使用强密码,并避免将管理 API 直接暴露给不可信网络。

作为安全边界的租户隔离

  • 不同租户之间看不到彼此的会话、主题和保留消息。
  • 客户端 ID 只需要在单个租户内保持唯一。
  • 带租户前缀的 REST 路径可以减少跨租户误操作。

关于租户分配和路由的更多说明,请参考 多租户