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 自动向未经身份验证的客户端授予客户端,客户机 角色将进行以下两项更改:

  1. 将新 模块选项 添加到 其他 安全域。新选项( 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>
  2. 通过删除 # 字符,取消注释 application-roles.properties 文件中的以下行。该文件位于 EAP_HOME/standalone/configuration/ 或 EAP_HOME/domain/configuration/ 中,具体取决于您是分别使用单机服务器还是域控制器。

    #guest=guest

远程客户端现在应当能够访问服务器,而无需进行身份验证。他们将获得与 guest 角色相关联的权限。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.