搜索

5.3. 授权客户端

download PDF

5.3.1. 客户端授权方法

要授权客户端对代理执行操作,如创建和删除地址和队列,以及发送和接收消息,您可以使用以下方法:

基于用户和角色的授权
为经过身份验证的用户和角色配置代理安全设置。
配置 LDAP 以授权客户端
配置 轻量级目录访问协议( LDAP)登录模块,以处理身份验证和授权。LDAP 登录模块会根据存储在中央 X.500 目录服务器中的用户数据检查传入的凭据,并根据用户角色设置权限。
配置 Kerberos 以授权客户端
配置 Java 身份验证和授权服务 (JAAS) K rb5LoginModule 登录模块,将凭证传递给 PropertiesLoginModuleLDAPLoginModule 登录模块,它将 Kerberos 验证的用户映射到 AMQ Broker 角色。

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

5.3.2.1. 设置权限

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

可将不同的权限提供给与地址匹配的队列集合。这些权限显示在下表中。

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

创建地址

createAddress

删除地址

deleteAddress

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

createDurableQueue

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

deleteDurableQueue

在匹配地址下创建一个不可配置队列

createNonDurableQueue

在匹配地址下删除不可配置队列

deleteNonDurableQueue

发送消息到匹配的地址

send

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

消耗

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

管理

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

浏览

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

以下章节显示了一些权限配置示例。

5.3.2.1.1. 为一个地址配置消息生产

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

流程

  1. 打开 & lt;broker_instance_dir&gt; /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>

    根据前面的配置,制作者 角色的成员具有地址 my.destination发送 权限。

5.3.2.1.2. 为一个地址配置消息消耗

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

流程

  1. 打开 & lt;broker_instance_dir&gt; /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.destinationconsume 权限。

5.3.2.1.3. 配置所有地址的完整访问权限

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

流程

  1. 打开 & lt;broker_instance_dir&gt; /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. 打开 & lt;broker_instance_dir&gt; /etc/broker.xml 配置文件。
  2. <security-settings> 项中添加一个单一的 <security-setting> 项。对于 match 键,请包含数字符号(DSL)通配符字符,以将设置应用到匹配的地址 集合。例如:

    <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.#
    数字符号(DSL)通配符字符由代理解释为"任何单词序列"。词语用句点(.)分隔。在本例中,安全设置适用于以字符串 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 元素中,globalqueues.europe.orders.# 的匹配比第一个 security-setting 元素中的 globalqueues.europe.# 匹配更加具体。对于与 globalqueues.europe.orders.# 匹配的任何地址,权限 createDurableQueue, deleteDurableQueue, createNonDurableQueue, deleteNonDurableQueue 不是从文件的第一个 security-setting 元素继承的。例如,对于地址 globalqueues.europe.orders.plastics,唯一存在的权限才会为角色 europe-users 发送 和使用

    因此,由于在一个 安全设置 块中指定的权限不会被另一个继承,因此您可以通过不指定这些权限来有效地拒绝更具体的 安全设置 块的权限。

5.3.2.1.5. 使用用户配置队列

自动创建队列时,队列将被分配连接客户端的用户名。此用户名作为元数据包含在队列中。名称由 JMX 和 AMQ Broker 管理控制台公开。

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

流程

  1. 打开 & lt;broker_instance_dir&gt; /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 和 Red Hat JBoss Enterprise Application Platform (JBoss EAP)安全性的集成。

    要了解如何 使用自定义 安全管理器,请参阅 第 5.6.2 节 “指定自定义安全管理器”

5.3.2.2. 配置基于角色的访问控制

基于角色的访问控制 (RBAC)用于限制对 MBeans 属性和方法的访问。RBAC 可让管理员根据角色为所有用户授予正确的访问权限,如 Web 控制台、管理界面和核心信息等。

5.3.2.2.1. 配置基于角色的访问控制

以下示例演示了如何将角色映射到特定的 MBeans 及其属性和方法。

先决条件

流程

  1. 打开 & lt;broker_instance_dir&gt; /etc/management.xml 配置文件。
  2. 搜索 role-access 元素并编辑配置。例如:

    <role-access>
        <match domain="org.apache.activemq.artemis">
           <access method="list*" roles="view,update,amq"/>
           <access method="get*" roles="view,update,amq"/>
           <access method="is*" roles="view,update,amq"/>
           <access method="set*" roles="update,amq"/>
           <access method="*" roles="amq"/>
        </match>
    </role-access>
    • 在本例中,匹配项应用于具有域名 org.apache.activemq.apache 的任何 MBean 属性。
    • 访问 view, update, 或 amq 角色来匹配 MBean 属性由您添加到角色的 list*, get*, set*, is*, 和 * 访问方法控制。method="*" (通配符) 语法作为一个 catch-all 的方式,适用于没有在配置中列出的所有其他方法。配置中的每个访问方法都转换为 MBean 方法调用。
    • 调用的 MBean 方法与配置中列出的方法匹配。例如,如果您在带有 org.apache.activemq.artemis 域的 MBean 上调用名为 listMessages 的方法,那么代理会将访问权限与 list 方法配置中定义的角色匹配。
    • 您还可以使用完整的 MBean 方法名称来配置访问。例如:

      <access method="listMessages" roles="view,update,amq"/>
  3. 启动或重启代理。

    • On Linux: <broker_instance_dir>/bin/artemis run
    • 在 Windows 上: <broker_instance_dir&gt; \bin\artemis-service.exe start

