7.2. 保护目标
除了保护远程连接到消息传递服务器外,您还可以配置特定目的地的安全性。这可以通过使用 security-setting
配置元素添加安全约束来实现。JBoss EAP 消息传递默认配置有 security-setting
,如以下管理 CLI 命令的输出所示:
/subsystem=messaging-activemq/server=default:read-resource(recursive=true) { "outcome" => "success", "result" => { .... "security-setting" => {"#" => {"role" => {"guest" => { "consume" => true, "create-durable-queue" => false, "create-non-durable-queue" => true, "delete-durable-queue" => false, "delete-non-durable-queue" => true, "manage" => false, "send" => true }}}} } }
security-setting
选项在 name
字段中使用通配符来处理要应用安全性约束的目的地。单个 #
的值将匹配任何地址。有关在安全约束中使用通配符的更多信息,请参阅基于角色的安全性。
7.2.1. 地址基于角色的安全性
JBoss EAP 消息传递包含一种灵活的基于角色的安全模型,用于根据队列的地址将安全性应用到队列中。
核心 JBoss EAP 消息传递服务器主要由绑定至地址的队列集组成。将消息发送到地址时,服务器首先查找绑定到该地址的一组队列,然后将消息路由到绑定队列。
JBoss EAP 消息传递具有一组权限,可以根据队列的地址对其应用。可以使用地址上的完全字符串匹配,也可以使用通配符字符 #
和 *
。有关如何使用通配符语法的更多信息,请参阅地址设置。
您可以为每个 security-setting
创建多个角色,并且有 7 个权限设置可应用于角色。以下是可用权限的完整列表:
-
create-durable-queue
允许角色在匹配的地址下创建持久队列。 -
delete-durable-queue
允许角色删除匹配地址下的持久队列。 -
create-non-durable-queue
允许角色在匹配地址下创建不可处理队列。 -
delete-non-durable-queue
允许角色删除匹配地址下的不可解析队列。 -
send
允许角色发送消息到匹配的地址。 -
使用
时,该角色可以使用绑定到匹配地址的队列中的消息。 -
管理
允许角色通过发送管理消息到管理地址来调用管理操作。
配置基于角色的安全性
要开始将基于角色的安全性用于 security-setting
,您必须首先创建一个:例如,下方创建了一个 security-setting
of news.europe.#
。它适用于从 news.europe 开始的任何目的地,
如 news.europe.fr 或
news.europe.tech.uk
。
/subsystem=messaging-activemq/server=default/security-setting=news.europe.#:add() {"outcome" => "success"}
接下来,您要将角色添加到您创建的 security-setting
中并为它声明权限。在以下示例中,创建 dev
角色并授予使用和发送到队列的权限,以及创建和删除不可调度队列的权限。由于默认值为 false
,因此您必须仅告知 JBoss EAP 要打开的权限。
/subsystem=messaging-activemq/server=default/security-setting=news.europe.#/role=dev:add(consume=true,delete-non-durable-queue=true,create-non-durable-queue=true,send=true) {"outcome" => "success"}
为了进一步说明权限的使用,以下示例创建了 管理员
角色,并允许它通过切换管理权限来发送 管理
消息。另外,也会切换和删除持久队列的权限:
/subsystem=messaging-activemq/server=default/security-setting=news.europe.#/role=admin:add(manage=true,create-durable-queue=true,delete-durable-queue=true) {"outcome" => "success"}
若要确认 security-setting
的配置,可使用管理 CLI。记得使用 recursive=true
选项来完全显示权限:
/subsystem=messaging-activemq/server=default:read-children-resources(child-type=security-setting,recursive=true) { "outcome" => "success", "result" => { "#" => {"role" => {"guest" => { "consume" => true, "create-durable-queue" => false, "create-non-durable-queue" => true, "delete-durable-queue" => false, "delete-non-durable-queue" => true, "manage" => false, "send" => true }}}, "news.europe.#" => {"role" => { "dev" => { "consume" => true, "create-durable-queue" => false, "create-non-durable-queue" => true, "delete-durable-queue" => false, "delete-non-durable-queue" => true, "manage" => false, "send" => true }, "admin" => { "consume" => false, "create-durable-queue" => true, "create-non-durable-queue" => false, "delete-durable-queue" => true, "delete-non-durable-queue" => false, "manage" => true, "send" => false } }} }
上面,管理 CLI 完全 显示以字符串 news.europe
. 开头的地址的权限。总之,只有具备 admin 角色的用户
才能创建或删除持久队列,而只有具有 dev
角色的用户才能创建或删除不可覆盖的队列。此外,具有 dev 角色的用户
可以发送或消耗消息,但 管理员用户
不能。但是,他们可以发送管理消息,因为其 管理
权限已设为 true
。
如果多个匹配项适用于一组地址,则更具体的匹配项具有优先权。例如,地址 news.europe.tech.uk.#
比 news.europe.tech.#
更具体。由于不会继承权限,因此您可以通过不指定权限来有效地拒绝更具体的 security-setting
块中的权限。否则,将无法拒绝地址子组的权限。
用户之间的映射和他们拥有的角色之间的映射由安全管理器处理。JBoss EAP 附带了一个用户经理,从磁盘上的文件读取用户凭据,也可插入 JAAS 或 JBoss EAP 安全性。
有关配置安全管理器的更多信息,请参阅 JBoss EAP 安全架构指南。
7.2.1.1. 使用传统安全子系统授予未经身份验证的客户端角色
如果您希望 JBoss EAP 自动向未经身份验证的客户端授予客户端,客户机
角色将进行以下两项更改:
将新
模块选项
添加到其他
安全域。新选项(unauthenticatedIdentity
)将告知 JBoss EAP 向未经身份验证的客户端授予guest
访问权限。推荐的做法是使用管理 CLI:/subsystem=security/security-domain=other/authentication=classic/login-module=RealmDirect:map-put(name=module-options,key=unauthenticatedIdentity,value=guest) { "outcome" => "success", "response-headers" => { "operation-requires-reload" => true, "process-state" => "reload-required" } }
请注意,在发出 命令后,服务器需要重新加载。您可以使用以下管理 CLI 命令确认新选项:
/subsystem=security/security-domain=other/authentication=classic/login-module=RealmDirect:read-resource() { "outcome" => "success", "result" => { "code" => "RealmDirect", "flag" => "required", "module" => undefined, "module-options" => { "password-stacking" => "useFirstPass", "unauthenticatedIdentity" => "guest" } } }
另外,在执行该命令后,您的服务器配置文件应类似如下:
<subsystem xmlns="urn:jboss:domain:security:2.0"> <security-domains> <security-domain name="other" cache-type="default"> <authentication> ... <login-module code="RealmDirect" flag="required"> ... <module-option name="unauthenticatedIdentity" value="guest"/> ... </login-module> ... </authentication> </security-domain> ... </security-domains> </subsystem>
通过删除
#
字符,取消注释application-roles.properties
文件中的以下行。该文件位于EAP_HOME/standalone/configuration/ 或
EAP_HOME/domain/configuration/
中,具体取决于您是分别使用单机服务器还是域控制器。#guest=guest
远程客户端现在应当能够访问服务器,而无需进行身份验证。他们将获得与 guest
角色相关联的权限。