授权

为了完成安全迁移,我们需要处理授权策略。在 ActiveMQ 中,授权是使用 conf/activemq.xml 中的适当代理插件指定的,例如

<authorizationPlugin>
  <map>
    <authorizationMap>
      <authorizationEntries>
        <authorizationEntry queue=">" read="admins" write="admins" admin="admins"/>
        <authorizationEntry queue="USERS.>" read="users" write="users" admin="users"/>
        <authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users"/>
        <authorizationEntry topic=">" read="admins" write="admins" admin="admins"/>
        <authorizationEntry topic="USERS.>" read="users" write="users" admin="users"/>
        <authorizationEntry topic="GUEST.>" read="guests" write="guests,users" admin="guests,users"/>
        <authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users" write="guests,users" admin="guests,users"/>
      </authorizationEntries>
    </authorizationMap>
  </map>
</authorizationPlugin>

等效的 Artemis 配置在 etc/broker.xml 中指定,应该如下所示

<security-settings>
  <security-setting match="#">
    <permission type="createNonDurableQueue" roles="admins"/>
    <permission type="deleteNonDurableQueue" roles="admins"/>
    <permission type="createDurableQueue" roles="admins"/>
    <permission type="deleteDurableQueue" roles="admins"/>
    <permission type="consume" roles="admins"/>
    <permission type="browse" roles="admins"/>
    <permission type="send" roles="admins"/>
  </security-setting>

  <security-setting match="USERS.#">
    <permission type="createNonDurableQueue" roles="users"/>
    <permission type="deleteNonDurableQueue" roles="users"/>
    <permission type="createDurableQueue" roles="users"/>
    <permission type="deleteDurableQueue" roles="users"/>
    <permission type="consume" roles="users"/>
    <permission type="browse" roles="users"/>
    <permission type="send" roles="users"/>
  </security-setting>         

  <security-setting match="GUESTS.#">
    <permission type="createNonDurableQueue" roles="guests"/>
    <permission type="deleteNonDurableQueue" roles="guests"/>
    <permission type="createDurableQueue" roles="guests"/>
    <permission type="deleteDurableQueue" roles="guests"/>
    <permission type="consume" roles="guests"/>
    <permission type="browse" roles="guests"/>
    <permission type="send" roles="guests"/>
  </security-setting>                  
</security-settings>

如您所见,它们非常相似,只是有一些细微的差别。最重要的是,ActiveMQ 中的策略是在目标名称上定义的,而在 Artemis 中它们应用于核心队列(回顾之前部分和 Artemis 用户手册中队列和地址之间的关系)。

另一个值得注意的差异是,Artemis 中的策略更加细粒度。以下段落和表格显示了与 ActiveMQ 策略相对应的 Artemis 策略。

如果您希望允许用户发送消息,您需要在各自的代理中定义以下策略。

ActiveMQ Artemis
write send

在 Artemis 中,用于消费和浏览的策略是分开的,您需要同时定义它们来控制对目标的read访问权限。

ActiveMQ Artemis
read consume
browse

admin权限也是一样的。您需要为持久和非持久核心队列定义单独的创建和删除策略。

ActiveMQ Artemis
admin createNonDurableQueue
deleteNonDurableQueue
createDurableQueue
deleteDurableQueue

最后,还有一个使用通配符定义策略的问题。下表显示了通配符语法的差异。

通配符 描述 ActiveMQ Artemis
分隔符 在路径中分隔单词 . .
单个单词 匹配路径中的单个单词 * *
任何单词 递归地匹配路径中的任何单词 > #

基本上,默认情况下只有任何单词字符不同,这就是为什么我们在 Artemis 示例中使用GUESTS.#而不是 ActiveMQ 的GUESTS.>语法的原因。

掌握了这些知识,您应该能够将当前的 ActiveMQ 授权策略转换为 Artemis。

个与 "" 匹配的结果

    没有与 "" 匹配的结果