5.3.2. 配置基于用户和角色的授权


5.3.2.1. 设置权限

权限通过 broker.xml 配置文件中的 <security-setting> 元素针对队列(基于其地址)定义。您可以在 配置文件的 <security-settings> 元素中定义多个 <security-setting> 实例。您可以指定准确的地址匹配,也可以使用数字符号(#)和星号(*)通配符字符来定义通配符匹配。

可将不同的权限分配给与地址匹配的一组队列。这些权限在下表中显示。

允许用户…​使用此参数…​

创建地址

createAddress

删除地址

deleteAddress

在匹配的地址下创建持久队列

createDurableQueue

删除匹配地址下的持久队列

deleteDurableQueue

在匹配的地址下创建一个不可中断的队列

createNonDurableQueue

删除匹配地址下的不可管理的队列

deleteNonDurableQueue

向匹配的地址发送消息

send

使用来自队列绑定到匹配地址的消息

consume

通过向管理地址发送管理消息来调用管理操作

管理

浏览绑定到匹配地址的队列

浏览

对于每个权限,您可以指定被授予此权限的角色列表。如果给定用户具有任何角色,则将授予他们这一组地址的权限。

以下部分显示一些权限配置示例。

5.3.2.1.1. 为单个地址配置消息生产环境

以下流程演示了如何为单个地址配置消息 production 权限。

步骤

  1. 打开 <broker-instance-dir>/etc/broker.xml 配置文件。
  2. <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. 为单个地址配置消息消耗

以下流程演示了如何为单个地址配置消息消耗权限。

步骤

  1. 打开 <broker-instance-dir>/etc/broker.xml 配置文件。
  2. <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. 在所有地址上配置完全访问权限

以下流程演示了如何配置对所有地址和相关队列的完整访问权限。

步骤

  1. 打开 <broker-instance-dir>/etc/broker.xml 配置文件。
  2. <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. 配置多个安全设置

以下示例步骤演示了如何为一组匹配的地址单独配置多个安全设置。这与本节中的示例不同,它演示了如何 授予对所有 地址的完整访问权限。

  1. 打开 <broker-instance-dir>/etc/broker.xml 配置文件。
  2. <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 角色、guesteurope-users 的用户都可以创建和删除绑定到以字符串 globalqueues.europe开头的地址的临时队列。
    permission type="send"
    任何具有 admineurope-users 角色的用户都可以发送消息到以字符串 globalqueues.europe开头的地址。
    permission type="consume"
    任何角色 admineurope-users 的用户都可以使用与字符串 globalqueues.europe开头的地址绑定中的消息。
  3. (可选)将不同的安全设置应用到一组更严格的地址集,请添加另一个 <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 管理控制台中公开。

以下流程演示了如何将用户名添加到已在代理配置中定义的队列中。

步骤

  1. 打开 <broker-instance-dir>/etc/broker.xml 配置文件。
  2. 对于给定队列,添加用户 密钥。分配值。例如:

    <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 节 “使用自定义安全管理器”

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.