You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveMQ Artemis用户无法删除队列(AMQ229213)权限配置咨询

ActiveMQ Artemis 队列删除权限配置问题

我正在ActiveMQ Artemis中创建仅具备特定队列删除权限的用户,已为该用户配置目标队列的deleteNonDurableQueue权限,执行Artemis CLI命令:

amq-broker queue delete --url url --user testuser_queue_delete_allow --password password --name queue.foo.bar

触发AMQ229213错误:

Exception in thread "main" ActiveMQSecurityException[errorType=SECURITY_EXCEPTION message=AMQ229213: 
User: testuser does not have permission=CREATE_ADDRESS 
for queue activemq.management.59973261-566f-4600-a0f6-1820c30f8727 
on address activemq.management.59973261-566f-4600-a0f6-1820c30f8727]
at
...

我尚未完全理解其权限模型,之前为testuser配置了activemq.management.#的manage、deleteNonDurableQueue等权限,但该用户似乎能删除所有队列,这是否正常?能否将删除权限限制为仅单个队列?

更新说明

Artemis运行于Kubernetes环境,由activemq-artemis-operator配置,以下为修改后的配置文件(队列名已更新为queue.foo.bar):

/etc/login.config

activemq {
    org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient
        org.apache.activemq.jaas.properties.user="artemis-users.properties"
        org.apache.activemq.jaas.properties.role="artemis-roles.properties";
};

/etc/broker.xml

<security-settings>
   <security-setting match="#">
      <permission type="createNonDurableQueue" roles="testrole.queue.create.allow"/>
   </security-setting>
   <security-setting match="queue.foo.#">
      <permission type="send" roles="testrole.queue.create.allow"/>
      <permission type="deleteDurableQueue" roles="testrole.queue.delete.allow"/>
      <permission type="deleteNonDurableQueue" roles="testrole.queue.delete.allow"/>
   </security-setting>
</security-settings>

/etc/artemis-users.properties

admin = password
testuser_queue_create_allow = password
testuser_queue_delete_allow = password

/etc/artemis-roles.properties

admin = admin
testrole.queue.delete.allow = testuser_queue_delete_allow
testrole.queue.create.allow = testuser_queue_create_allow

问题分析与解决方案

1. AMQ229213错误原因

CLI执行队列删除操作时,会临时创建一个管理队列(即错误信息中的activemq.management.xxx)用于和broker交互,这个队列对应的地址需要CREATE_ADDRESS权限。当前配置未给删除用户分配该权限,因此触发安全异常。

2. 限制删除权限为单个队列的配置方法

要实现仅允许用户删除指定队列,需调整broker.xml的安全配置:

  • 给删除用户分配管理队列所需的基础权限,限制到activemq.management.#地址;
  • 精准指定目标队列的删除权限,避免使用#通配符导致权限范围过大。

修改后的security-settings示例:

<security-settings>
   <!-- 允许创建用户创建非持久化队列 -->
   <security-setting match="#">
      <permission type="createNonDurableQueue" roles="testrole.queue.create.allow"/>
   </security-setting>
   <!-- 给删除用户分配管理队列的必要权限 -->
   <security-setting match="activemq.management.#">
      <permission type="createAddress" roles="testrole.queue.delete.allow"/>
      <permission type="createNonDurableQueue" roles="testrole.queue.delete.allow"/>
      <permission type="deleteNonDurableQueue" roles="testrole.queue.delete.allow"/>
   </security-setting>
   <!-- 仅允许删除用户操作指定队列 -->
   <security-setting match="queue.foo.bar">
      <permission type="deleteDurableQueue" roles="testrole.queue.delete.allow"/>
      <permission type="deleteNonDurableQueue" roles="testrole.queue.delete.allow"/>
   </security-setting>
</security-settings>

3. 之前权限过大的原因

配置activemq.management.#的manage权限时,manage是全能权限,包含几乎所有管理操作(包括删除任意队列),因此用户能删除所有队列属于正常情况,但不符合最小权限原则,应避免直接使用manage权限。

4. 配置验证

修改配置后重启broker,重新执行CLI删除命令:

amq-broker queue delete --url url --user testuser_queue_delete_allow --password password --name queue.foo.bar

此时应能成功删除指定队列,且无法操作其他队列。


内容的提问来源于stack exchange,提问作者zkygr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:27:04