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


5.3.2.1. 设置权限

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

可以为与地址匹配的一组队列授予不同的权限。下表中显示了这些权限。

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

创建地址

createAddress

删除地址

deleteAddress

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

createDurableQueue

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

deleteDurableQueue

在匹配地址下创建不可重复的队列

createNonDurableQueue

删除匹配地址下的不可重复队列

deleteNonDurableQueue

发送一条消息到匹配地址

send

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

使用

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

管理

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

browse

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

下面的部分显示了一些权限配置示例。

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

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

流程

  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>

    根据上述配置,users 角色 的成员具有地址 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"
    任何具有 adminguesteurope-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 元素中,全局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 管理控制台公开。

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

流程

  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.2 节 “指定自定义安全管理器”

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.