5.3. 授权客户端
5.3.1. 客户端授权方法 复制链接链接已复制到粘贴板!
要授权客户端在代理上执行操作,如创建和删除地址和队列,以及发送和接收信息,您可以使用以下方法:
- 基于用户和角色的授权
- 为经过身份验证的用户和角色配置代理安全设置。
- 配置 LDAP 以授权客户端
- 配置 轻量级目录访问协议 (LDAP)登录模块,以处理身份验证和授权。LDAP 登录模块根据存储在中央 X.500 目录服务器中的用户数据检查传入的凭据,并根据用户角色设置权限。
- 配置 Kerberos 以授权客户端
-
配置 Java 身份验证和授权服务 (JAAS)
Krb5LoginModule
登录模块,将凭证传递给PropertiesLoginModule
或LDAPLoginModule
登录模块,它将 Kerberos 验证的用户映射到 AMQ Broker 角色。
5.3.2. 配置基于用户和基于角色的访问控制 复制链接链接已复制到粘贴板!
5.3.2.1. 设置权限 复制链接链接已复制到粘贴板!
权限通过 broker.xml
配置文件中的 < security-setting&
gt; 元素根据队列(基于其地址)定义。您可以在配置文件的 <security-settings>
项中定义多个 <security-setting>
实例。您可以指定一个准确的地址匹配,或者使用数字符号(#
)和星号(*
)通配符字符来定义通配符匹配。
可将不同的权限分配给与地址匹配的队列集合。这些权限显示在下表中。
允许用户进行… | 使用此参数… |
---|---|
创建地址 |
|
删除地址 |
|
在匹配地址下创建一个持久化队列 |
|
删除匹配地址下的持久队列 |
|
在匹配地址下创建一个非持久化队列 |
|
删除匹配地址下的非持久化队列 |
|
向匹配地址发送消息 |
|
使用队列绑定到匹配地址的消息 |
|
通过将管理消息发送到管理地址来调用管理操作 |
|
浏览绑定到匹配地址的队列 |
|
对管理操作子集具有只读访问权限 |
|
访问变异管理操作,这是任何未授予 |
|
对于每个权限,您可以指定授予该权限的角色列表。如果给定用户具有任何角色,则他们被授予该一组地址的权限。
以下章节显示了权限的一些配置示例。
5.3.2.1.1. 为单个地址配置消息 production 复制链接链接已复制到粘贴板!
以下流程演示了如何为单个地址配置消息生产权限。
流程
-
打开 &
lt;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>
<security-settings> <security-setting match="my.destination"> <permission type="send" roles="producer"/> </security-setting> </security-settings>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据上述配置,
生产者
角色的成员具有地址my.destination
的发送
权限。
5.3.2.1.2. 为单个地址配置消息消耗 复制链接链接已复制到粘贴板!
以下流程演示了如何为单个地址配置消息消耗权限。
流程
-
打开 &
lt;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>
<security-settings> <security-setting match="my.destination"> <permission type="consume" roles="consumer"/> </security-setting> </security-settings>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据上述配置,
consumer
角色的成员具有地址my.destination
的consume
权限。
5.3.2.1.3. 在所有地址上配置完整访问权限 复制链接链接已复制到粘贴板!
以下步骤演示了如何配置对所有地址和相关队列的完整访问权限。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 在
<security-settings>
项中添加一个单一的<security-setting>
项。对于match
键,若要配置为对所有地址的访问,使用数字符号 (#
) 通配符字符。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据上述配置,所有权限都授予所有队列上的 guest 角色成员。这在将匿名身份验证配置为为每个用户分配
guest
角色的开发场景非常有用。
其他资源
- 要了解有关配置更复杂的用例的信息,请参阅 第 5.3.2.1.4 节 “配置多个安全设置”。
5.3.2.1.4. 配置多个安全设置 复制链接链接已复制到粘贴板!
以下示例步骤演示了如何为匹配的一组地址单独配置多个安全设置。这与本节中前面的示例相反,它演示了如何为 所有地址授予完全访问权限
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 在
<security-settings>
项中添加一个单一的<security-setting>
项。对于match
键,请包含数字符号(#
)通配符字符,以将设置应用到匹配的 一组 地址。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow match=globalqueues.europe.#
-
代理将数字符号(
#
)通配符字符解释为"任意单词序列"。词语以句点(.
)分隔。在本例中,安全设置适用于以字符串 globalqueues.europe开头的任何地址。 permission type="createDurableQueue"
-
只有具有
admin
角色的用户才能创建或删除持久队列,绑定到以字符串 globalqueues.europe开头的地址。 permission type="createNonDurableQueue"
-
具有
admin
、guest
或europe-users
角色的任何用户都可以创建和删除绑定到以字符串 globalqueues.europe开头的地址的临时队列。 权限 type="send"
-
具有
admin
或europe-users
角色的任何用户可以发送消息到绑定至以字符串 globalqueues.europe开头的地址。 权限 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 match="globalqueues.europe.orders.#"> <permission type="send" roles="europe-users"/> <permission type="consume" roles="europe-users"/> </security-setting>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在第二个
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 管理控制台公开。
以下流程演示了如何将用户名添加到您在代理配置中手动定义的队列中。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 对于给定队列,
添加用户
密钥。分配一个值。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据上述配置,
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 及其属性和方法。
先决条件
- 您定义了用户和角色。如需更多信息,请参阅 第 5.2.2.1 节 “配置基本用户和密码身份验证”。
流程
-
打开 &
lt;broker_instance_dir> /etc/management.xml
配置文件。 搜索
role-access
元素并编辑配置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在本例中,匹配应用到具有域名
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"/>
<access method="listMessages" roles="view,update,amq"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
在本例中,匹配应用到具有域名
启动或重启代理。
-
在 Linux: &
lt;broker_instance_dir> /bin/artemis run
在 Windows: &
lt;broker_instance_dir> \bin\artemis-service.exe start
您还可以通过添加与 MBean 属性匹配的
key
属性来匹配域中的特定 MBeans。
-
在 Linux: &
5.3.2.2.1.1. 基于角色的访问控制示例 复制链接链接已复制到粘贴板!
本节演示了以下应用基于角色的访问控制的示例:
以下示例演示了如何使用 key
属性将角色映射到指定域中的所有队列。
以下示例演示了如何使用 key
属性将角色映射到特定的命名队列。在本例中,命名队列为 exampleQueue
。
以下示例演示了如何将角色映射到名称包含指定前缀的每个队列。在本例中,使用星号(*
)通配符运算符匹配所有以前缀 example 开头的队列名称。
您可能希望为同一属性的不同集合(例如,不同的队列集合)映射角色。在这种情况下,您可以在配置文件中包含多个 match
元素。但是,同一域中可以有多个匹配项。
例如,请考虑两个 < ;match&
gt; 元素,如下所示:
<match domain="org.apache.activemq.artemis" key="queue=example*">
<match domain="org.apache.activemq.artemis" key="queue=example*">
和
<match domain="org.apache.activemq.artemis" key="queue=example.sub*">
<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
元素是没有使用 role-access
或 allowlist
配置处理的每个方法调用的 catch-all 元素。default-access
和 role-access
元素具有相同的 match
元素语义。
5.3.2.2.1.2. 配置 allowlist 元素 复制链接链接已复制到粘贴板!
allowlist 是一组预先批准的域或 MBeans,不需要用户身份验证。您可以提供必须绕过身份验证的域列表或 MBeans 列表。例如,您可以使用 允许列表
指定运行 AMQ Broker 管理控制台所需的任何 MBeans。
以下示例流程演示了如何配置 allowlist
元素。
流程
-
打开 &
lt;broker_instance_dir> /etc/management.xml
配置文件。 搜索
allowlist
元素并编辑配置:<allowlist> <entry domain="hawtio"/> </allowlist>
<allowlist> <entry domain="hawtio"/> </allowlist>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,任何带有域
hawtio
的 MBean 都会被允许访问,而无需身份验证。您还可以将 <entry domain="hawtio" key="type38:3.8)"/>
的通配符条目用于 MBean 属性匹配。启动或重启代理。
-
在 Linux: &
lt;broker_instance_dir> /bin/artemis run
-
在 Windows: &
lt;broker_instance_dir> \bin\artemis-service.exe start
-
在 Linux: &
5.3.2.2.2. 在 broker.xml 文件中配置基于角色的访问控制 复制链接链接已复制到粘贴板!
您可以为 broker.xml
文件中的管理操作配置基于角色的访问控制,而不是 management.xml
文件。对 broker.xml
文件中权限的更新不需要代理重启来生效。
在 broker.xml
文件中,您可以为管理操作授予 view
或 edit
权限。特定管理操作可供具有 view
或 edit
权限的角色使用,由预定义的正则表达式控制。与正则表达式匹配的任何操作都可以被具有 查看
权限的角色访问,所有其他操作都需要 编辑权限
。
先决条件
- 您定义了用户和角色。如需更多信息,请参阅 第 5.2.2.1 节 “配置基本用户和密码身份验证”。
流程
从
management.xml
文件中删除authorisation
元素配置,以防止代理使用这个文件中的默认 RBAC 配置。-
编辑 &
lt;broker_instance_dir>/etc/management.xml
文件。 -
从文件中删除
作者
元素配置。 -
保存 &
lt;broker_instance_dir>/etc/management.xml
文件。
-
编辑 &
在 broker JVM 中添加环境变量,将代理配置为使用
broker.xml
文件中的 RBAC 配置。-
打开 &
lt;broker_instance_dir>/etc/artemis.profile
文件。 将以下参数添加到 Java 系统参数的
JAVA_ARGS 列表中
:-Djavax.management.builder.initial=org.apache.activemq.artemis.core.server.management.ArtemisRbacMBeanServerBuilder
-
保存
artemis.profile
文件。
-
打开 &
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
文件,为管理操作配置 RBAC。 搜索
security-settings
元素,再添加一个security-setting
元素来管理操作。管理操作匹配地址的格式是:
<_management-rbac-prefix_>.<_resource type_>.<_resource name_>.<_operation_>
management-rbac-prefix
参数的默认值为mops
。在以下示例中,匹配地址中的数字符号(TALM)将
admin
角色视图
和编辑权限授予
所有 MBeans。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。
管理操作的基于角色的访问控制的其他示例
以下示例将 manager
角色 view
和 edit
权限授予一个 activemq.management
地址。操作位置中的星号 rolebinding 授予对所有操作的访问权限。
<security-setting match="mops.address.activemq.management.*"> <permission type="view" roles="manager"/> </security-setting>
<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>
<security-setting match="mops.broker.forceFailover">
<permission type="edit" roles=""/>
</security-setting>
5.3.2.3. 设置资源限值 复制链接链接已复制到粘贴板!
有时,设置某些用户可以超出与授权和身份验证相关的正常安全设置之外的特定限制。
5.3.2.3.1. 配置连接和队列限制 复制链接链接已复制到粘贴板!
以下示例步骤演示了如何限制用户可以创建的连接和队列数量。
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 添加
resource-limit-settings
元素。指定max-connections
和max-queues
的值。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow max-connections
-
定义匹配用户可以在代理上创建的会话数量。默认值为
-1
,这意味着没有限制。如果要限制会话数量,请考虑从 AMQ 核心协议 JMS 客户端连接到代理的每个连接创建两个会话。 max-queues
-
定义匹配用户可以创建的队列数。默认值为
-1
,这意味着没有限制。
与您可以在代理配置的 address-setting
元素中指定的 匹配
字符串不同,您在 resource-limit-settings
中指定的匹配字符串 无法使用 通配符语法。相反,匹配字符串定义了应用资源限值设置的特定用户。