5.6. 指定安全管理器
代理使用一个名为安全管理器的组件来处理身份验证和授权。
AMQ Broker 包括两个安全管理器:
-
ActiveMQJAASSecurityManager
安全管理器。此安全管理器提供与 JAAS 和 Red Hat JBoss Enterprise Application Platform (JBoss EAP)安全性的集成。这是 AMQ Broker 使用的默认安全管理器。 -
ActiveMQBasicSecurityManager
安全管理器。这个基本安全管理器不支持 JAAS。相反,它支持通过用户名和密码凭证进行身份验证和授权。此安全管理器支持使用管理 API 添加、删除和更新用户。所有用户和角色数据都存储在代理绑定日志中。这意味着,对实时代理所做的任何更改都可用于其备份代理。
作为包含的安全管理器的替代选择,系统管理员可能需要更好地控制代理安全性的实施。在这种情况下,也可以在代理配置中指定 自定义 安全管理器。自定义安全管理器是一个用户定义的类,它实现了 org.apache.activemq.artemis.spi.core.security.ActiveMQSecurityManager5
接口。
以下子部分中的示例演示了如何配置代理来使用:
- 基本安全管理器而不是默认的 JAAS 安全管理器
- 自定义安全管理器
5.6.1. 使用基本安全管理器
除了默认的 ActiveMQJAASSecurityManager
安全管理器外,AMQ Broker 还包含 ActiveMQBasicSecurityManager
安全管理器。
当您使用基本安全管理器时,所有用户和角色数据存储在绑定日志中(如果使用 JDBC 持久性,则绑定 表 )。因此,如果您配置了 live-backup 代理组,您在实时代理上执行的任何用户管理都会在故障切换时自动反映在备份代理中。这可避免单独管理 LDAP 服务器,这是实现此行为的替代方法。
在配置和使用基本安全管理器前,请注意以下几点:
- 基本安全管理器不像默认的 JAAS 安全管理器一样可插拔。
- 基本安全管理器不支持 JAAS。相反,它只支持通过用户名和密码凭证进行身份验证和授权。
-
AMQ 管理控制台需要 JAAS。因此,如果您使用基本的安全管理器并希望使用控制台,您还需要配置
login.config
配置文件以进行用户和密码身份验证。有关配置用户和密码验证的详情,请参考 第 5.2.2.1 节 “配置基本用户和密码身份验证”。 - 在 AMQ Broker 中,用户管理由代理管理 API 提供。此管理包括添加、列出、更新和删除用户及角色。您可以使用 JMX、管理消息、HTTP (使用 Jolokia 或 AMQ 管理控制台)和 AMQ Broker 命令行界面来执行这些功能。由于代理直接存储此数据,因此代理必须正在运行才能管理用户。无法手动修改绑定数据。
- 任何通过 HTTP 的管理访问(例如,使用 Jolokia 或 AMQ 管理控制台)都由 console JAAS 登录模块处理。通过 JConsole 或其他远程 JMX 工具进行 MBean 访问是由基本安全管理器处理的。管理消息由基本安全管理器处理。
5.6.1.1. 配置基本安全管理器
以下流程演示了如何将代理配置为使用基本安全管理器。
流程
-
打开 &
lt;broker-instance-dir> /etc/boostrap.xml
配置文件。 在
security-manager
元素中,对于class-name
属性,指定完整的ActiveMQBasicSecurityManager
类名称。<broker xmlns="http://activemq.org/schema"> ... <security-manager class-name="org.apache.activemq.artemis.spi.core.security.ActiveMQBasicSecurityManager"> </security-manager> ... </broker>
因为您无法手动修改包含用户和角色数据的绑定数据,并且由于代理必须正在运行来管理用户,因此建议在第一次引导时保护代理的安全。要达到此目的,请定义一个 bootstrap 用户,其凭据可用于添加其他用户。
在
security-manager
元素中,添加bootstrapUser
、bootstrapPassword
和bootstrapRole
属性并指定值。例如:<broker xmlns="http://activemq.org/schema"> ... <security-manager class-name="org.apache.activemq.artemis.spi.core.security.ActiveMQBasicSecurityManager"> <property key="bootstrapUser" value="myUser"/> <property key="bootstrapPassword" value="myPass"/> <property key="bootstrapRole" value="myRole"/> </security-manager> ... </broker>
bootstrapUser
- bootstrap 用户的名称。
bootstrapPassword
- boostrap 用户的 Passsword。您还可以指定加密的密码。
bootstrapRole
boostrap 用户的角色。
注意如果您在配置中为 bootstrap 用户定义前面的属性,则每次启动代理时都会设置这些凭证,无论代理运行时所做的任何更改是什么。
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 在
broker.xml
配置文件中,找到为activemq.management#
地址匹配默认定义的address-setting
元素。这些默认地址设置如下所示。<address-setting match="activemq.management#"> <dead-letter-address>DLQ</dead-letter-address> <expiry-address>ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <!--...--> <max-size-bytes>-1</max-size-bytes> <message-counter-history-day-limit>10</message-counter-history-day-limit> <address-full-policy>PAGE</address-full-policy> <auto-create-queues>true</auto-create-queues> <auto-create-addresses>true</auto-create-addresses> <auto-create-jms-queues>true</auto-create-jms-queues> <auto-create-jms-topics>true</auto-create-jms-topics> </address-setting>
在为
activemq.management#
地址匹配的地址设置中,对于您在此流程前面指定的 bootstrap 角色名称,添加以下所需的权限:-
createNonDurableQueue
-
createAddress
-
消耗
-
管理
-
send
例如:
<address-setting match="activemq.management#"> ... <permission type="createNonDurableQueue" roles="myRole"/> <permission type="createAddress" roles="myRole"/> <permission type="consume" roles="myRole"/> <permission type="manage" roles="myRole"/> <permission type="send" roles="myRole"/> </address-setting>
-
其他资源
-
如需有关
ActiveMQBasicSecurityManager
类的更多信息,请参阅 ActiveMQ Artemis Core API 文档中的 Class ActiveMQBasicSecurityManager。 - 要了解如何在配置文件中加密密码,请参阅 第 5.9 节 “在配置文件中加密密码”。
5.6.2. 指定自定义安全管理器
以下流程演示了如何在代理配置中指定自定义安全管理器。
流程
-
打开 &
lt;broker_instance_dir> /etc/boostrap.xml
配置文件。 在
security-manager
元素中,对于class-name
属性,指定org.apache.activemq.artemis.spi.core.security.security.ActiveMQSecurityManager5
接口的用户定义的实现。例如:<broker xmlns="http://activemq.org/schema"> ... <security-manager class-name="com.myclass.MySecurityManager"> <property key="myKey1" value="myValue1"/> <property key="myKey2" value="myValue2"/> </security-manager> ... </broker>
其他资源
-
有关
ActiveMQSecurityManager5
接口的更多信息,请参阅 ActiveMQ Artemis Core API 文档中的 Interface ActiveMQSecurityManager5。
5.6.3. 运行自定义安全管理器示例程序
AMQ Broker 包括一个示例程序,演示了如何实现自定义安全管理器。在示例中,自定义安全管理器记录身份验证和授权的详细信息,然后将详细信息传递给 ActiveMQJAASSecurityManager
实例(即默认安全管理器)。
以下流程演示了如何运行自定义安全管理器示例程序。
先决条件
- 必须设置您的机器才能运行 AMQ Broker 示例程序。如需更多信息,请参阅 运行 AMQ Broker 示例。
流程
导航到包含自定义安全管理器示例的目录。
$ cd <install_dir>/examples/features/standard/security-manager
运行示例。
$ mvn verify
如果您希望在运行示例程序时手动创建并启动代理实例,请将上一步中的命令替换为 mvn -PnoServer verify
。
其他资源
-
如需有关
ActiveMQJAASSecurityManager
类的更多信息,请参阅 ActiveMQ Artemis Core API 文档中的 Class ActiveMQJAASSecurityManager。