Skip to main content

🧣 安全認證與權限授權

本章節解析 ActiveMQ 的兩道安全防線:認證(Authentication)確認「你是誰」,授權(Authorization)決定「你能做什麼」。生產環境中,這兩者必須同時啟用才能防止未授權的讀寫操作。

環境

info

完整操作步驟亦可參考工具筆記:setUser

1. 安全架構概覽

層級管控對象設定位置
Web Console管理後台登入jetty-realm.properties
Client 認證JMS/STOMP/MQTT 連線activemq.xml plugins
Client 授權Queue/Topic 讀寫管理activemq.xml authorizationPlugin

2. Web Console 帳號

  • 檔案: /conf/jetty-realm.properties
admin: your_password, admin
user: your_password, user

3. Simple Authentication — 快速上手

適合開發與小型部署,帳密直接寫在 activemq.xml

<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="app" password="app-pw" groups="users"/>
</users>
</simpleAuthenticationPlugin>

<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" read="users,admins" write="users,admins" admin="admins"/>
<authorizationEntry topic=">" read="users,admins" write="users,admins" admin="admins"/>
<authorizationEntry topic="ActiveMQ.Advisory.>" read="users,admins" write="users,admins" admin="admins"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
</broker>
caution

若未設定 topic=">" 萬用規則,必須額外授權 ActiveMQ.Advisory.>,否則 Broker 內部 Advisory 機制會異常。

4. authorizationEntry 權限說明

屬性權限說明
read消費可建立 Consumer、接收訊息
write發送可建立 Producer、發送訊息
admin管理可建立/刪除目的地、purge 訊息

5. JAAS Authentication — 生產推薦

帳密與群組分離到獨立檔案,修改後可熱重載,無需重啟 Broker。

5.1 users.properties

admin=admin_password
app=app_password

5.2 groups.properties

admins=admin
users=app

5.3 login.config

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";
};

5.4 activemq.xml 啟用

<plugins>
<jaasAuthenticationPlugin configuration="activemq"/>
<authorizationPlugin>
<!-- 同 Simple Auth 的 authorizationMap -->
</authorizationPlugin>
</plugins>
caution

JAAS 模式不支援 anonymous 群組。所有 Client 必須提供有效帳密。

6. 客戶端帶入認證

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
factory.setUserName("app");
factory.setPassword("app-pw");
# Spring Boot
spring:
activemq:
user: app
password: app-pw

7. 常見問題與排查

現象可能原因處理方式
SecurityException帳密錯誤或無授權檢查 users 與 authorizationEntry
能連線但無法發送缺少 write 權限在對應 queue/topic 加入群組
Advisory 相關錯誤未授權 ActiveMQ.Advisory.>加入 Advisory 授權規則
修改帳密不生效Simple Auth 需重啟改用 JAAS + reload=true

8. 與其他文章的關聯