微消息队列 MQTT 版权限管理是通过阿里云的访问控制 RAM(Resource Access Management)实现的。使用 RAM 可以让您避免与其他用户共享云账号密钥,即 AccessKey(包含 AccessKeyId 和 AccessKeySecret),按需为用户分配最小权限。本文介绍微消息队列 MQTT 版在 RAM 中的权限策略。

在 RAM 中,权限策略是用语法结构描述的一组权限的集合,可以精确地描述被授权的 Resource(资源集)、Action(操作集)以及授权条件。微消息队列 MQTT 版有以下两类 RAM 的权限策略:

  • 系统策略:统一由阿里云创建,您只能使用不能修改,策略的版本更新由阿里云维护。
  • 自定义策略:您可以自主创建、更新和删除,策略的版本更新由您自己维护。

系统策略

微消息队列 MQTT 版目前提供三种系统默认的权限策略。

注意 微消息队列 MQTT 版目前不支持独立的系统权限策略。您在为 RAM 用户授予以下系统权限策略时,除了对微消息队列 MQTT 版生效外,还会对消息队列 RocketMQ 版生效。
权限策略名称 说明
AliyunMQFullAccess 管理微消息队列 MQTT 版的权限,等同于主账号的权限,被授予该权限的 RAM 用户具有所有消息收发权限且有控制台所有功能操作权限。
AliyunMQPubOnlyAccess 微消息队列 MQTT 版的发布权限,被授予该权限的 RAM 用户具有使用主账号所有资源通过 SDK 发送消息的权限。
AliyunMQSubOnlyAccess 微消息队列 MQTT 版的订阅权限,被授予该权限的 RAM 用户具有使用主账号所有资源通过 SDK 订阅消息的权限。

自定义策略

自定义权限策略(Policy)可以满足您更细粒度的授权需求。

微消息队列 MQTT 版的 Resource 与 Action 的对应规则如下所述。

微消息队列 MQTT 版中,实例、Topic 和 Group 各为一种 Resource,对这些 Resource 授予的权限即为 Action。Topic 和 Group 的 Resource 命名格式因实例是否有命名空间而异。您可在微消息队列 MQTT 版控制台的实例详情页面查看实例是否有命名空间。

微消息队列 MQTT 版的 Resource 和 Action 的可选值和对应规则可分为控制台、OpenAPI 和微消息队列 MQTT 版客户端三大类类。针对控制台资源的相关操作,按资源类型又可分为实例、Topic 和 Group 三类。

说明 如需访问微消息队列 MQTT 版的资源以及 OpenAPI,则需有访问微消息队列 MQTT 版实例的权限,即 mq:MqttInstanceAccess 权限。

MQTT 客户端收发消息权限

消息收发权限涉及 Topic 和 Group ID 的 Resource 命名格式,这些命名格式因微消息队列 MQTT 版实例是否有命名空间而异:
  • 有命名空间
    • Topic:acs:mq:*:*:{storeInstanceId}%{topic}
    • Group ID:acs:mq:*:*:{mqttInstanceId}%{groupid}
    注意 此处的 storeInstanceid 指您为微消息队列 MQTT 版实例绑定的持久化实例的 ID。您可在微消息队列 MQTT 版控制台的实例详情页面获取绑定的持久化实例的 ID。
  • 无命名空间
    • Topic:acs:mq:*:*:{topic}
    • Group ID:acs:mq:*:*:{groupid}
Action 名称 Action 描述 备注
mq:PUB 消息发布 授予某 RAM 用户 Topic 的相关权限前,需授予该用户 Topic 所在实例的 mq:MqttInstanceAccess 权限。
mq:SUB 消息订阅

控制台实例操作权限

不论您的微消息队列 MQTT 版实例是否有独立命名空间,Resource 命名格式都统一为 acs:mq:*:*:{mqttInstanceId}。涉及的 Action 及相关说明如下表所示。

