云消息队列 MQTT 版权限管理是通过阿里云的访问控制RAM(Resource Access Management)实现的。使用RAM可以让您避免与其他用户共享云账号密钥,即AccessKey(包含AccessKey ID和AccessKey Secret),按需为用户分配最小权限。本文介绍云消息队列 MQTT 版在RAM中的权限策略。
在RAM中,权限策略是用语法结构描述的一组权限的集合,可以精确地描述被授权的Resource(资源集)、Action(操作集)以及授权条件。云消息队列 MQTT 版有以下两类RAM的权限策略:
系统策略
云消息队列 MQTT 版目前提供四种系统默认的权限策略。
云消息队列 MQTT 版目前不支持独立的系统权限策略。您在为RAM用户授予以下系统权限策略时,除了对云消息队列 MQTT 版生效外,还会对云消息队列 RocketMQ 版生效。
权限策略名称 | 说明 |
AliyunMQFullAccess | 管理云消息队列 MQTT 版的权限,等同于阿里云账号的权限,被授予该权限的RAM用户具有所有消息收发权限且有控制台所有功能操作权限。 |
AliyunMQPubOnlyAccess | 云消息队列 MQTT 版的发布权限,被授予该权限的RAM用户具有使用阿里云账号所有资源通过SDK发送消息的权限。 |
AliyunMQSubOnlyAccess | 云消息队列 MQTT 版的订阅权限,被授予该权限的RAM用户具有使用阿里云账号所有资源通过SDK订阅消息的权限。 |
AliyunMQReadOnlyAccess | 云消息队列 MQTT 版的只读权限,被授予该权限的RAM用户仅有通过访问控制台或调用管控API读取资源信息的权限。 |
自定义策略
自定义权限策略(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 |
|
|
|
QueryToken |
| ||
ApplyToken |
| ||
CreateGroupId |
| ||
DeleteGroupId |
| ||
ListGroupId |
|
API的更多详情,请参见OpenAPI概览。