全部产品
云市场

权限策略

更新时间:2019-09-13 22:00:01

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

在 RAM 中,权限策略是用语法结构描述的一组权限的集合,可以精确地描述被授权的 Resource(资源集)、Action(操作集)以及授权条件。消息队列 MQ 有以下两类 RAM 的权限策略:

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

  • 自定义策略:您可以自主创建、更新和删除,策略的版本更新由您自己维护。

系统策略

消息队列 MQ 目前提供三种系统默认的权限策略。

权限策略名称说明
AliyunMQFullAccess管理消息队列 MQ 的权限,等同于主账号的权限,被授予该权限的 RAM 用户具有所有消息收发权限且有控制台所有功能操作权限。
AliyunMQPubOnlyAccess消息队列 MQ 的发布权限,被授予该权限的 RAM 用户具有使用主账号所有资源通过 SDK 发送消息的权限。
AliyunMQSubOnlyAccess消息队列 MQ 的订阅权限,被授予该权限的 RAM 用户具有使用主账号所有资源通过 SDK 订阅消息的权限。

自定义策略

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

消息队列 MQ 的 Resource 与 Action 的对应规则

在消息队列 MQ 中,实例、Topic 和 Group 各为一种 Resource,对这些 Resource 授予的权限即为 Action。Topic 和 Group 的 Resource 命名格式因实例是否有命名空间而异。您可在消息队列 MQ 控制台的实例管理页面查看实例是否有命名空间。

消息队列 MQ 的 Resource 和 Action 的可选值和对应规则如下。

Resource 命名格式 Action 备注
有命名空间 无命名空间 Action 名称 说明
实例 acs:mq:*:*:{instanceId} acs:mq:*:*:{instanceId} mq:OnsInstanceBaseInfo 查询实例基本信息 授予某 RAM 用户 Topic 和 Group 的相关权限前,需授予该用户 Topic 和 Group 所在实例的 “mq:OnsInstanceBaseInfo” 权限。
mq:OnsIntanceUpdate 更新实例
mq:OnsInstanceCreate 创建实例
mq:OnsIntanceDelete 删除实例(慎用)
Topic acs:mq:*:*:{instanceId}%{topic} acs:mq:*:*:{topic} mq:PUB 消息发布 授予某 RAM 用户 Topic 的相关权限前,需授予该用户 Topic 所在实例的 “mq:OnsInstanceBaseInfo” 权限。
mq:SUB 消息订阅
mq:OnsTopicCreate 创建 Topic
mq:OnsTopicDelete 删除 Topic
mq:OnsTopicUpdateInfo 更新 Topic 备注
Group acs:mq:::{instanceId}%{groupId} acs:mq:*:*:{groupId} mq:SUB 消息订阅 授予某 RAM 用户 Group 的相关权限前,需授予该用户 Group 所在实例的 “mq:OnsInstanceBaseInfo” 权限。
mq:OnsGroupCreate 创建 Group
mq:OnsGroupDelete 删除 Group

常用策略示例

如需直接复制示例代码,使用时请删除注释内容,即 “//” 及以后的文字说明。

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

    • 适用于有命名空间的实例

      1. {
      2. "Version":"1",
      3. "Statement":[
      4. { // 授予实例的授权,授予 Topic 和 Group 的权限前请先授予相应实例的权限(适用于有命名空间的实例)
      5. "Effect":"Allow",
      6. "Action":[
      7. "mq:OnsInstanceBaseInfo"
      8. ],
      9. "Resource":[
      10. "acs:mq:*:*:{instanceId}"
      11. ]
      12. },
      13. { // 授予 Topic 的消息发布和订阅权限
      14. "Effect":"Allow",
      15. "Action":[
      16. "mq:PUB",
      17. "mq:SUB"
      18. ],
      19. "Resource":[
      20. "acs:mq:*:*:{instanceId}%{topic}"
      21. ]
      22. },
      23. { // 授予 Group 的权限
      24. "Effect":"Allow",
      25. "Action":[
      26. "mq:SUB"
      27. ],
      28. "Resource":[
      29. "acs:mq:*:*:{instanceId}%{groupId}"
      30. ]
      31. }
      32. ]
      33. }
    • 适用于无命名空间的实例

      1. {
      2. "Version":"1",
      3. "Statement":[
      4. { // 授予实例的授权,授予 Topic 和 Group 的权限前请先授予相应实例的权限(适用于无命名空间的实例)
      5. "Effect":"Allow",
      6. "Action":[
      7. "mq:OnsInstanceBaseInfo"
      8. ],
      9. "Resource":[
      10. "acs:mq:*:*:{instanceId}"
      11. ]
      12. },
      13. { // 授予 Topic 的消息发布和订阅权限
      14. "Effect":"Allow",
      15. "Action":[
      16. "mq:PUB",
      17. "mq:SUB"
      18. ],
      19. "Resource":[
      20. "acs:mq:*:*:{topic}"
      21. ]
      22. },
      23. { // 授予 Group 的权限
      24. "Effect":"Allow",
      25. "Action":[
      26. "mq:SUB"
      27. ],
      28. "Resource":[
      29. "acs:mq:*:*:{groupId}"
      30. ]
      31. }
      32. ]
      33. }
  • 示例二:授权整个实例的权限(只适用于有命名空间的实例)

    若要授予整个实例的权限,即该实例中所有资源的所有操作权限,请按以下示例设置。

    1. { // 仅适用于有命名空间的实例
    2. "Version": "1",
    3. "Statement": [
    4. {
    5. "Effect": "Allow",
    6. "Action": [
    7. "mq:*"
    8. ],
    9. "Resource": [
    10. "acs:mq:*:*:{instanceId}*" //授予该实例的权限,{instanceId} 用实例 ID 代替
    11. ]
    12. }
    13. ]
    14. }

后续步骤

更多信息