本文介绍在云消息队列 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代替。
            ]
        }
    ]
}