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

背景信息

在RAM中,权限策略是用权限策略语法和结构描述的一组权限的集合,可以精确地描述被授权的Resource(资源集)、Action(操作集)以及授权条件。更多信息,请参见权限策略基本元素

消息队列RocketMQ版有以下RAM的权限策略:

  • 系统策略

    系统策略统一由阿里云创建,您只能使用不能修改,策略的版本更新由阿里云维护。

  • 自定义策略

    自定义策略可由您自主创建、更新和删除,策略的版本更新由您自行维护。您需到RAM控制台编辑相应权限策略,再给相应用户授予该权限。具体的权限策略示例,请参见下文中的权限策略示例

说明 消息队列RocketMQ版提供的消息收发服务和管控服务的每次请求都有安全访问控制。

系统策略

消息队列RocketMQ版提供以下系统默认的权限策略。

权限策略名称 说明
AliyunMQFullAccess 消息队列RocketMQ版的管理权限,等同于阿里云账号的权限,被授予该权限的RAM用户具有所有消息收发权限且有控制台所有功能操作权限。
AliyunMQPubOnlyAccess 消息队列RocketMQ版的发布权限,被授予该权限的RAM用户具有使用阿里云账号所有资源通过SDK发送消息的权限。
AliyunMQSubOnlyAccess 消息队列RocketMQ版的订阅权限,被授予该权限的RAM用户具有使用阿里云账号所有资源通过SDK订阅消息的权限。
AliyunMQReadOnlyAccess 消息队列RocketMQ版的只读权限,被授予该权限的RAM用户仅有通过访问控制台或调用管控API读取资源信息的权限。

自定义策略

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

消息队列RocketMQ版中,实例、Topic和Group等各为不同的Resource,对这些Resource授予的操作即为Action。包含{groupId}{topic}的Resource,命名格式因实例是否有命名空间而异。您可以登录消息队列RocketMQ版控制台实例详情页面,根据命名空间字段判断实例是否有命名空间。

消息队列RocketMQ版的Resource和Action的可选值和对应规则可分为消息队列RocketMQ版服务、消息队列RocketMQ版客户端、控制台和OpenAPI。其中,针对控制台的相关操作,按资源类型又可分为实例、Group、Topic和标签。

注意
  • 授予某RAM用户自定义权限前,需授予该用户Topic和Group所在实例的mq:QueryInstanceBaseInfo权限。
  • {instanceId}{topic}{groupId}均需替换为您实际的资源信息。例如,{groupId}替换为GID_test。

消息队列RocketMQ版服务开通权限

Resource 命名格式 Action
Action名称 说明
消息队列RocketMQ版服务 * ons:OpenOnsService 开通消息队列RocketMQ版服务

消息队列RocketMQ版客户端收发消息权限

Resource 命名格式 Action
有命名空间 无命名空间 Action名称 说明
Group acs:mq:*:*:{instanceId}%{groupId}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k%GID_test

*
acs:mq:*:*:{groupId}

示例:acs:mq:*:*:GID_test

mq:SUB 订阅消息
Topic acs:mq:*:*:{instanceId}%{topic}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k%Topic-test

acs:mq:*:*:{topic}

示例:acs:mq:*:*:Topic-test

mq:PUB 发布消息
mq:SUB 订阅消息

消息队列RocketMQ版控制台实例操作权限

Resource 命名格式 Action
Action名称 说明
实例 acs:mq:*:*:* mq:CreateInstance 创建实例
acs:mq:*:*:{instanceId}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k

mq:QueryInstanceBaseInfo 查询实例基本信息
mq:UpdateInstance 更新实例
mq:DeleteInstance 删除实例(慎用)

消息队列RocketMQ版控制台Group操作权限

Resource 命名格式 Action
有命名空间 无命名空间 Action名称 说明
Group acs:mq:*:*:{instanceId}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k

mq:CreateGroup 创建Group ID
acs:mq:*:*:{instanceId}%{groupId}

示例:acs:mq:*:*:MQ_INST_13801563067

acs:mq:*:*:{groupId}

示例:acs:mq:*:*:GID_test

mq:DeleteGroup 删除Group ID(慎用)
mq:QueryGroupSubDetail 查询Group ID订阅的Topic
mq:UpdateGroupConsumer 配置Group ID对应的消费集群的消息读写权限
mq:QueryConsumerAccumulate 查询Group ID下的消息堆积数据
mq:QueryConsumerStatus 查询Group ID的详细状态数据
mq:QueryConsumerConnection 查询Group ID下客户端的连接信息
mq:QueryTrendGroupOutputTps 查询Group ID下消息消费的统计数据
mq:ResendDLQMessage 重发死信消息
mq:QueryDLQMessage 查询死信消息

消息队列RocketMQ版控制台Topic操作权限

Resource 命名格式 Action
有命名空间 无命名空间 Action名称 说明
Topic acs:mq:*:*:{instanceId}%{topic}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k%Topic-test

acs:mq:*:*:{topic}

示例:acs:mq:*:*:Topic-test

mq:CreateTopic 创建Topic
mq:DeleteTopic 删除Topic(慎用)
mq:UpdateTopic 更新Topic
mq:QueryTopicStatus 查询Topic的消息总量和最近更新时间
mq:QueryTopicSubDetail 查看订阅Topic的Group ID
mq:ResetConsumerOffset 重置Group ID在指定Topic中的消费位点
mq:QueryConsumerTimeSpan 查询Group ID订阅的Topic可重置的时间范围
mq:QueryMessageTrace 查询消息的消费状态
mq:QueryMessage 查询消息的详细信息
mq:QueryDLQMessage 查询死信消息
mq:QueryTrendTopicInputTps 查询Topic写入消息的统计数据
mq:QueryTrace 获取查询消息轨迹的任务ID。获取任务ID后调用OnsTraceGetResult接口传入任务ID即可收到消息轨迹的查询结果。调用OnsTraceGetResult接口不需要获取授权。