Action 名称 Action 说明 备注
mq:MqttInstanceAccess 查询指定实例的基本信息 授予某 RAM 用户 Topic 和 Group 的相关权限前,需授予该用户 Topic 和 Group 所在实例的 mq:MqttInstanceAccess 权限。
mq:DeleteMqttInstance 删除实例
mq:UpdateMqttInstance 变更实例的信息
mq:BindMqttInstance 绑定实例 如果业务需要绑定实例,需要具备操作指定的微消息队列 MQTT 版实例以及绑定的持久化实例的权限,持久化实例的权限设置,请参见对应产品的权限控制策略。
mq:ListMqttInstance 获取实例列表
mq:UpdateMqttInstanceWarn 更新指定实例的报警信息

控制台 Topic 操作权限

Topic 的命名格式因微消息队列 MQTT 版实例是否有命名空间而异:
  • 有命名空间:acs:mq:*:*:{storeInstanceId}%{topic}
    注意 此处的 storeInstanceid 指您为微消息队列 MQTT 版实例绑定的持久化实例的 ID。您可在微消息队列 MQTT 版控制台的实例详情页面获取绑定的持久化实例的 ID。
  • 无命名空间:acs:mq:*:*:{topic}
Action 名称 Action 说明 备注
mq:QueryMqttClientByTopic 根据 Topic 查询订阅的客户端信息 授予某 RAM 用户 Topic 和 Group 的相关权限前,需授予该用户 Topic 和 Group 所在实例的 mq:MqttInstanceAccess 权限。
mq:QueryMqttMsgTransTrend 根据 Topic 查询消息的收发报表
mq:SendMqttMessageByConsole 控制台发消息测试

控制台 Group ID 操作权限

Group ID 的命名格式因微消息队列 MQTT 版实例是否有命名空间而异:
  • 有命名空间:acs:mq:*:*:{mqttInstanceId}%{groupId}
    注意 此处如果是有独立命名空间的实例,则 Group ID 需要拼接微消息队列 MQTT 版实例 ID 作为前缀。
  • 无命名空间:acs:mq:*:*:{groupId}
Action 名称 Action 说明 备注
mq:CreateMqttGroupId 创建 Group ID 授予某 RAM 用户 Topic 和 Group 的相关权限前,需授予该用户 Topic 和 Group 所在实例的 “mq:MqttInstanceAccess” 权限。
mq:ListMqttGroupId 获取 Group ID 列表
mq:QueryMqttClientByClientId 根据 Client ID 查询设备信息
mq:QueryMqttClientByGroupId 根据 Group ID 查询设备信息
mq:QueryMqttHistoryOnline 根据 Group ID 查询历史在线设备信息
mq:DeleteMqttGroupId 删除 Group ID
mq:QueryMqttDeviceTrace 查询设备轨迹
mq:QueryMqttDeviceTrace 查询设备的相关消息

OpenAPI 权限

API Resource 命名格式(实例无命名空间) Resource 命名格式(实例有命名空间) Action 描述
RevokeToken
  • 实例:acs:mq:*:*:{mqttInstanceId}
  • Topic:acs:mq:*:*:{topic}
  • Group ID:acs:mq:*:*:{groupId}
  • 实例:acs:mq:*:*:{mqttInstanceId}
  • Topic:acs:mq:*:*:{storeInstanceId}%{topic}
  • Group ID:acs:mq:*:*:{mqttInstanceId}%{groupId}
  • mq:MqttInstanceAccess
  • mq:RevokeToken
QueryToken
  • mq:MqttInstanceAccess
  • mq:QueryToken
ApplyToken
  • mq:MqttInstanceAccess
  • mq:ApplyToken
CreateGroupId
  • mq:MqttInstanceAccess
  • mq:CreateGroupId
DeleteGroupId
  • mq:MqttInstanceAccess
  • mq:DeleteGroupId
ListGroupId
  • mq:MqttInstanceAccess
  • mq:ListGroupId
说明 API 的更多详情,请参见 OpenAPI 概览

更多信息