4.4. 配置 AMQ 管理控制台


配置用户访问和请求对代理上资源的访问权限。

4.4.1. 使用红帽单点登录保护 AMQ 管理控制台

先决条件

  • Red Hat Single Sign-On 7.4

流程

  1. 配置 Red Hat Single Sign-On:

    1. 导航到您要用来保护 AMQ 管理控制台的 Red Hat Single Sign-On 中的域。Red Hat Single Sign-On 中的每个域都包括一个名为 Broker 的客户端。此客户端与 AMQ 无关。
    2. 在 Red Hat Single Sign-On 中创建一个新客户端,如 artemis-console
    3. 进入客户端设置页面并设置:

      • 有效的重定向 URI 到 AMQ 管理控制台 URL,后跟 192.168.1.0/24,例如:

        https://broker.example.com:8161/console/*
      • Web OriginsValid Redirect URI 的值相同。Red Hat Single Sign-On 允许您输入 +,这表示允许的 CORS 源包含 Valid Redirect URI 的值。
    4. 为客户端创建一个角色,如 guest
    5. 确保需要访问 AMQ 管理控制台的所有用户都被分配了上述角色,例如使用 Red Hat Single Sign-On 组。
  2. 配置 AMQ Broker 实例:

    1. 将以下内容添加到 < broker-instance-dir&gt; /instances/broker0/etc/login.config 文件中,将 AMQ 管理控制台配置为使用 Red Hat Single Sign-On:

      console {
          org.keycloak.adapters.jaas.BearerTokenLoginModule required
              keycloak-config-file="${artemis.instance}/etc/keycloak-bearer-token.json"
              role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal
          ;
      };

      添加此配置设置 JAAS 主体,以及来自红帽单点登录的 bearer 令牌的要求。与 Red Hat Single Sign-On 的连接在 keycloak-bearer-token.json 文件中定义,如下一步所述。

    2. 创建包含以下内容的 &lt ;broker-instance-dir> /etc/keycloak-bearer-token.json 文件,以指定与用于 bearer 令牌交换的 Red Hat Single Sign-On 的连接:

      {
        "realm": "<realm-name>",
        "resource": "<client-name>",
        "auth-server-url": "<RHSSO-URL>/auth",
        "principal-attribute": "preferred_username",
        "use-resource-role-mappings": true,
        "ssl-required": "external",
        "confidential-port": 0
      }
      <realm-name>
      Red Hat Single Sign-On 中的域名
      <client-name>
      Red Hat Single Sign-On 中的客户端名称
      <RHSSO-URL>
      Red Hat Single Sign-On 的 URL
    3. 创建包含以下内容的 &lt ;broker-instance-dir> /etc/keycloak-js-token.json 文件,以指定 Red Hat Single Sign-On 身份验证端点:

      {
        "realm": "<realm-name>",
        "clientId": "<client-name>",
        "url": "<RHSSO-URL>/auth"
      }
    4. 通过编辑 < broker-instance-dir> /etc/broker.xml 文件来配置 安全设置。

      例如,要允许具有 amq 角色的用户使用消息并允许具有 guest 角色的用户发送消息,请添加以下内容:

               <security-setting match="Info">
                  <permission roles="amq" type="createDurableQueue"/>
                  <permission roles="amq" type="deleteDurableQueue"/>
                  <permission roles="amq" type="createNonDurableQueue"/>
                  <permission roles="amq" type="deleteNonDurableQueue"/>
                  <permission roles="guest" type="send"/>
                  <permission roles="amq" type="consume"/>
               </security-setting>
  3. 运行 AMQ Broker 实例并验证 AMQ 管理控制台配置。

4.4.2. 设置用户对 AMQ 管理控制台的访问权限

您可以使用代理登录凭证访问 AMQ 管理控制台。下表提供了有关添加额外代理用户访问 AMQ 管理控制台的不同方法的信息:

身份验证方法描述

客户端验证

启用匿名访问。在此配置中,任何在没有凭证或带有错误凭证的情况下连接的用户都会被自动进行身份验证,并为特定的用户和角色进行身份验证。

如需更多信息, 请参阅配置 AMQ Broker 中的 配置 客户机访问

基本用户和密码身份验证

对于每个用户,您必须定义一个用户名和密码,并分配安全角色。用户只能使用这些凭证登录 AMQ 管理控制台。

如需更多信息, 请参阅配置 AMQ Broker 中的 配置基本用户和密码身份验证

LDAP 身份验证

用户通过针对存储在中央 X.500 目录服务器中的用户数据检查凭据来进行身份验证和授权。

如需更多信息, 请参阅配置 AMQ Broker 中的配置 LDAP 以验证客户端

4.4.3. 保护对 AMQ 管理控制台的网络访问

要在通过 WAN 或互联网访问控制台时保护 AMQ 管理控制台,请使用 SSL 指定网络访问使用 https 而不是 http

先决条件

