第7章 セキュリティーの設定
7.1. リモート接続のセキュリティー保護 リンクのコピーリンクがクリップボードにコピーされました!
7.1.1. レガシーセキュリティーサブシステムの使用 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP でレガシー security サブシステムを使用して、messaging-activemq サブシステムをセキュアにできます。レガシー security サブシステムはレガシーセキュリティーレルムおよびドメインを使用します。セキュリティーレルム および セキュリティードメイン に関する詳細は、JBoss EAPセキュリティーアーキテクチャーガイドを参照してください。messaging-activemq サブシステムは、ApplicationRealm という名前のセキュリティーレルムと other という名前のセキュリティードメインを使用するよう事前設定されています。
レガシー security サブシステムのアプローチは、JBoss EAP 7.0 のデフォルト設定です。
ApplicationRealm は、設定ファイルの最上部付近で定義されます。
この名前が示すように、ApplicationRealm は messaging-activemq、undertow、ejb3 サブシステムなどの JBoss EAP のすべてのアプリケーション中心のサブシステムに対するデフォルトのセキュリティーレルムです。ApplicationRealm は、ローカルファイルシステムを使用して、ユーザー名とハッシュ化されたパスワードを保存します。便宜上、JBoss EAP には ApplicationRealm にユーザーを追加するために使用できるスクリプトが含まれています。詳細は、JBoss EAPHow To Configure Server Securityの Default User Configuration を参照してください。
other セキュリティードメインは、messaging-activemq などのアプリケーション関連のサブシステムに対するデフォルトのセキュリティードメインです。これは設定で明示的に宣言されるものではありませんが、以下の管理 CLI コマンドを使用すると、messaging-activemq サブシステムで使用されるセキュリティードメインを確認することができます。
/subsystem=messaging-activemq/server=default:read-attribute(name=security-domain)
{
"outcome" => "success",
"result" => "other"
}
/subsystem=messaging-activemq/server=default:read-attribute(name=security-domain)
{
"outcome" => "success",
"result" => "other"
}
また、使用するセキュリティードメインを更新することもできます。
/subsystem=messaging-activemq/server=default:write-attribute(name=security-domain, value=mySecurityDomain)
/subsystem=messaging-activemq/server=default:write-attribute(name=security-domain, value=mySecurityDomain)
JBoss EAPHow To Configure Server Security ガイドには、新しいセキュリティーレルムおよびドメインの作成方法についての詳細が記載されています。ここでは、other ドメインが設定内にどのように表示されるかに注目すべきです。
other ドメインでは、認証手段として 2 つの login-module を使用しています。最初のモジュール Remoting がリモート EJB 呼び出しを認証し、RealmDirect モジュールが、指定されたレルムに定義されている保存情報を使用してユーザーを認証します。この例では、レルムが宣言されていないため、デフォルトのレルム ApplicationRealm が使用されます。各モジュールの password-stacking オプションは useFirstPass に設定されており、認証されたユーザーのプリンシパル名とパスワードを格納するよう login-module に伝えます。ログインモジュールおよびそれらのオプションに関する詳細は、JBoss EAPLogin Module Reference を参照してください。
ロールベースのアクセスはアドレスレベルで設定されます。アドレスのロールベースのセキュリティー を参照してください。
7.1.2. Elytron サブシステムの使用 リンクのコピーリンクがクリップボードにコピーされました!
elytron サブシステムを使用して messaging-activemq サブシステムをセキュアにすることもできます。elytron サブシステムの使用および Elytron セキュリティードメインの作成に関する詳細は、How to Configure Identity Managementガイドの Elytron Subsystem セクションを参照してください。
Elytron セキュリティードメインを使用するには、以下を指定します。
レガシーセキュリティードメインの定義を解除します。
/subsystem=messaging-activemq/server=default:undefine-attribute(name=security-domain)
/subsystem=messaging-activemq/server=default:undefine-attribute(name=security-domain)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Elytron セキュリティードメインを設定します。
/subsystem=messaging-activemq/server=default:write-attribute(name=elytron-domain, value=myElytronSecurityDomain) reload
/subsystem=messaging-activemq/server=default:write-attribute(name=elytron-domain, value=myElytronSecurityDomain) reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.2.1. 管理コンソールを使用した Elytron セキュリティードメインの設定 リンクのコピーリンクがクリップボードにコピーされました!
管理コンソールを使用して Elytron セキュリティードメインを設定するには、以下の操作を行います。
- 管理コンソールにアクセスします。詳細は、JBoss EAP 設定ガイドの 管理コンソール を参照してください。
-
Configuration
Subsystems Messaging (ActiveMQ) Server default と選択し、View をクリックします。 - Security タブに移動し、Edit をクリックします。
- Elytron Domainの値を追加または編集します。
- 保存をクリックして変更を保存します。
- 変更を反映するためにサーバーをリロードします。
security-domain または elytron-domain のいずれかを定義できますが、両方を同時に定義することはできません。いずれも定義されていない場合、JBoss EAP は other のデフォルト値 security-domain を使用します。これは other のレガシーセキュリティードメインに対応します。
7.1.3. トランスポートのセキュリティー保護 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP メッセージングにバンドルされたデフォルトの http-connector は、デフォルトではセキュリティー保護されていません。JBoss EAPHow to Configure Server Securityの configure one-way and two-way SSL/TLS for applications の手順に従って、メッセージトランスポートのセキュリティーを保護し、SSL/TLS の Web トラフィックを有効にできます。
メッセージトランスポートのセキュリティーを保護する上記の方法は、http-acceptor のセキュリティー保護にも使用できます。
上記のようにトランスポートを設定する場合は、以下の手順を追加する必要があります。
-
デフォルトでは、HTTP アクセプターはすべて、デフォルトの
http-listenerを使用し、その HTTP ポートでリッスンするように設定されています。HTTP アクセプターはhttps-listenerを使用して HTTPS ポートでリッスンするように設定する必要があります。 -
すべての HTTP コネクターの
socket-binding要素は、httpではなくhttpsを使用するように更新する必要があります。 -
SSL/TLS 経由で通信する
http-connectorのssl-enabledパラメーターはtrueに設定する必要があります。 -
HTTP コネクターが別のサーバーへの接続に使用される場合は、
trust-storeやkey-storeなどの関連するパラメーターを設定する必要があります。http-connectorのセキュリティーを保護するには、remote-connectorと同様のパラメーター設定を行う必要があります。設定の詳細は リモートコネクターのセキュリティー保護 で説明されています。
メッセージングトランスポートのアクセプターとコネクターの設定の詳細は、メッセージングトランスポートの設定 を参照してください。
7.1.4. リモートコネクターのセキュリティー保護 リンクのコピーリンクがクリップボードにコピーされました!
TCP 通信にデフォルトの http-connector を使用せず、代わりに独自の remote-connector と remote-acceptor を作成した場合、以下の表のプロパティーを使用して SSL/TLS を設定できます。以下のプロパティーは、アクセプターまたはコネクターの子 <param> 要素の一部として設定に表示されます。
通常、サーバーは SSL/TLS 秘密鍵を所有し、その公開鍵をクライアントと共有します。この場合、サーバーは remote-acceptor で key-store-path パラメーターおよび key-store-password パラメーターを定義します。各クライアントは異なる場所にトラストストアを持ち、異なるパスワードで暗号化できます。そのため、remote-connector で trust-store-path プロパティーと trust-store-password プロパティーを指定することは推奨されません。代わりに、システムプロパティー javax.net.ssl.trustStore と javax.net.ssl.trustStorePassword を使用してクライアント側のこれらのパラメーターを設定します。remote-connector の設定が必要なパラメーターは ssl-enabled=true と useDefaultSslContext=true です。ただし、サーバーが remote-connector を使用して別のサーバーに接続する場合は、remote-connector の trust-store-path パラメーターと trust-store-password パラメーターを設定するのが適切です。
上記のユースケースでは、以下の管理 CLI コマンドを使用して remote-acceptor を作成します。
/subsystem=messaging-activemq/server=default/remote-acceptor=mySslAcceptor:add(socket-binding=netty,params={ssl-enabled=true, key-store-path=PATH/TO/server.jks, key-store-password=${VAULT::server-key::key-store-password::sharedKey}})
/subsystem=messaging-activemq/server=default/remote-acceptor=mySslAcceptor:add(socket-binding=netty,params={ssl-enabled=true, key-store-path=PATH/TO/server.jks, key-store-password=${VAULT::server-key::key-store-password::sharedKey}})
上記のユースケースから remote-connector を作成するには、以下の管理 CLI コマンドを使用します。
/subsystem=messaging-activemq/server=default/remote-connector=mySslConnector:add(socket-binding=netty,params={ssl-enabled=true, useDefaultSslContext=true})
/subsystem=messaging-activemq/server=default/remote-connector=mySslConnector:add(socket-binding=netty,params={ssl-enabled=true, useDefaultSslContext=true})
管理 CLI を使用して、次のように既存の remote-acceptor または remote-connector にパラメーターを追加することもできます。
/subsystem=messaging-activemq/server=default/remote-connector=myOtherSslConnector:map-put(name=params,key=ssl-enabled,value=true)
/subsystem=messaging-activemq/server=default/remote-connector=myOtherSslConnector:map-put(name=params,key=ssl-enabled,value=true)
remote-acceptor と remote-connector では両方とも、通信に使用されるポートを宣言する際に socket-binding を参照することに注意してください。ソケットバインディングおよびアクセプターとコネクターとの関係についての詳細は、メッセージングサブシステム設定の概要 を参照してください。
| プロパティー | 説明 |
|---|---|
| enabled-cipher-suites | アクセプターまたはコネクターの設定に使用できます。これは、SSL/TLS 通信に使用される暗号化スイートのコンマで区切ったリストです。デフォルト値は null です (JVM のデフォルト値を使用)。 |
| enabled-protocols | アクセプターまたはコネクターの設定に使用できます。これは、SSL/TLS 通信に使用されるプロトコルのコンマ区切りのリストです。デフォルト値は null です (JVM のデフォルト値を使用)。 |
| key-store-password |
アクセプターで使用されると、サーバー側のキーストアのパスワードになります。 |
| key-store-path |
アクセプターで使用される場合、これはサーバーの証明書を保持するサーバーの SSL/TLS キーストアへのパスとなります。自己署名証明書または認証局が署名した証明書のいずれかに使用します。 |
| key-store-provider | キーを保存するファイルの形式 (PKCS11 や PKCS12 など) を定義します。許可される値は JDK に固有のものです。 |
| needs-client-auth |
このプロパティーはアクセプター専用です。このプロパティーは、このアクセプターに接続するクライアントに双方向 SSL/TLS が必要であることを伝えます。有効な値は |
| ssl-enabled |
SSL/TLS を有効にするには |
| trust-store-password |
アクセプターで使用されると、サーバー側のトラストストアのパスワードになります。双方向 SSL/TLS を使用している場合、これはアクセプターにのみ関係してきます。 |
| trust-store-path |
アクセプターで使用される場合、これはサーバーが信頼するすべてのクライアントのキーを保持するサーバー側の SSL/TLS キーストアへのパスとなります。双方向 SSL/TLS を使用している場合、これはアクセプターにのみ関係してきます。 |
| trust-store-provider | キーを保存するファイルの形式 (PKCS11 や PKCS12 など) を定義します。許可される値は JDK に固有のものです。 |