云消息队列 RocketMQ 版的权限管理是通过阿里云的访问控制RAM(Resource Access Management)产品实现的。使用RAM可以让您避免与其他用户共享云账号密钥,即AccessKey(包含AccessKey ID和AccessKey Secret),按需为用户分配最小权限。本文介绍云消息队列 RocketMQ 版在RAM中的权限策略和示例。
背景信息
在RAM中,权限策略是用权限策略语法和结构描述的一组权限的集合,可以精确地描述被授权的Resource(资源集)、Action(操作集)以及授权条件。更多信息,请参见权限策略基本元素。
云消息队列 RocketMQ 版有以下RAM的权限策略:
- 系统策略
系统策略统一由阿里云创建,您只能使用不能修改,策略的版本更新由阿里云维护。
- 自定义策略
自定义策略可由您自主创建、更新和删除,策略的版本更新由您自行维护。您需到RAM控制台编辑相应权限策略,再给相应用户授予该权限。具体的权限策略示例,请参见下文中的权限策略示例。
系统策略
云消息队列 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版客户端收发消息权限
mq:QueryInstanceBaseInfo
,命名格式为acs:mq:*:*:{instanceId}
。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版控制台实例操作权限
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操作权限
mq:QueryInstanceBaseInfo
,命名格式为acs:mq:*:*:{instanceId}
。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_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操作权限
mq:QueryInstanceBaseInfo
,命名格式为acs:mq:*:*:{instanceId}
。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: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版控制台标签操作权限
mq:QueryInstanceBaseInfo
,命名格式为acs:mq:*:*:{instanceId}
。Resource | 命名格式 | Action | |
---|---|---|---|
Action名称 | 说明 | ||
标签 | acs:mq:*:*:* | mq:TagResources | 为资源绑定标签 |
mq:ListTagResources | 查询标签 | ||
mq:UntagResources | 解绑并删除标签(慎用) |
OpenAPI权限
云消息队列 RocketMQ 版提供的OpenAPI及其授权操作如下表所示。
mq:QueryInstanceBaseInfo
,命名格式为acs:mq:*:*:{instanceId}
。API | 命名格式 | Action | |
---|---|---|---|
有命名空间 | 无命名空间 | ||
OnsRegionList | 不涉及 | 不涉及 | 无需授权。 |
OpenOnsService | * | ons:OpenOnsService | |
OnsInstanceCreate | acs:mq:*:*:* | mq:CreateInstance | |
OnsInstanceBaseInfo | acs:mq:*:*:{instanceId} 示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k | mq:QueryInstanceBaseInfo | |
OnsInstanceDelete | mq:DeleteInstance | ||
OnsInstanceUpdate | mq:UpdateInstance | ||
OnsInstanceInServiceList | acs:mq:*:*:{instanceId} 示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k | 不涉及 | mq:QueryInstanceBaseInfo 说明
|
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 | ||
OnsTopicSubDetail | mq:QueryTopicSubDetail | ||
OnsTopicList | mq:ListTopic 说明 RAM用户调用该接口时,仅返回有对应发布和订阅权限的Topic信息。 | ||
OnsGroupCreate | acs:mq:*:*:{instanceId} 示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k | mq:CreateGroup | |
OnsGroupDelete | acs:mq:*:*:{instanceId}%{groupId} 示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k%GID_test | acs:mq:*:*:{groupId} 示例:acs:mq:*:*:GID_test | mq:DeleteGroup |
OnsGroupSubDetail | mq:QueryGroupSubDetail | ||
OnsGroupConsumerUpdate | mq:UpdateGroupConsumer | ||
OnsGroupList | mq:ListGroup 说明 RAM用户调用该接口时,仅返回有对应发布和订阅权限的Group信息。 | ||
TagResources | acs:mq:*:*:* | mq:TagResources | |
ListTagResources | mq:ListTagResources | ||
UntagResources | mq:UntagResources | ||
OnsConsumerAccumulate | acs:mq:*:*:{instanceId}%{groupId} 示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k%GID_test | 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_138015630679****_BcZwWZ9k%GID_test | acs:mq:*:*:{groupId} 示例:acs:mq:*:*:GID_test | mq:QueryTrendGroupOutputTps |
OnsTraceGetResult | acs:mq:*:*:{instanceId} 示例:acs:mq:*:*:MQ_INST_138015630679****_BcZwWZ9k | mq:QueryInstanceBaseInfo | |
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_138015630679****_BcZwWZ9k%GID_test | acs:mq:*:*:{groupId} 示例:acs:mq:*:*:GID_test | mq:QueryDLQMessage |
OnsDLQMessagePageQueryByGroupId | mq:QueryDLQMessage | ||
OnsDLQMessageResendById | mq: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代替。 ] } ] }