Skip to main content

🧣 ActiveMQ 權限控管

環境

Web 權限控管

Web - 後台登入帳號資訊

  • 檔案: /conf/jetty-realm.properties
  • 規則: 帳號: 密碼, 角色
# Defines users that can access the web (console, demo, etc.)
# username: password [,rolename ...]

admin: [密碼], admin
user: [密碼], user

Simple Authentication

Client 端連線時需要使用的帳號密碼

設定完需重啟服務

簡單驗證 - 身分認證

  • 檔案: /conf/activemq.xml
屬性說明
username使用者帳號
password使用者密碼
groups使用者所屬的群組
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="admin" password="admin1pwd" groups="admins"/>
<authenticationUser username="user" password="user-pw" groups="users"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
</broker>

簡單驗證 - 角色授權

  • 檔案: /conf/activemq.xml
屬性說明
topic要授權的主題, > 表示所有
read使用者密碼
groups使用者所屬的群組
  • 簡單驗證 - 授權所有 Topic
<!-- 授權所有 Topic -->
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="admin" password="admin1pwd" groups="admins"/>
<authenticationUser username="user" password="user-pw" groups="users"/>
</users>
</simpleAuthenticationPlugin>

<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic=">" read="users" write="users" admin="users, admins"/>

<!-- 如果没有設定 topic=">" 需要設定以下內容
<authorizationEntry topic="ActiveMQ.Advisory.>" read="guests, users" write="guests,users" admin="guests,users"/>
-->
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
</broker>
  • 簡單驗證 - 授權 Topic 進行授權
  • 需要特別設定 ActiveMQ.Advisory.> 讓服務使用
<!-- 授權所有 Topic -->
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="admin" password="admin1pwd" groups="admins"/>
<authenticationUser username="user" password="user-pw" groups="users"/>
</users>
</simpleAuthenticationPlugin>

<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic="MyTopic" read="users" write="users" admin="users, admins"/>
<authorizationEntry topic="TestTopic" read="admins" write="users" admin="users, admins"/>
<!-- 如果没有設定 topic=">" 需要設定以下內容 -->
<authorizationEntry topic="ActiveMQ.Advisory.>" read="users, admins" write="anonymous, users, admins" admin="anonymous, users, admins"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
</broker>
caution

topic="ActiveMQ.Advisory.>" 這邊特地使用了 anonymous, 在 5.4 版之後,

簡單驗證提供了匿名訪問的功能,anonymous 則表示匿名的群組

JAAS Authentication

JAAS 認證可以透過三份文件來設定

並且不需要重啟服務

JAAS - 使用者設定

  • 檔案: /conf/users.properties
  • 儲存帳號與密碼
  • 密碼至少要大於四位
  • 規則: 帳號=密碼
## username=password
admin=admin
user1=pwd123
user2=pwd456

JAAS - 角色群組

  • 檔案: /conf/groups.properties
  • 設定角色群組
  • 規則: 群組名稱=帳號1,帳號2
## group-name=username1,username2
admins=admin,user1
users=user1,user2

JAAS - 屬性設定

  • 檔案: /conf/login.config
屬性說明
debug發生錯誤或例外時,可以看到詳細的錯誤訊息
reload在修改 users.properties, groups.properties 後不需要重啟服務
org.apache.activemq.jaas.properties.user指定使用 users.properties
org.apache.activemq.jaas.properties.group指定使用 groups.properties
activemq {
org.apache.activemq.jaas.PropertiesLoginModule required
debug=true
reload=true
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
};

JAAS - 啟用 JAAS

  • 檔案: /conf/activemq.xml
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<plugins>
<jaasAuthenticationPlugin configuration="activemq" />
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic="TestTopic" read="users, admins" write="users, admins" admin="users, admins"/>
<authorizationEntry topic="ActiveMQ.Advisory.>" read="users, admins" write="users, admins" admin="users, admins"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
</broker>
caution

此模式無法使用 anonymous

關於 ActiveMQ 屬性

屬性值(示例)描述
<authorizationEntry>-定義授權規則的元素
topic>授權的主題,這裡是通配符,表示所有主題
readmb對該主題的讀取權限,mb 角色具有讀取權限
writeusers對該主題的寫入權限,users 角色具有寫入權限
adminadmins,users,mb對該主題的管理權限,adminsusersmb 角色都有管理權限