您还可以通过添加与 MBean 属性匹配的 key 属性来匹配域中的特定 MBeans。

5.3.2.2.2. 基于角色的访问示例

本节显示了应用基于角色的访问控制的示例:

以下示例演示了如何使用 key 属性将角色映射到指定域中的所有队列。

<match domain="org.apache.activemq.artemis" key="subcomponent=queues">
   <access method="list*" roles="view,update,amq"/>
   <access method="get*" roles="view,update,amq"/>
   <access method="is*" roles="view,update,amq"/>
   <access method="set*" roles="update,amq"/>
   <access method="*" roles="amq"/>
</match>

以下示例演示了如何使用 key 属性将角色映射到名为 queue 的特定角色。在本例中,命名的 queue 是 exampleQueue

<match domain="org.apache.activemq.artemis" key="queue=exampleQueue">
   <access method="list*" roles="view,update,amq"/>
   <access method="get*" roles="view,update,amq"/>
   <access method="is*" roles="view,update,amq"/>
   <access method="set*" roles="update,amq"/>
   <access method="*" roles="amq"/>
</match>

以下示例演示了如何将角色映射到名称包含指定前缀的每个队列。在本例中,使用星号(*)通配符运算符匹配所有以前缀 example 开头的队列名称。

<match domain="org.apache.activemq.artemis" key="queue=example*">
   <access method="list*" roles="view,update,amq"/>
   <access method="get*" roles="view,update,amq"/>
   <access method="is*" roles="view,update,amq"/>
   <access method="set*" roles="update,amq"/>
   <access method="*" roles="amq"/>
</match>

您可能希望为同一属性的不同集合(例如,不同的队列集合)来映射角色。在这种情况下,您可以在配置文件中包含多个 match 元素。但是,就可以在同一域中有多个匹配项。

例如,假设配置了两个 &lt ;match& gt; 元素,如下所示:

<match domain="org.apache.activemq.artemis" key="queue=example*">

<match domain="org.apache.activemq.artemis" key="queue=example.sub*">

根据此配置,org.apache.activemq.artemis 域中的名为 example.sub.queue 的队列与两个通配符密钥表达式匹配。因此,代理需要一个优先方案来决定哪组角色映射到队列;在第一个 match 项中指定的角色,或在第二个 match 项中指定的角色。

当同一域中有多个匹配项时,代理会在映射角色时使用以下优先级方案:

  • 完全匹配的优先级高于通配符匹配
  • 较长的通配符匹配优先于较短的通配符匹配

在本例中,由于较长的通配符表达式与 example.sub.queue 的队列名称匹配,因此代理会应用第二个 < match > 元素中配置的 role-mapping。

注意

default-access 元素是每种方法调用的 catch-all 元素,这些调用没有使用 role-accesswhitelist 配置进行处理。default-accessrole-access 元素具有相同的 match 元素语义。

5.3.2.2.3. 配置 whitelist 元素

白名单是一组预先批准的域或 MBeans,不需要用户身份验证。您可以提供必须绕过身份验证的域列表或 MBeans 列表。例如,您可以使用白名单来指定 AMQ Broker 管理控制台要运行的任何 MBeans。

以下示例演示了如何配置 whitelist 元素。

流程

  1. 打开 & lt;broker_instance_dir&gt; /etc/management.xml 配置文件。
  2. 搜索 whitelist 元素并编辑配置:

    <whitelist>
       <entry domain="hawtio"/>
    </whitelist>

    在本例中,任何具有域 hawtio 的 MBean 都被允许访问,而无需身份验证。您也可以使用 < entry domain="hawtio" key="type=rhacm"/> 形式的通配符条目来匹配 MBean 属性。

  3. 启动或重启代理。

    • On Linux: <broker_instance_dir>/bin/artemis run
    • 在 Windows 上: <broker_instance_dir&gt; \bin\artemis-service.exe start

5.3.2.3. 设置资源限值

有时,设置特定限制会超过与授权和身份验证相关的普通安全设置。

5.3.2.3.1. 配置连接和队列限制

以下示例流程演示了如何限制用户可以创建的连接和队列数量。

  1. 打开 & lt;broker_instance_dir&gt; /etc/broker.xml 配置文件。
  2. 添加 resource-limit-settings 元素。为 max-connectionsmax-queues 指定值。例如:

    <resource-limit-settings>
       <resource-limit-setting match="myUser">
          <max-connections>5</max-connections>
          <max-queues>3</max-queues>
       </resource-limit-setting>
    </resource-limit-settings>
    max-connections
    定义匹配用户可以在代理上创建的会话数量。默认值为 -1, 这意味着没有限制。如果要限制会话数量,请考虑从 AMQ 核心协议 JMS 客户端到代理的连接会创建两个会话。
    max-queues
    定义匹配用户可以创建的队列数量。默认值为 -1, 这意味着没有限制。
注意

与您可以在代理配置的 address-setting 元素中指定的 match 字符串不同,您在 resource-limit-settings 中指定的 match 字符串 无法使用 通配符语法。相反,Match 字符串定义将资源限值设置应用到的特定用户。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.