消息队列RocketMQ版控制台标签操作权限

Resource 命名格式 Action
Action名称 说明
标签 acs:mq:*:*:* mq:TagResources 为资源绑定标签
mq:ListTagResources 查询标签
mq:UntagResources 解绑并删除标签(慎用)

OpenAPI权限

消息队列RocketMQ版版提供的OpenAPI及其授权操作如下表所示。

API 命名格式 Action
有命名空间 无命名空间
OnsRegionList 不涉及 不涉及 无需授权。
OpenOnsService * ons:OpenOnsService
OnsInstanceDelete acs:mq:*:*:* mq:CreateInstance
OnsInstanceBaseInfo acs:mq:*:*:{instanceId}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k

mq:QueryInstanceBaseInfo
OnsInstanceDelete mq:DeleteInstance
OnsInstanceUpdate mq:UpdateInstance
OnsInstanceInServiceList 不涉及 不涉及 无需授权。
OnsTopicCreate acs:mq:*:*:{instanceId}%{topic}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k%Topic-test

acs:mq:*:*:{topic}

示例:acs:mq:*:*:Topic-test

mq:CreateTopic
OnsTopicDelete mq:DeleteTopic
OnsTopicStatus mq:QueryTopicStatus
OnsTopicUpdate mq:UpdateTopic
OnsTopicSubDetail mq:QueryTopicSubDetail
OnsTopicList 不涉及 不涉及 无需授权。

RAM用户调用该接口时,仅返回有对应发布和订阅权限的Topic信息。

OnsGroupCreate acs:mq:*:*:{instanceId}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k

mq:CreateGroup
OnsGroupDelete acs:mq:*:*:{instanceId}%{groupId}

示例:acs:mq:*:*:MQ_INST_13801563067

acs:mq:*:*:{groupId}

示例:acs:mq:*:*:GID_test

mq:DeleteGroup
OnsGroupSubDetail mq:QueryGroupSubDetail
OnsGroupConsumerUpdate mq:UpdateGroupConsumer
OnsGroupList 不涉及 不涉及 无需授权。

RAM用户调用该接口时,仅返回有对应发布和订阅权限的Group信息。

TagResources acs:mq:*:*:* mq:TagResources
ListTagResources mq:ListTagResources
UntagResources mq:UntagResources
OnsConsumerAccumulate acs:mq:*:*:{instanceId}%{groupId}

示例:acs:mq:*:*:MQ_INST_13801563067

acs:mq:*:*:{groupId}

示例:acs:mq:*:*:GID_test

mq:QueryConsumerAccumulate
OnsConsumerStatus mq:QueryConsumerStatus
OnsConsumerGetConnection mq:QueryConsumerConnection
OnsConsumerResetOffset acs:mq:*:*:{instanceId}%{topic}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k%Topic-test

acs:mq:*:*:{topic}

示例:acs:mq:*:*:Topic-test

mq:ResetConsumerOffset
OnsConsumerTimeSpan mq:QueryConsumerTimeSpan
OnsMessagePush mq:SUB
OnsMessageTrace acs:mq:*:*:{instanceId}%{topic}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k%Topic-test

acs:mq:*:*:{topic}

示例:acs:mq:*:*:Topic-test

mq:QueryMessageTrace
OnsMessageGetByMsgId mq:QueryMessage
OnsMessageGetByKey mq:QueryMessage
OnsMessagePageQueryByTopic mq:QueryMessage
OnsTrendTopicInputTps acs:mq:*:*:{instanceId}%{topic}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k%Topic-test

acs:mq:*:*:{topic}

示例:acs:mq:*:*:Topic-test

mq:QueryTrendTopicInputTps
OnsTrendGroupOutputTps acs:mq:*:*:{instanceId}%{groupId}

示例:acs:mq:*:*:MQ_INST_13801563067

acs:mq:*:*:{groupId}

示例:acs:mq:*:*:GID_test

mq:QueryTrendGroupOutputTps
OnsTraceGetResult 不涉及 不涉及 无需授权。
OnsTraceQueryByMsgId acs:mq:*:*:{instanceId}%{topic}

示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k%Topic-test

acs:mq:*:*:{topic}

示例:acs:mq:*:*:Topic-test

mq:QueryTrace
OnsTraceQueryByMsgKey mq:QueryTrace
OnsDLQMessageGetById acs:mq:*:*:{instanceId}%{groupId}

示例:acs:mq:*:*:MQ_INST_13801563067

acs:mq:*:*:{groupId}

示例:acs:mq:*:*:GID_test

mq:ResendDLQMessage
OnsDLQMessagePageQueryByGroupId mq:QueryDLQMessage
OnsDLQMessageResendById mq:QueryDLQMessage

权限策略示例

注意 如需直接复制示例代码,使用时请删除注释内容,即“//”及以后的文字说明。
  • 示例一:授予实例中某Topic和Group的权限

    授予使用实例下某Topic和Group消息发布和订阅的权限,请按以下示例设置。

    • 适用于有命名空间的实例
      {
              "Version":"1",
              "Statement":[
                  {    // 授予实例的权限,授予Topic和Group的权限前须先授予相应实例的权限(适用于有命名空间的实例)。
                      "Effect":"Allow",
                      "Action":[
                          "mq:QueryInstanceBaseInfo"
                      ],
                      "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:QueryInstanceBaseInfo"
                  ],
                  "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代替。
                ]
            }
        ]
    }          

更多信息