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 域,它有:
使用以下设置配置的应用程序(如 AMQ 管理控制台)的客户端,可以使用 oAuth 协议获取令牌:
身份验证流程:标准流
有效的 Redirect URI:AMQ Management Console 的 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 与 Red Hat Single Sign-On 连接。例如: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
的格式。对于 名称,请指定字符串值。您必须使用相同的字符串值和-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
属性文件名都有一个下划线前缀。当报告 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 名称的 token 属性。
- use-resource-role-mappings
- 如果设置为 true,Red Hat Single Sign-On 会在令牌中查找用户的应用程序级别角色映射。如果为 false,它会查看用户角色映射的域级别。默认值为 false。
- ssl-required
-
确保与 Red Hat Single Sign-On 服务器与和来自 Red Hat Single Sign-On 服务器的所有通信都是通过 HTTPS。默认值为
外部
,这意味着外部请求默认需要 HTTPS。 - credentials
- 在 Red Hat Single Sign-On 中配置的 secret,代理用来登录到 Red Hat Single Sign-On,并代表客户端获取令牌。
创建名为
_keycloak-js-client.json
的文本文件,并添加 AMQ 管理控制台所需的配置,将用户重定向到 Red Hat Single Sign-On Admin Console 的 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 的用户登录到控制台。
-
在左侧窗格中,点
。 - 点 Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) operator。
- 点 AMQ Broker 选项卡。
- 单击 ActiveMQArtemis 实例名称的名称。
点 YAML 标签。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
创建一个
extraMounts
属性和secrets
属性,并添加 secret 的名称。以下示例将名为custom-jaas-config
的 secret 添加到 CR 中。deploymentPlan: ... extraMounts: secrets: - "sso-jaas-config" ...
在
ActiveMQArtemis
CR 中,创建一个环境变量,其中包含 AMQ 管理控制台使用 Red Hat Single Sign-On 进行身份验证所需的 hawtio 设置。当托管代理的 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 文档。
在
ActiveMQArtemis
CR 的spec
部分中,添加一个brokerProperties
属性,并为 LDAP 目录中配置的角色添加权限。您可以为单个地址授予角色权限。或者,您可以使用#
符号指定通配符匹配,为所有地址授予角色权限。例如:spec: ... brokerProperties: - securityRoles.#.producers.send=true - securityRoles.#.consumers.consume=true ...
保存 CR。
Operator 在每个 Pod 上的
/amq/extra/secrets/secret 名称目录中挂载 secret
中的文件,并将代理 JVM 配置为读取挂载的login.config
文件,该文件包含 SSO 配置,而不是默认的login.config
文件。