本文介绍在微消息队列 MQTT 版中常见的授权策略示例。

注意事项

在阅读本文前,建议您可先查看在访问控制 RAM 中支持的微消息队列 MQTT 版相关的权限策略

如需直接复制示例代码,使用时请删除注释内容,即 “//” 及以后的文字说明。示例中的 {mqttinstanceId}、{storeinstanceId}、{topic} 和 {groupId} 均需替换为您实际的资源信息。例如,{groupId} 替换为 GID_xxx。

注意 此处的 {storeInstanceid} 指您为微消息队列 MQTT 版实例绑定的持久化实例的 ID。您可在微消息队列 MQTT 版控制台的实例详情页面获取绑定的持久化实例的 ID。

示例一:授予实例中某 Topic 和 Group 的权限

  • 适用于有命名空间的实例
    {
        "Version":"1",
        "Statement":[
            {    // 授予实例的授权,授予 Topic 和 Group 的权限前请先授予相应实例的权限(适用于有命名空间的实例)
                "Effect":"Allow",
                "Action":[
                    "mq:MqttInstanceAccess"
                ],
                "Resource":[
                    "acs:mq:*:*:{mqttInstanceId}"
                ]
            },
            {    // 授予 Topic 的消息发布和订阅权限
                "Effect":"Allow",
                "Action":[
                     "mq:PUB",
                     "mq:SUB"
                    ],
                "Resource":[
                    "acs:mq:*:*:{storeInstanceId}%{topic}"
                ]
            },
            {    // 授予 Group 的权限
                "Effect":"Allow",
                "Action":[
                    "mq:SUB"
                ],
                "Resource":[
                    "acs:mq:*:*:{mqttInstanceId}%{groupId}"
                ]
            }
        ]
     }
  • 适用于无命名空间的实例
    {
        "Version": "1",
        "Statement": [
            {    //授予实例的授权,授予 Topic 和 Group 的权限前请先授予相应实例的权限(适用于无命名空间的实例)
                "Effect": "Allow",
                "Action": [
                    "mq:MqttInstanceAccess"
                ],
                "Resource": [
                    "acs:mq:*:*:{mqttInstanceId}"
                ]
            },
            {    // 授予 Topic 的消息发布和订阅权限
                "Effect":"Allow",
                "Action":[
                    "mq:PUB",
                    "mq:SUB"
                ],
                "Resource": [
                    "acs:mq:*:*:{topic}"
                ]
            },
            {    // 授予 Group 的权限
                "Effect":"Allow",
                "Action":[
                    "mq:SUB"
                ],
                "Resource": [
                    "acs:mq:*:*:{groupId}"
                ]
            }
        ]
    }

示例二:授权整个实例的权限(只适用于有命名空间的实例)

若要授予整个实例的权限,即该实例中所有资源的所有操作权限,请按以下示例设置。

{   // 仅适用于有命名空间的实例
    "Version": "1", 
    "Statement": [
        {
            "Effect": "Allow", 
            "Action": [
                "mq:*"
            ], 
            "Resource": [
                "acs:mq:*:*:{mqttInstanceId}*" //授予该实例的权限,{mqttInstanceId} 用实例 ID 代替
            ]
        }
    ]
}