5.3.2. 配置基于用户和角色的授权
5.3.2.1. 设置权限
通过 broker.xml
配置文件中的 <security-setting>
元素针对队列(基于其地址)定义权限。您可以在配置文件的 <security-
实例。您可以指定完全地址匹配,也可以使用数字符号(settings> 元素中定义多个 <security-setting
>#
)和星号(*
)通配符字符定义通配符匹配。
可以为与地址匹配的一组队列授予不同的权限。下表中显示了这些权限。
允许用户… | 使用此参数… |
---|---|
创建地址 |
|
删除地址 |
|
在匹配地址下创建一个持久队列 |
|
删除匹配地址下的持久队列 |
|
在匹配地址下创建不可重复的队列 |
|
删除匹配地址下的不可重复队列 |
|
发送一条消息到匹配地址 |
|
使用绑定到匹配地址的队列中的消息 |
|
通过将管理消息发送到管理地址来调用管理操作 |
|
浏览绑定到匹配地址的队列 |
|
对于每个权限,您可以指定一个被授予权限的角色列表。如果给定用户具有任何角色,则将被授予他们这一组地址的权限。
下面的部分显示了一些权限配置示例。
5.3.2.1.1. 为单个地址配置消息生产环境
以下流程演示了如何为单个地址配置消息生产权限。
流程
-
打开
<broker_instance_dir>/etc/broker.xml
配置文件。 在
<security-
元素。对于settings> 元素中添加单个 <security-setting
>match
键,指定一个地址。例如:<security-settings> <security-setting match="my.destination"> <permission type="send" roles="producer"/> </security-setting> </security-settings>
根据上述配置,
producer
角色的成员具有地址my.destination
的发送
权限。
5.3.2.1.2. 为单个地址配置消息消耗
以下步骤演示了如何为单个地址配置消息使用权限。
流程
-
打开
<broker_instance_dir>/etc/broker.xml
配置文件。 在
<security-
元素。对于settings> 元素中添加单个 <security-setting
>match
键,指定一个地址。例如:<security-settings> <security-setting match="my.destination"> <permission type="consume" roles="consumer"/> </security-setting> </security-settings>
根据上述配置,users
角色
的成员具有地址my.destination
的消耗权限
。
5.3.2.1.3. 在所有地址上配置完整访问权限
以下步骤演示了如何配置对所有地址和相关队列的完整访问权限。
流程
-
打开
<broker_instance_dir>/etc/broker.xml
配置文件。 在
<security-
元素。对于settings> 元素中添加单个 <security-setting
>match
键,若要配置 对所有 地址的访问,请指定数字符号(#
)通配符。例如:<security-settings> <security-setting match="#"> <permission type="createDurableQueue" roles="guest"/> <permission type="deleteDurableQueue" roles="guest"/> <permission type="createNonDurableQueue" roles="guest"/> <permission type="deleteNonDurableQueue" roles="guest"/> <permission type="createAddress" roles="guest"/> <permission type="deleteAddress" roles="guest"/> <permission type="send" roles="guest"/> <permission type="browse" roles="guest"/> <permission type="consume" roles="guest"/> <permission type="manage" roles="guest"/> </security-setting> </security-settings>
根据上述配置,将所有队列上的 guest 角色成员授予所有权限。这在将匿名身份验证配置为为每个用户分配
guest
角色的开发场景中非常有用。
其它资源
- 要了解配置更复杂的用例,请参阅 第 5.3.2.1.4 节 “配置多个安全设置”。
5.3.2.1.4. 配置多个安全设置
以下示例步骤演示了如何单独为匹配地址集配置多个安全设置。这与本节前面的示例相反,它演示了如何授予 对所有 地址 的完整 访问权限。
-
打开
<broker_instance_dir>/etc/broker.xml
配置文件。 在
<security-
元素。对于settings> 元素中添加单个 <security-setting
>match
键,请 包含数字符号(#
)通配符字符,以将设置应用到匹配的地址集合。例如:<security-setting match="globalqueues.europe.#"> <permission type="createDurableQueue" roles="admin"/> <permission type="deleteDurableQueue" roles="admin"/> <permission type="createNonDurableQueue" roles="admin, guest, europe-users"/> <permission type="deleteNonDurableQueue" roles="admin, guest, europe-users"/> <permission type="send" roles="admin, europe-users"/> <permission type="consume" roles="admin, europe-users"/> </security-setting>
match=globalqueues.europe.#
-
数字符号(
#
)通配符由代理解释为"任何词语序列"。词语用句点(.
)分隔。在本例中,安全设置适用于以字符串 globalqueues.europe 开头的任何地址。 permission type="createDurableQueue"
-
只有具有
admin 角色的用户
才能创建或删除绑定到以字符串 globalqueues.europe 开头的地址的持久队列。 permission type="createNonDurableQueue"
-
任何具有
admin
、guest
或europe-users 角色的用户
都可以创建或删除绑定到以字符串 globalqueues.europe 开头的地址的临时队列。 permission type="send"
-
任何具有
admin
或europe-users
角色的用户都可以发送消息到绑定至以字符串 globalqueues.europe 开头的地址的队列。 permission type="consume"
-
任何具有
admin
或europe-users 角色的用户
都可以使用绑定到以字符串 globalqueues.europe 开头的地址的队列中的消息。
(可选)要将不同的安全设置应用到更严格的地址集合,请添加另一个
<security-setting>
元素。对于match
键,请指定一个更具体的文本字符串。例如:<security-setting match="globalqueues.europe.orders.#"> <permission type="send" roles="europe-users"/> <permission type="consume" roles="europe-users"/> </security-setting>
在第二个
security-setting
元素中,全局queues.europe.orders.#
匹配比第一个security-setting
元素中指定的globalqueues.europe.#
匹配更为具体。对于匹配globalqueues.europe.orders.#
的任何地址,权限createDurableQueue
,deleteDurableQueue
,createNonDurableQueue
,deleteNonDurableQueue
不 继承自 文件中的第一个security-setting
元素。例如,对于地址globalqueues.europe.orders.plastics
,存在的唯一权限会为europe-users
角色发送
和使用
。因此,由于一个
security-setting
块中指定的权限不会被其他人继承,您只需不指定这些权限即可有效地拒绝更具体的security-setting
块中的权限。
5.3.2.1.5. 使用用户配置队列
自动创建队列时,将为队列分配连接的客户端的用户名。此用户名作为元数据包含在队列中。该名称由 JMX 和 AMQ Broker 管理控制台公开。
以下流程演示了如何将用户名添加到您在代理配置中手动定义的队列中。
流程
-
打开
<broker_instance_dir>/etc/broker.xml
配置文件。 对于给定队列,添加
用户
密钥。分配一个值。例如:<address name="ExampleQueue"> <anycast> <queue name="ExampleQueue" user="admin"/> </anycast> </address>
根据上述配置,将
admin
用户分配到队列ExampleQueue
。
- 在队列中配置用户不会更改该队列的任何安全语义,它仅用于该队列上的元数据。
用户之间的映射和他们拥有的角色之间的映射由名为 安全管理器 的组件处理。安全管理器从存储在代理中的属性文件中读取用户凭证。默认情况下,AMQ Broker 使用
org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager
安全管理器。此默认安全管理器提供与 JAAS 和红帽 JBoss 企业应用平台(JBoss EAP)安全性的集成。要了解如何使用 自定义 安全管理器,请参阅 第 5.6.2 节 “指定自定义安全管理器”。