云消息队列 RocketMQ 版自定义权限策略

如果系统权限策略不能满足您的要求,您可以创建自定义权限策略实现最小授权。使用自定义权限策略有助于实现权限的精细化管控,是提升资源访问安全的有效手段。本文介绍云消息队列 RocketMQ 版使用自定义权限策略的场景和策略示例。

什么是自定义权限策略

在基于RAM的访问控制体系中,自定义权限策略是指在系统权限策略之外,您可以自主创建、更新和删除的权限策略。自定义权限策略的版本更新需由您来维护。

  • 创建自定义权限策略后,需为RAM用户、用户组或RAM角色绑定权限策略,这些RAM身份才能获得权限策略中指定的访问权限。

  • 已创建的权限策略支持删除,但删除前需确保该策略未被引用。如果该权限策略已被引用,您需要在该权限策略的引用记录中移除授权。

  • 自定义权限策略支持版本控制,您可以按照RAM规定的版本管理机制来管理您创建的自定义权限策略版本。

操作文档

自定义权限授权示例

重要

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

  • 示例一:授予实例中某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代替。
                ]
            }
        ]
    }          

授权信息参考

使用自定义权限策略,您需要了解业务的权限管控需求,并了解云消息队列 RocketMQ 版的授权信息。详细内容请参见授权信息