8.3. 示例:将 AMQ Broker 配置为使用 Red Hat Single Sign-On
本例演示了如何将 AMQ Broker 配置为使用 Red Hat Single Sign-On 来使用 JAAS 登录模块进行身份验证和授权。
先决条件
与 LDAP 目录集成的 Red Hat Single Sign-On 实例。
- LDAP 目录填充 AMQ Broker 的用户和角色信息。
- Red Hat Single Sign-On 配置为联合 LDAP 服务器中的用户。
- Red Hat Single Sign-On 被配置为使用 role-ldap-mapper 将角色信息从 LDAP 映射到 Red Hat Single Sign-On。
具有以下内容的 Red Hat Single Sign-On 域:
为应用程序配置了以下设置的客户端,如 AMQ 管理控制台,可以使用 oAuth 协议来获取令牌:
身份验证流程:标准流
有效的 Redirect URI:AMQ 管理控制台的 OpenShift Container Platform 路由。例如 :http://artemis-wconsj-0-svc-rte-kc-ldap-tests-0eae49.apps.redhat-412t.broker.app-services-dev.net/console/*
如果您有无法使用 oAuth 协议获取令牌的消息传递客户端应用程序,使用以下设置配置一个单独的客户端:
身份验证流:直接访问授予
有效的 Redirect URI: *
Red Hat Single Sign-On 中的每个域都包含一个名为 Broker 的客户端。这个客户端与 AMQ Broker 无关。
流程
创建名为
login.config的文本文件,并添加 JAAS 登录模块配置,以将 AMQ Broker 与红帽单点登录连接。例如:console { // ensure the operator can connect to the broker by referencing the existing properties config org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties" baseDir="/home/jboss/amq-broker/etc"; org.keycloak.adapters.jaas.BearerTokenLoginModule sufficient keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-bearer-token.json" role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal; }; activemq { org.keycloak.adapters.jaas.BearerTokenLoginModule sufficient keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-bearer-token.json" role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal; org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule sufficient keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-direct-access.json" role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal; org.apache.activemq.artemis.spi.core.security.jaas.PrincipalConversionLoginModule required principalClassList=org.keycloak.KeycloakPrincipal; };注意-
.json配置文件的路径必须采用/amq/extra/secrets/name-jaas-config的格式。对于 name,指定一个字符串值。您必须使用相同的字符串值和 a-jaas-config后缀来命名稍后在此流程中创建的 secret。 -
在示例
login.config文件中,名为console的域用于验证 AMQ 管理控制台用户和名为activemq的域来验证消息传递客户端。
以下登录模块在示例
login.config文件中配置。Expand 表 8.4. 登录模块 登录模块 描述和使用 org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule
这是默认的登录模块,包含
artemis-users.properties文件,其中包含 Operator 与代理进行身份验证的默认用户。org.keycloak.adapters.jaas.BearerTokenLoginModule
此登录模块用于应用程序,如 AMQ 管理控制台,可以使用 oAuth 协议来获取令牌。当用户在浏览器窗口中打开 AMQ 管理控制台时,它们将重定向到 Red Hat Single Sign-On 控制台,以获取 bearer 令牌。
org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule
非 HTTP 应用程序需要此登录模块,如消息传递客户端,无法使用 oAuth 协议。使用此登录模块,代理首先使用 Red Hat Single Sign-On 中配置的 secret 验证客户端,然后代表客户端获取令牌。
org.apache.activemq.artemis.spi.core.security.jaas.PrincipalConversionLoginModule
需要此登录模块将收到的 Keycloak 主体转换为 AMQ Broker 可以使用的 JAAS 主体。
注意在
login.config文件中,每个.json属性文件名都有一个下划线前缀。当 Operator 报告JaasPropertiesApplied条件的状态时,Operator 会忽略带有下划线前缀的文件。如果文件名没有下划线前缀,JaasPropertiesApplied条件的状态会永久显示OutofSync,因为代理无法识别第三方登录模块使用的属性文件。有关状态报告的详情,请参考 第 4.3.2.1 节 “使用安全自定义资源(CR)配置默认的 JAAS 登录模块”。为登录模块中引用的每个
.json属性文件创建文本文件,并配置将 AMQ Broker 连接到 Red Hat Single Sign-On 所需的详情。例如:_keycloak-bearer-token.json{ "realm": "amq-broker-ldap", "resource": "amq-console", "auth-server-url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net", "principal-attribute": "preferred_username", "use-resource-role-mappings": false, "ssl-required": "external", "confidential-port": 0 }_keycloak-direct-access.json{ "realm": "amq-broker-ldap", "resource": "amq-broker", "auth-server-url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net", "principal-attribute": "preferred_username", "use-resource-role-mappings": false, "ssl-required": "external", "credentials": { "secret": "Lfk6g1ZKlGzNT6eRkz0d1scM4M29Ohmn" } }- realm
- 配置为验证 Red Hat Single Sign-On 中的 AMQ Broker 应用程序和服务的域。
- resource
- 在 Red Hat Single Sign-On 中配置的客户端的客户端 ID。
- auth-server-url
- Red Hat Single Sign-On 服务器的基本 URL。
- principal-attribute
- 令牌属性,用于填充 UserPrincipal 名称。
- use-resource-role-mappings
- 如果设置为 true,Red Hat Single Sign-On 会在令牌中查找用户的应用程序级别的角色映射。如果为 false,它会查看用户角色映射的域级别。默认值为 false。
- ssl-required
-
确保与红帽单点登录服务器的所有通信都通过 HTTPS 进行。默认值为
external,这意味着外部请求默认需要 HTTPS。 - credentials
- 在 Red Hat Single Sign-On 中配置的一个 secret,代理使用它来登录到 Red Hat Single Sign-On,并代表客户端获取令牌。
创建名为
_keycloak-js-client.json的文本文件,并添加 AMQ 管理控制台所需的配置,以将用户重定向到 Red Hat Single Sign-On 管理控制台的 URL,在其中输入其凭证。例如:{ "realm": "amq-broker-ldap", "clientId": "amq-console", "url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net" }使用
oc create secret命令创建包含登录模块配置中引用的文件的 secret。例如:oc create secret generic sso-jaas-config --from-file=login.config --from-file=artemis-users.properties --from-file=artemis-roles.properties --from-file=_keycloak-bearer-token.json --from-file=_keycloak-direct-access.json --from-file=_keycloak-js-client.json注意-
secret 名称必须具有后缀
-jaas-config,以便 Operator 可以识别 secret 包含登录模块配置,并将任何更新传播到每个代理 Pod。 -
secret 名称必须与您在
login.config文件中指定的.json配置文件的路径中的最后一个目录名称匹配。例如,如果配置文件的路径为/amq/extra/secrets/sso-jaas-config,您必须指定一个 secret 名称sso-jaas-config。
有关如何创建 secret 的更多信息,请参阅 Kubernetes 文档中的 Secret。
-
secret 名称必须具有后缀
将您创建的 secret 添加到用于代理部署的 ActiveMQArtemis 自定义资源(CR)实例中。
使用 OpenShift 命令行界面:
- 以有权在代理部署的项目中部署 CR 的用户身份登录 OpenShift。
编辑部署的 CR。
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
使用 OpenShift Container Platform Web 控制台:
- 以有权在代理部署的项目中部署 CR 的用户身份登录控制台。
- 在左侧窗格中,点 menu:Operators[Installed Operator]。
- 点 Red Hat Integration - AMQ Broker for RHEL 9 (Multiarch) operator。
- 点 AMQ Broker 选项卡。
- 单击 ActiveMQArtemis 实例名称。
点 YAML 标签。
在控制台中,会打开 YAML 编辑器,允许您配置 CR 实例。
创建
extraMounts属性和secrets属性,并添加 secret 的名称。以下示例将名为custom-jaas-config的 secret 添加到 CR 中。deploymentPlan: ... extraMounts: secrets: - "sso-jaas-config" ...在
ActiveMQArtemisCR 中,创建一个环境变量,其中包含 AMQ 管理控制台所需的 hawtio 设置,以使用 Red Hat Single Sign-On 进行身份验证。当托管代理的 JVM 启动时,环境变量的内容作为参数传递给 Java 应用启动程序。例如:env: - name: JAVA_ARGS_APPEND value: -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.keycloakEnabled=true -Dhawtio.keycloakClientConfig=/amq/extra/secrets/sso-jaas-config/_keycloak-js-client.json -Dhawtio.authenticationEnabled=true -Dhawtio.realm=console有关 hawtio 设置的更多信息,请参阅 hawtio 文档。
在
ActiveMQArtemisCR 的spec部分中,添加一个brokerProperties属性,并为 LDAP 目录中配置的角色添加权限。您可以为单个地址授予角色权限。或者,您可以使用#符号指定通配符匹配,为所有地址授予角色权限。例如:spec: ... brokerProperties: - securityRoles.#.producers.send=true - securityRoles.#.consumers.consume=true ...保存 CR。
Operator 在每个 Pod 的
/amq/extra/secrets/secret 名称目录中挂载文件,并将代理 JVM 配置为读取挂载的login.config文件,其中包含 SSO 配置,而不是默认的login.config文件。
-