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. 进入客户端设置页面并设置:

      • 对 AMQ 管理控制台 URL 的有效 Redirect URI 后跟 *,例如:

        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 主体,以及来自 Red Hat Single Sign-On 的 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 角色的用户消耗消息并允许具有 客户机 角色发送消息的用户,请添加以下内容:

               <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 管理控制台的不同方法的信息:

表 4.1. 授予用户对 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 条目是主题 DN。用于输入主题 DN 的格式取决于您的平台。以上字符串也可以表示为;

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

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

      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.config 文件中的 -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 来提供浏览器请求。

流程

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

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

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.