5.3.2. 配置基于用户和角色的授权
5.3.2.1. 设置权限
权限通过 broker.xml
配置文件中的 <security-setting>
元素针对队列(基于其地址)定义。您可以在 配置文件的 <security-settings>
元素中定义多个 <security-setting>
实例。您可以指定准确的地址匹配,也可以使用数字符号(#
)和星号(*
)通配符字符来定义通配符匹配。
可将不同的权限分配给与地址匹配的一组队列。这些权限在下表中显示。
允许用户… | 使用此参数… |
---|---|
创建地址 |
|
删除地址 |
|
在匹配的地址下创建持久队列 |
|
删除匹配地址下的持久队列 |
|
在匹配的地址下创建一个不可中断的队列 |
|
删除匹配地址下的不可管理的队列 |
|
向匹配的地址发送消息 |
|
使用来自队列绑定到匹配地址的消息 |
|
通过向管理地址发送管理消息来调用管理操作 |
|
浏览绑定到匹配地址的队列 |
|
对于每个权限,您可以指定被授予此权限的角色列表。如果给定用户具有任何角色,则将授予他们这一组地址的权限。
以下部分显示一些权限配置示例。
5.3.2.1.1. 为单个地址配置消息生产环境
以下流程演示了如何为单个地址配置消息 production 权限。
步骤
-
打开
<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>
根据前面的配置,
consumer
角色的成员使用
地址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
元素中,globalqueues.europe.orders.#
match 比第一个security-setting
元素中指定的globalqueues.europe.#
匹配。对于与globalqueues.europe.orders.#
匹配的任何地址,权限createDurableQueue
,
不会 继承该文件中的第一个deleteDurableQueue
,createNonDurableQueue
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 节 “使用自定义安全管理器”。