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

背景信息

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

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

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

  • 适用于有命名空间的实例
        {
            "Version":"1",
            "Statement":[
                {    // 授予实例的授权,授予 Topic 和 Group 的权限前请先授予相应实例的权限(适用于有命名空间的实例)
                    "Effect":"Allow",
                    "Action":[
                        "mq:OnsInstanceBaseInfo"
                    ],
                    "Resource":[
                        "acs:mq:*:*:{instanceId}"
                    ]
                },
                {    // 授予 Topic 的消息发布和订阅权限
                    "Effect":"Allow",
                    "Action":[
                        "mq:PUB",    
                        "mq:SUB"
                    ],
                    "Resource":[
                        "acs:mq:*:*:{instanceId}%{topic}"
                    ]
                },
                {    // 授予 Group 的权限
                    "Effect":"Allow",
                    "Action":[
                        "mq:SUB"
                    ],
                    "Resource":[
                        "acs:mq:*:*:{instanceId}%{groupId}"
                    ]
                }
            ]
        }                    
  • 适用于无命名空间的实例
    {
        "Version":"1",
        "Statement":[
            {    // 授予实例的授权,授予 Topic 和 Group 的权限前请先授予相应实例的权限(适用于无命名空间的实例)
                "Effect":"Allow",
                "Action":[
                    "mq:OnsInstanceBaseInfo"
                ],
                "Resource":[
                    "acs:mq:*:*:{instanceId}"
                ]
            },
            {    // 授予 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:*:*:{instanceId}*" //授予该实例的权限,{instanceId} 用实例 ID 代替
            ]
        }
    ]
}