4.4. 配置 AMQ 管理控制台


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

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

先决条件

  • Red Hat Single Sign-On 7.4

流程

  1. 配置红帽单点登录:

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

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

        https://broker.example.com:8161/console/*
      • Web Origin 的值与 有效的重定向 URI 相同。Red Hat Single Sign-On 允许您输入 +,表示允许 CORS origins 包含 有效的重定向 URI 的值。
    4. 为客户端创建一个角色,如 guest
    5. 确保所有需要访问 AMQ 管理控制台的用户都被分配了上述角色,例如,使用红帽单点登录组。
  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
          ;
      };

      添加此配置会设置 Inventories 主体和来自 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 令牌交换的红帽单点登录:

      {
        "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 Management 控制台的不同方法的信息:

身份验证方法描述

虚拟机验证

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

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

基本用户和密码身份验证

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

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

LDAP 身份验证

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

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

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>
    ...
    绑定 uri
    指定启用 SSL 的 https 协议并添加主机名和端口。
    keystorePath
    安装代理证书的密钥存储的路径。
    keystorePassword
    安装代理证书的密钥存储的密码。
    ClientAuth
    设置为 true 以要求当客户端尝试连接到代理控制台时,每个客户端都提供证书。
    trustStorePath
    如果客户端使用自签名证书,请指定安装客户端证书的信任存储的路径。
    trustStorePassword

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

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

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

    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/login.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 代理用户映射到具有对象区分名称 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 变量的默认值为 mq。例如:

      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
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.