4.4. AMQ 管理コンソールの設定
ユーザーアクセスを設定し、ブローカーのリソースへのアクセスを要求します。
4.4.1. Red Hat Single Sign-On を使用した AMQ 管理コンソールの保護
前提条件
- Red Hat Single Sign-On 7.4
手順
Red Hat Single Sign-On の設定
-
AMQ 管理コンソールを保護するために使用する Red Hat Single Sign-On のレルムに移動します。Red Hat Single Sign-On の各レルムには、
Broker
という名前のクライアントが含まれます。このクライアントは AMQ とは関係ありません。 -
Red Hat Single Sign-On で、
artemis-console
のような新しいクライアントを作成します。 クライアント設定ページに移動し、次を設定します。
AMQ 管理コンソール URL への 有効なリダイレクト URI の後に
*
が続きます。例を以下に示します。https://broker.example.com:8161/console/*
-
Web Origins を Valid Redirect URIs と同じ値にします。Red Hat Single Sign-On では、
+
を入力できます。これは、許可される CORS オリジンに Valid Redirect URIs の値が含まれていることを示します。
-
クライアントのロールを作成します (例:
guest
)。 - AMQ Management Console へのアクセスが必要なすべてのユーザーに上記のロールが割り当てられていることを確認します (たとえば、Red Hat Single Sign-On グループを使用)。
-
AMQ 管理コンソールを保護するために使用する Red Hat Single Sign-On のレルムに移動します。Red Hat Single Sign-On の各レルムには、
AMQ Broker インスタンスを設定します。
<broker-instance-dir>/instances/broker0/etc/login.config
ファイルに以下を追加して、AMQ Management Console が 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 からのベアラートークンの要件が設定されます。次のステップで説明するように、Red Hat Single Sign-On への接続は
keycloak-bearer-token.json
ファイルで定義されます。以下の内容で
<broker-instance-dir>/etc/keycloak-bearer-token.json
ファイルを作成し、ベアラートークンの交換に使用する 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
以下の内容で
<broker-instance-dir>/etc/keycloak-js-token.json
ファイルを作成し、Red Hat Single Sign-On 認証エンドポイントを指定します。{ "realm": "<realm-name>", "clientId": "<client-name>", "url": "<RHSSO-URL>/auth" }
<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>
- AMQ Broker インスタンスを実行し、AMQ 管理コンソールの設定を検証します。
4.4.2. AMQ 管理コンソールへのユーザーアクセスの設定
ブローカーのログインクレデンシャルを使用して、AMQ 管理コンソールにアクセスできます。以下の表は、AMQ 管理コンソールにアクセスするためにブローカーユーザーを追加するさまざまな方法を説明します。
認証方法 | 説明 |
---|---|
ゲスト認証 | 匿名アクセスを有効にします。この設定では、クレデンシャルなしまたは誤ったクレデンシャルで接続するユーザーは自動的に認証され、特定のユーザーとロールが割り当てられます。 詳細は、Configuring AMQ Broker の Configuring guest access を参照してください。 |
基本的なユーザーとパスワード認証 | 各ユーザーに、ユーザー名とパスワードを定義してセキュリティーロールを割り当てる必要があります。ユーザーは、これらのクレデンシャルを使用して AMQ 管理コンソールにのみログインできます。 詳細は、Configuring AMQ Broker の Configuring basic user and password authentication を参照してください。 |
LDAP 認証 | ユーザーは、中央の X.500 ディレクトリーサーバーに保存されているユーザーデータに対してクレデンシャルをチェックして認証および認可されます。 詳細は、Configuring AMQ Broker の Configuring LDAP to authenticate clients を参照してください。 |
4.4.3. AMQ 管理コンソールへのネットワークアクセスのセキュリティー保護
コンソールが WAN またはインターネット経由でアクセスされる際に AMQ 管理コンソールのセキュリティーを保護するには、ネットワークアクセスが http
ではなく https
を使用するように SSL で指定します。
前提条件
以下は、<broker_instance_dir>/etc/
ディレクトリーに配置されている必要があります。
- Java キーストア
- Java トラストストア (クライアント認証が必要な場合のみ必要)
手順
-
<broker_instance_dir>/etc/bootstrap.xml
ファイルを開きます。 <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
- トラストストアのパスワード。このパスワードは暗号化できます。
関連情報
-
bootstrap.xml
などのブローカー設定ファイル内のパスワードの暗号化の詳細は、設定ファイル内のパスワードの暗号化 を参照してください。
4.4.4. 証明書ベースの認証を使用するように AMQ 管理コンソールを設定する
パスワードの代わりに証明書を使用してユーザーを認証するように AMQ Management Console を設定できます。
手順
信頼できる認証局からブローカーとクライアントの証明書を取得するか、自己署名証明書を生成します。自己署名証明書を生成する場合は、次の手順を実行します。
ブローカーの自己署名証明書の生成
$ 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
ブローカーキーストアから証明書をエクスポートし、クライアントと共有できるようにします。
$ keytool -storetype pkcs12 -keystore broker-keystore.p12 -storepass securepass -alias client -exportcert -rfc > broker.crt
クライアントで、ブローカー証明書をクライアントのトラストストアにインポートします。
$ keytool -storetype pkcs12 -keystore client-truststore.p12 -storepass securepass -keypass securepass -importcert -alias client-ca -file broker.crt -noprompt
クライアントで、クライアントの自己署名証明書を生成します。
$ 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
クライアント証明書をクライアント鍵ストアからファイルにエクスポートして、ブローカーのトラストストアに追加できるようにします。
$ keytool -storetype pkcs12 -keystore client-keystore.p12 -storepass securepass -alias client -exportcert -rfc > client.crt
クライアント証明書をブローカーのトラストストアにインポートします。
$ keytool -storetype pkcs12 -keystore client-truststore.p12 -storepass securepass -keypass securepass -importcert -alias client-ca -file client.crt -noprompt
注記ブローカマシンで、キーストアファイルとトラストストアファイルがブローカからアクセスできる場所にあることを確認します。
<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
クライアントが自己署名証明書を使用している場合は、クライアント証明書がインストールされているトラストストアのパスワードを指定します。
注記:クライアントが自己署名証明書を使用している場合にのみ、
trustStorePath
およびtrustStorePassword
プロパティーを設定する必要があります。
各クライアント証明書からサブジェクト 識別名 (DN) を取得して、各クライアント証明書とブローカーユーザー間のマッピングを作成できるようにします。
各クライアント証明書をクライアントのキーストアファイルから一時ファイルにエクスポートします。以下に例を示します。
keytool -export -file <file_name> -alias broker-localhost -keystore broker.ks -storepass <password>
エクスポートされた証明書の内容を出力します。
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`
ブローカーのコンソールに対して証明書ベースの認証を有効にします。
<broker_instance_dir>/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
です。
<broker_instance_dir>/etc/artemis-users.properties
ファイルを開きます。各クライアント証明書から取得したサブジェクト DNS をブローカーユーザーに追加して、クライアント証明書とブローカーユーザー間のマッピングを作成します。以下に例を示します。user1=CN=user1,O=Progress,C=US user2=CN=user2,O=Progress,C=US
この例では、user1 ブローカーユーザーは、サブジェクト識別名 CN=user1,O=Progress,C=US サブジェクト DN を持つクライアント証明書にマップされます。クライアント証明書とブローカーユーザー間のマッピングを作成すると、ブローカーは証明書を使用してユーザーを認証できます。
<broker_instance_dir>/etc/artemis-roles.properties
ファイルを開きます。<broker_instance_dir>/etc/artemis.profile
ファイルの HAWTIO_ROLE 変数に指定されているロールにユーザーを追加して、コンソールにログインする権限をユーザーに付与します。HAWTIO_ROLE 変数のデフォルト値はamq
です。以下に例を示します。amq=user1, user2
HTTPS プロトコルの次の推奨セキュリティープロパティーを設定します。
-
<broker_instance_dir>/etc/artemis.profile
ファイルを開きます。 hawtio.http.strictTransportSecurity
プロパティーを設定して、AMQ 管理コンソールへの HTTPS リクエストのみを許可し、すべての HTTP リクエストを HTTPS に変換します。以下に例を示します。hawtio.http.strictTransportSecurity = max-age=31536000; includeSubDomains; preload
hawtio.http.publicKeyPins
プロパティーを設定して、特定の暗号化公開鍵を AMQ 管理コンソールに関連付けるよう Web ブラウザーに指示し、偽造された証明書を使用した “中間者攻撃“ のリスクを減らします。以下に例を示します。hawtio.http.publicKeyPins = pin-sha256="..."; max-age=5184000; includeSubDomains
-
4.4.5. X 転送ヘッダーを処理するための AMQ 管理コンソールの設定
AMQ 管理コンソールへのリクエストがプロキシーサーバー経由でルーティングされる場合は、AMQ 管理コンソールをホスティングする AMQ Broker 組み込み Web サーバーを X-Forwarded ヘッダーを処理するように設定できます。X-Forwarded ヘッダーを処理することにより、AMQ 管理コンソールは、プロキシーがリクエストのパスに関与している場合に変更または失われるヘッダー情報を受け取ることができます。たとえば、プロキシーは HTTPS を使用して AMQ 管理コンソールを公開でき、HTTP を使用する AMQ 管理コンソールは、ブラウザーとプロキシーの間の接続が HTTPS を使用していることを X-Forwarded ヘッダーから識別し、ブラウザーのリクエストを処理するために HTTPS に切り替えることができます。
手順
-
<broker_instance_dir>/etc/bootstrap.xml
ファイルを開きます。 <web>
要素に、org.eclipse.jetty.server.ForwardedRequestCustomizer
の値を持つcustomizer
属性を追加します。以下に例を示します。<web path="web" customizer="org.eclipse.jetty.server.ForwardedRequestCustomizer"> .. </web>
-
bootstrap.xml
ファイルを保存します。 次のコマンドを入力して、ブローカーを起動または再起動します。
-
Linux の場合:
<broker_instance_dir>/bin/artemis run
-
Windows の場合:
<broker_instance_dir>\bin\artemis-service.exe start
-
Linux の場合: