云消息队列 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和标签。

重要
  • 如需访问云消息队列 RocketMQ 版的资源以及OpenAPI,则需要有访问云消息队列 RocketMQ 版实例的权限,对应的Action为mq:QueryInstanceBaseInfo
  • {instanceId}{topic}{groupId}均需替换为您实际的资源信息。例如,{groupId}替换为GID_test。

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

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

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

重要 授予某RAM用户Topic和Group的相关权限前,需先授予该用户访问Topic和Group所属实例的访问权限,对应Action为mq:QueryInstanceBaseInfo,命名格式为acs:mq:*:*:{instanceId}
Resource命名格式Action
有命名空间无命名空间Action名称说明
Groupacs:mq:*:*:{instanceId}%{groupId}

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

acs:mq:*:*:{groupId}

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

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

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

acs:mq:*:*:{topic}

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

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

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

重要 授予某RAM用户实例的相关操作权限前,需授予该用户访问指定实例的权限,对应Action为mq:QueryInstanceBaseInfo,命名格式为acs:mq:*:*:{instanceId}
Resource命名格式Action
Action名称说明
实例acs:mq:*:*:*mq:CreateInstance创建实例
acs:mq:*:*:{instanceId}

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

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

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

重要 授予某RAM用户Topic和Group的相关权限前,需先授予该用户访问Topic和Group所属实例的访问权限,对应Action为mq:QueryInstanceBaseInfo,命名格式为acs:mq:*:*:{instanceId}
Resource命名格式Action
有命名空间无命名空间Action名称说明
Groupacs:mq:*:*:{instanceId}

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

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

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

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操作权限

重要 授予某RAM用户Topic和Group的相关权限前,需先授予该用户访问Topic和Group所属实例的访问权限,对应Action为mq:QueryInstanceBaseInfo,命名格式为acs:mq:*:*:{instanceId}
Resource命名格式Action
有命名空间无命名空间Action名称说明
Topicacs: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: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版控制台标签操作权限

重要 授予某RAM用户标签的相关权限前,需先授予该用户标签资源所属实例的访问权限,对应Action为mq:QueryInstanceBaseInfo,命名格式为acs:mq:*:*:{instanceId}
Resource命名格式Action
Action名称说明
标签acs:mq:*:*:*mq:TagResources为资源绑定标签
mq:ListTagResources查询标签
mq:UntagResources解绑并删除标签(慎用)

OpenAPI权限

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

重要OnsRegionListOpeOnsService接口以外,授予某RAM用户其他API的操作权限前,需先授予该用户API调用的资源所属实例的访问权限,即调用QueryInstanceBaseInfo接口的权限,该接口的权限策略对应Action为mq:QueryInstanceBaseInfo,命名格式为acs:mq:*:*:{instanceId}
API命名格式Action
有命名空间无命名空间
OnsRegionList不涉及不涉及无需授权。
OpenOnsService*ons:OpenOnsService
OnsInstanceCreateacs:mq:*:*:* mq:CreateInstance
OnsInstanceBaseInfoacs:mq:*:*:{instanceId}

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

mq:QueryInstanceBaseInfo
OnsInstanceDeletemq:DeleteInstance
OnsInstanceUpdatemq:UpdateInstance
OnsInstanceInServiceListacs:mq:*:*:{instanceId}

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

不涉及mq:QueryInstanceBaseInfo
说明
  • 若API访问资源所属的实例有命名空间,则RAM用户调用接口时必须先授予实例的mq:QueryInstanceBaseInfo权限,否则调用该接口查询不到任何信息。
  • 若实例无命名空间,则RAM用户调用该接口无需授予任何权限。
OnsTopicCreateacs:mq:*:*:{instanceId}%{topic}

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

acs:mq:*:*:{topic}

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

mq:CreateTopic
OnsTopicDeletemq:DeleteTopic
OnsTopicStatusmq:QueryTopicStatus
OnsTopicSubDetailmq:QueryTopicSubDetail
OnsTopicListmq:ListTopic
说明 RAM用户调用该接口时,仅返回有对应发布和订阅权限的Topic信息。
OnsGroupCreateacs:mq:*:*:{instanceId}

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

mq:CreateGroup
OnsGroupDeleteacs:mq:*:*:{instanceId}%{groupId}

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

acs:mq:*:*:{groupId}

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

mq:DeleteGroup
OnsGroupSubDetailmq:QueryGroupSubDetail
OnsGroupConsumerUpdatemq:UpdateGroupConsumer
OnsGroupListmq:ListGroup
说明 RAM用户调用该接口时,仅返回有对应发布和订阅权限的Group信息。
TagResourcesacs:mq:*:*:*mq:TagResources
ListTagResourcesmq:ListTagResources
UntagResourcesmq:UntagResources
OnsConsumerAccumulateacs:mq:*:*:{instanceId}%{groupId}

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

acs:mq:*:*:{groupId}

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

mq:QueryConsumerAccumulate
OnsConsumerStatusmq:QueryConsumerStatus
OnsConsumerGetConnectionmq:QueryConsumerConnection
OnsConsumerResetOffsetacs:mq:*:*:{instanceId}%{topic}

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

acs:mq:*:*:{topic}

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

mq:ResetConsumerOffset
OnsConsumerTimeSpanmq:QueryConsumerTimeSpan
OnsMessagePushmq:SUB
OnsMessageTraceacs:mq:*:*:{instanceId}%{topic}

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

acs:mq:*:*:{topic}

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

mq:QueryMessageTrace
OnsMessageGetByMsgIdmq:QueryMessage
OnsMessageGetByKeymq:QueryMessage
OnsMessagePageQueryByTopicmq:QueryMessage
OnsTrendTopicInputTpsacs:mq:*:*:{instanceId}%{topic}

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

acs:mq:*:*:{topic}

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

mq:QueryTrendTopicInputTps
OnsTrendGroupOutputTpsacs:mq:*:*:{instanceId}%{groupId}

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

acs:mq:*:*:{groupId}

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

mq:QueryTrendGroupOutputTps
OnsTraceGetResultacs:mq:*:*:{instanceId}

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

mq:QueryInstanceBaseInfo
OnsTraceQueryByMsgIdacs:mq:*:*:{instanceId}%{topic}

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

acs:mq:*:*:{topic}

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

mq:QueryTrace
OnsTraceQueryByMsgKeymq:QueryTrace
OnsDLQMessageGetByIdacs:mq:*:*:{instanceId}%{groupId}

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

acs:mq:*:*:{groupId}

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

mq:QueryDLQMessage
OnsDLQMessagePageQueryByGroupIdmq:QueryDLQMessage
OnsDLQMessageResendByIdmq:ResendDLQMessage

权限策略示例

重要 如需直接复制示例代码,使用时请删除注释内容,即“//”及以后的文字说明。
  • 示例一:授予实例中某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代替。
                ]
            }
        ]
    }          

更多信息