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 与红帽单点登录连接。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意-
.json
配置文件的路径必须采用/amq/extra/secrets/name-jaas-config
的格式。对于 name,指定一个字符串值。您必须使用相同的字符串值和 a-jaas-config
后缀来命名稍后在此流程中创建的 secret。 -
在示例
login.config
文件中,名为console
的域用于验证 AMQ 管理控制台用户和名为activemq
的域来验证消息传递客户端。
-
以下登录模块在示例 login.config
文件中配置。
登录模块 | 描述和使用 |
---|---|
org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule |
这是默认的登录模块,包含 |
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow _keycloak-direct-access.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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" }
{ "realm": "amq-broker-ldap", "clientId": "amq-console", "url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net" }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意-
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>
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Container Platform Web 控制台:
- 以有权在代理部署的项目中部署 CR 的用户身份登录控制台。
-
在左侧窗格中,点
。 - 点 Red Hat Integration - AMQ Broker for RHEL 9 (Multiarch) operator。
- 点 AMQ Broker 选项卡。
- 单击 ActiveMQArtemis 实例名称。
点 YAML 标签。
在控制台中,会打开 YAML 编辑器,允许您配置 CR 实例。
创建
extraMounts
属性和secrets
属性,并添加 secret 的名称。以下示例将名为custom-jaas-config
的 secret 添加到 CR 中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ActiveMQArtemis
CR 中,创建一个环境变量,其中包含 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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 hawtio 设置的更多信息,请参阅 hawtio 文档。
在
ActiveMQArtemis
CR 的spec
部分中,添加一个brokerProperties
属性,并为 LDAP 目录中配置的角色添加权限。您可以为单个地址授予角色权限。或者,您可以使用#
符号指定通配符匹配,为所有地址授予角色权限。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保存 CR。
Operator 在每个 Pod 的
/amq/extra/secrets/secret 名称
目录中挂载文件,并将代理 JVM 配置为读取挂载的login.config
文件,其中包含 SSO 配置,而不是默认的login.config
文件。