以下命令位于 < broker_instance_dir>/etc/ 目录中:

  • Java 密钥存储
  • Java 信任存储(只有在您需要客户端身份验证时才需要)

流程

  1. 打开 & lt;broker_instance_dir&gt; /etc/bootstrap.xml 文件。
  2. 在 & lt;web > 元素中,添加以下属性:

    <web path="web">
        <binding uri="https://0.0.0.0:8161" keyStorePath="<path_to_keystore>" keyStorePassword="<password>"
        clientAuth="<true/false>" trustStorePath="<path_to_truststore>" trustStorePassword="<password>">
        </binding>
    </web>
    bind
    对于到控制台的安全连接,请将 URI 方案更改为 https
    keyStorePath

    密钥存储文件的路径。例如:

    keyStorePath="<broker_instance_dir>/etc/keystore.jks"
    keyStorePassword
    密钥存储密码。此密码可以被加密。
    clientAuth
    指定是否需要客户端身份验证。默认值为 false
    trustStorePath
    信任存储文件的路径。只有在 clientAuth 设为 true 时,才需要定义此属性。
    trustStorePassword
    信任存储密码。此密码可以被加密。

其他资源

4.4.4. 配置 AMQ 管理控制台以使用基于证书的身份验证

您可以配置 AMQ 管理控制台,以使用证书而不是密码来验证用户。

流程

  1. 从可信证书颁发机构获取代理和客户端的证书,或生成自签名证书。如果要生成自签名证书,请完成以下步骤:

    1. 为代理生成自签名证书。

      $ keytool -storetype pkcs12 -keystore broker-keystore.p12 -storepass securepass -keypass securepass -alias client -genkey -keyalg "RSA" -keysize 2048 -dname "CN=ActiveMQ Broker, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -ext bc=ca:false -ext eku=cA
    2. 从代理密钥存储导出证书,使其可以与客户端共享。

      $ keytool -storetype pkcs12 -keystore broker-keystore.p12 -storepass securepass -alias client -exportcert -rfc > broker.crt
    3. 在客户端上,将代理证书导入到客户端信任存储中。

      $ keytool -storetype pkcs12 -keystore client-truststore.p12 -storepass securepass -keypass securepass -importcert -alias client-ca -file broker.crt -noprompt
    4. 在客户端上,为客户端生成自签名证书。

      $ keytool -storetype pkcs12 -keystore client-keystore.p12 -storepass securepass -keypass securepass -alias client -genkey -keyalg "RSA" -keysize 2048 -dname "CN=ActiveMQ Client, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -ext bc=ca:false -ext eku=cA
    5. 将客户端证书从客户端密钥存储导出到文件,以便可以将其添加到代理信任存储中。

      $ keytool -storetype pkcs12 -keystore client-keystore.p12 -storepass securepass -alias client -exportcert -rfc > client.crt
    6. 将客户端证书导入到代理信任存储中。

      $ keytool -storetype pkcs12 -keystore client-truststore.p12 -storepass securepass -keypass securepass -importcert -alias client-ca -file client.crt -noprompt
      注意

      在代理机器上,确保密钥存储和信任存储文件位于代理可访问的位置。

  2. 在 & lt;broker_instance_dir>/etc/bootstrap.xml 文件中,更新 Web 配置来为代理控制台启用 HTTPS 协议和客户端身份验证。例如:

    ...
    <web path="web">
        <binding uri="https://localhost:8161" keyStorePath="${artemis.instance}/etc/server-keystore.p12" keyStorePassword="password"
        clientAuth="true" trustStorePath="${artemis.instance}/etc/client-truststore.p12" trustStorePassword="password">
        ...
        </binding>
    </web>
    ...
    binding uri
    指定 https 协议来启用 SSL 并添加主机名和端口。
    keystorePath
    安装代理证书的密钥存储的路径。
    keystorePassword
    安装代理证书的密钥存储的密码。
    clientAuth
    设置为 true,将代理配置为要求每个客户端在客户端尝试连接到代理控制台时提供证书。
    trustStorePath
    如果客户端使用自签名证书,请指定安装客户端证书的信任存储的路径。
    trustStorePassword

    如果客户端使用自签名证书,请指定安装客户端证书的信任存储的密码。

    备注。只有在客户端使用自签名证书时,才需要配置 trustStorePathtrustStorePassword 属性。

  3. 从每个客户端证书获取 Subject Distinguished Names (DN),以便您可以在每个客户端证书和代理用户之间创建映射。

    1. 将客户端密钥存储文件中的每个客户端证书导出到临时文件中。例如:

      keytool -export -file <file_name> -alias broker-localhost -keystore broker.ks -storepass <password>
    2. 显示导出的证书的内容:

      keytool -printcert -file <file_name>

      输出结果类似如下:

      Owner: CN=AMQ Client, OU=Artemis, O=AMQ, L=AMQ, ST=AMQ, C=AMQ
      Issuer: CN=AMQ Client, OU=Artemis, O=AMQ, L=AMQ, ST=AMQ, C=AMQ
      Serial number: 51461f5d
      Valid from: Sun Apr 17 12:20:14 IST 2022 until: Sat Jul 16 12:20:14 IST 2022
      Certificate fingerprints:
      	 SHA1: EC:94:13:16:04:93:57:4F:FD:CA:AD:D8:32:68:A4:13:CC:EA:7A:67
      	 SHA256: 85:7F:D5:4A:69:80:3B:5B:86:27:99:A7:97:B8:E4:E8:7D:6F:D1:53:08:D8:7A:BA:A7:0A:7A:96:F3:6B:98:81

      Owner 条目是 Subject DN。用于输入 Subject DN 的格式取决于您的平台。以上字符串也可以表示:

      Owner: `CN=localhost,\ OU=broker,\ O=Unknown,\ L=Unknown,\ ST=Unknown,\ C=Unknown`
  4. 为代理控制台启用基于证书的验证。

    1. 打开 & lt;broker_instance_dir&gt; /etc/login.config 配置文件。添加证书登录模块并引用用户和角色属性文件。例如:

      activemq {
          org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule
              debug=true
              org.apache.activemq.jaas.textfiledn.user="artemis-users.properties"
              org.apache.activemq.jaas.textfiledn.role="artemis-roles.properties";
      };
      org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule
      实施类。
      org.apache.activemq.jaas.textfiledn.user
      指定相对于包含登录配置文件的目录的用户属性文件的位置。
      org.apache.activemq.jaas.textfiledn.role

      指定将用户映射到为登录模块实施定义的角色的属性文件。

      注意

      如果您更改了 < broker_instance_dir>/etc/login.config 文件中的证书登录模块配置的默认名称,您必须更新 < broker_instance_dir>/etc/artemis.profile 文件中的 -dhawtio. realm 参数的值,以匹配新名称。默认名称为 activemq

    2. 打开 & lt;broker_instance_dir>/etc/artemis-users.properties 文件。通过将从每个客户端证书获取的 Subject DNS 添加到代理用户,创建客户端证书和代理用户之间的映射。例如:

      user1=CN=user1,O=Progress,C=US
      user2=CN=user2,O=Progress,C=US

      在本例中,user1 代理用户映射到具有 Subject Distinguished Name 为 CN=user1,O=Progress,C=US Subject DN 的客户端证书。在客户端证书和代理用户之间创建映射后,代理可以使用证书来验证用户。

    3. 打开 & lt;broker_instance_dir>/etc/artemis-roles.properties 文件。通过将用户权限添加到为 < broker_instance_dir>/etc/artemis.profile 文件中 HAWTIO_ROLE 变量指定的角色中,授予用户登录控制台的权限。HAWTIO_ROLE 变量的默认值为 amq。例如:

      amq=user1, user2
  5. 为 HTTPS 协议配置以下推荐的安全属性。

    1. 打开 & lt;broker_instance_dir>/etc/artemis.profile 文件。
    2. 设置 hawtio.http.strictTransportSecurity 属性,仅允许 HTTPS 请求到 AMQ 管理控制台,并将任何 HTTP 请求转换为 HTTPS。例如:

      hawtio.http.strictTransportSecurity = max-age=31536000; includeSubDomains; preload
    3. 设置 hawtio.http.publicKeyPins 属性,以指示 Web 浏览器将特定的加密密钥与 AMQ 管理控制台关联,以减少使用伪证书的"man-in-the-middle"攻击的风险。例如:

      hawtio.http.publicKeyPins = pin-sha256="..."; max-age=5184000; includeSubDomains

