搜索

5.3. 授权客户端

download PDF

5.3.1. 客户端授权方法

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

基于用户和基于角色的授权
为经过身份验证的用户和角色配置代理安全设置。
配置 LDAP 以授权客户端
配置 轻量级目录访问协议 (LDAP)登录模块,以处理身份验证和授权。LDAP 登录模块针对存储在中央 X.500 目录服务器中的用户数据检查传入的凭证,并根据用户角色设置权限。
配置 Kerberos 以授权客户端
配置 Java 认证和授权服务 (JAAS) Krb5LoginModule 登录模块,将凭证传递给 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

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

consume

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

管理

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

browse

具有对管理操作子集的只读访问权限

view

访问变异管理操作,这是任何没有通过 view 权限授予访问权限的操作。

edit

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

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

5.3.2.1.1. 为单个地址配置消息 production

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

流程

  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 键,请包含数字符号(#)通配符字符,以将设置应用到匹配的地址 集合。例如:

    <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 元素中,globalqueues.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. 打开 & 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 属性和方法的访问。Mbeans 是 AMQ Broker 公开管理 API 的方式,以支持管理操作。

您可以使用以下方法之一限制对 MBeans 的访问:

  • management.xml 文件中配置 authorisation 元素,这是默认方法。
  • broker.xml 文件中配置安全设置。

与更新 management.xml 文件时,您不需要在更改 broker.xml 文件中的安全设置后重启代理。

5.3.2.2.1. 在 management.xml 文件中配置基于角色的访问控制。

为管理操作配置基于角色访问控制的默认方法是,在 management.xml 文件中配置 authorisation 元素。

以下示例步骤演示了如何将角色映射到特定的 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 的方法,则代理会将访问权限匹配回 列表 方法配置中定义的角色。
    • 您还可以使用完整的 MBean 方法名称配置访问权限。例如:

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

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

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

5.3.2.2.1.1. 基于角色的访问示例

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

以下示例演示了如何使用 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。在本例中,命名队列为 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>

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

例如,假设两个 & 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.1.2. 配置 allowlist 元素

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

以下示例流程演示了如何配置 allowlist 元素。

流程

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

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

    在本例中,任何带有域 hawtio 的 MBean 都被允许在没有身份验证的情况下访问。您还可以对 MBean 属性使用 < entry domain="hawtio" key="typePROFILE" /> 形式的通配符条目。

  3. 启动或重启代理。

    • 在 Linux: & lt;broker_instance_dir&gt; /bin/artemis run
    • 在 Windows 上: <broker_instance_dir&gt; \bin\artemis-service.exe start
5.3.2.2.2. 在 broker.xml 文件中配置基于角色的访问控制

您可以在 broker.xml 文件中为管理操作配置基于角色的访问控制,而不是 management.xml 文件。对 broker.xml 文件中的权限更新不需要代理重启才能生效。

broker.xml 文件中,您可以为管理操作授予 viewedit 权限。特定管理操作可供具有 查看或编辑 权限的角色使用,由预定义的正则表达式控制。任何匹配正则表达式的操作都可以由具有 view 权限的角色访问,所有其他操作都需要 编辑权限

先决条件

流程

  1. management.xml 文件中删除 authorisation 元素配置,以防止代理使用此文件中的默认 RBAC 配置。

    1. 编辑 & lt;broker_instance_dir>/etc/management.xml 文件。
    2. 从文件中删除 authorisation 元素配置。
    3. 保存 & lt;broker_instance_dir>/etc/management.xml 文件。
  2. 在代理 JVM 中添加环境变量,将代理配置为使用 broker.xml 文件中的 RBAC 配置。

    1. 打开 & lt;broker_instance_dir>/etc/artemis.profile 文件。
    2. 在 Java 系统参数的 JAVA_ARGS 列表 中添加以下参数:

      -Djavax.management.builder.initial=org.apache.activemq.artemis.core.server.management.ArtemisRbacMBeanServerBuilder

    3. 保存 artemis.profile 文件。
  3. 打开 & lt;broker_instance_dir&gt; /etc/broker.xml 文件,以配置 RBAC 来管理操作。
  4. 搜索 security-settings 元素,再为管理操作添加一个 security-setting 元素。

    管理操作的匹配地址的格式是:

    <_management-rbac-prefix_>.<_resource type_>.<_resource name_>.<_operation_>

    management-rbac-prefix 参数的默认值为 mops

    在以下示例 RBAC 配置中,匹配地址中的数字符号(#)将 admin 角色 视图 和编辑 权限授予所有 MBeans。

    <security-settings>
      ..
      <security-setting match="mops.#">
       <permission type="view" roles="admin"/>
       <permission type="edit" roles="admin"/>
      </security-setting>
      ..
    </security-setting>
  5. 保存 & lt;broker_instance_dir&gt; /etc/broker.xml 配置文件。

其他管理操作的基于角色的访问控制示例

以下示例将 管理器 角色 视图 和编辑权限授予 activemq.management 地址。操作位置中的星号 packagemanifests 授予对所有操作的访问权限。

<security-setting match="mops.address.activemq.management.*">
   <permission type="view" roles="manager"/>
</security-setting>

以下示例有一个空角色列表,它拒绝所有用户使用代理 MBean 执行指定操作的权限 forceFailover

<security-setting match="mops.broker.forceFailover">
   <permission type="edit" roles=""/>
</security-setting>

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 元素中指定的 匹配 字符串不同,您在 resource-limit-settings 中指定的匹配字符串 无法使用 通配符语法。相反,匹配字符串会定义将资源限值设置应用到的特定用户。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.