4.4.5. 配置 AMQ 管理控制台以处理 X 转发的标头

如果对 AMQ 管理控制台的请求通过代理服务器路由,您可以配置 AMQ Broker 嵌入式 Web 服务器(托管 AMQ 管理控制台)来处理 X-Forwarded 标头。通过处理 X-Forwarded 标头,AMQ 管理控制台可以接收当涉及请求路径时更改或丢失的标头信息。例如,代理可以使用 HTTPS 公开 AMQ 管理控制台,而使用 HTTP 的 AMQ 管理控制台可以从 X-Forwarded 标头中识别浏览器和代理之间的连接使用 HTTPS 并切换到 HTTPS 来提供浏览器请求。

流程

  1. 打开 & lt;broker_instance_dir&gt; /etc/bootstrap.xml 文件。
  2. 在 & lt;web > 元素中,使用 org.eclipse.jetty.server.ForwardedRequestCustomizer 的值添加 customizer 属性。例如:

    <web path="web" customizer="org.eclipse.jetty.server.ForwardedRequestCustomizer">
    ..
    </web>
  3. 保存 bootstrap.xml 文件。
  4. 输入以下命令启动或重启代理:

    • On Linux: <broker_instance_dir>/bin/artemis run
    • 在 Windows 上: <broker_instance_dir&gt; \bin\artemis-service.exe start
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.