Java Management Extensions (JMX) セキュリティー

分散環境での Managed Bean (MBean) 呼び出しを保護することができます。

使用可能な MBean について詳しくは、Managed Beans (MBeans) を使用した管理を参照してください。

分散デプロイメント・トポロジーでは、MBean は、カタログ・サーバーおよびコンテナー・サーバーで直接ホストされます。 一般に、分散トポロジーの JMX セキュリティーは、Java Management Extensions (JMX) 仕様に指定された JMX セキュリティー仕様に従います。 これは、以下の 3 つのパートで構成されます。
  1. 認証: リモート・クライアントは、コネクター・サーバー内で認証される必要があります。
  2. アクセス制御: MBean アクセス制御は、MBean 情報にアクセスできるユーザー、および MBean 操作を実行できるユーザーを制限します。
  3. セキュア・トランスポート: JMX クライアントとサーバー間のトランスポートは、TLS/SSL を使用して保護することができます。

認証

JMX では、コネクター・サーバーがリモート・クライアントを認証するメソッドを提供しています。RMI コネクターの場合、認証は、コネクター・サーバーが作成される場合に JMXAuthenticator インターフェースを実装するオブジェクトを提供することにより実行されます。eXtreme Scale は、この JMXAuthenticator インターフェースを実装し、 ObjectGrid Authenticator プラグインを使用してリモート・クライアントを認証します。 eXtreme Scale がどのようにしてクライアントを認証するかについて詳しくは、Java SE セキュリティー・チュートリアル - ステップ 2を参照してください。

JMX クライアントは、JMX API に従って、コネクター・サーバーに接続するための資格情報を提供します。JMX フレームワークは、資格情報をコネクター・サーバーに渡し、認証のため、JMXAuthenticator 実装を呼び出します。前述のように、JMXAuthenticator 実装は、ObjectGrid Authenticator 実装に認証を委任します。

以下の例は、資格情報を使用してコネクター・サーバーに接続する方法を説明していますので、参考にしてください。

javax.management.remote.JMXServiceURL jmxUrl = new JMXServiceURL(
        "service:jmx:rmi:///jndi/rmi://localhost:1099/objectgrid/MBeanServer");

    environment.put(JMXConnector.CREDENTIALS, new UserPasswordCredential("admin", "xxxxxx"));

    // Create the JMXCconnectorServer
    JMXConnector cntor = JMXConnectorFactory.newJMXConnector(jmxUrl, null);

    // Connect and invoke an operation on the remote MBeanServer
    cntor.connect(environment);

上記の例では、UserPasswordCredential オブジェクトが、ユーザー ID が admin に、パスワードが xxxxx に設定されて提供されます。この UserPasswordCredential オブジェクトは、環境マップに設定され、これは、JMXConnector.connect(Map) メソッドで使用されます。次に、この UserPasswordCredential オブジェクト は、JMX フレームワークによってサーバーに渡され、最終的に認証のために ObjectGrid 認証 フレームワークに渡されます。

クライアント・プログラミング・モデルは、厳格に JMX 仕様に従います。

アクセス制御

JMX MBean サーバーは、機密情報に対するアクセス権を持つことがあり、機密操作を実行することができる場合があります。JMX では、どのクライアントがその情報にアクセスでき、どのユーザーがそうした操作を実行できるかを識別する、必要なアクセス制御を提供しています。アクセス制御は、標準 Java セキュリティー・モデルに基づいて、MBean サーバーおよびその操作へのアクセスを制御する許可を定義することによって 構築されます。

JMX 操作のアクセス制御または許可に関して、eXtreme Scale は、JMX 実装で提供される JAAS サポートに 依存しています。プログラム実行の任意の時点で、実行のスレッドが保持する現行の許可セットがあります。 このようなスレッドが JMX 仕様操作を呼び出すとき、これらの許可は保持許可として知られています。 JMX 操作が実行されると、セキュリティー・チェックが行われ、必要な許可が保持許可によって暗黙的に示されているかどうかがチェックされます。

MBean ポリシー 定義は、Java ポリシー形式に 従います。例えば、次のポリシーでは、すべての署名者およびすべてのコード・ベースに PlacementServiceMBean のサーバー JMX アドレスを取得する権限を付与します。 ただし、これらの署名者およびコード・ベースは com.ibm.websphere.objectgrid ドメインに制限されます。

grant {
    permission javax.management.MBeanPermission
        "com.ibm.websphere.objectgrid.management.PlacementServiceMBean#retrieveServerJMXAddress 
					[com.ibm.websphere.objectgrid:*,type=PlacementService]",
        "invoke";
}

以下のポリシー・サンプルを使用すれば、リモート・クライアント ID に基づく許可を完了することができます。このポリシーでは、前の例に示されたものと同じ MBean 許可を付与していますが、X500Principal 名が CN=Administrator、OU=software、O=IBM、L=Rochester、ST=MN、C=US のユーザーだけは除きます。

grant principal javax.security.auth.x500.X500Principal "CN=Administrator,OU=software,O=IBM,
				L=Rochester,ST=MN,C=US" {permission javax.management.MBeanPermission
        "com.ibm.websphere.objectgrid.management.PlacementServiceMBean#retrieveServerJMXAddress 
				[com.ibm.websphere.objectgrid:*,type=PlacementService]",
        "invoke";
}

Java ポリシーは、 セキュリティー・マネージャーがオンになっている場合に限ってチェックされます。-Djava.security.manager JVM 引数を設定してカタログ・サーバーおよびコンテナー・サーバーを始動し、MBean 操作のアクセス制御を強制するようにしてください。

セキュア・トランスポート

JMX クライアントと JMX サーバー間のトランスポートは、TLS/SSL を使用して保護することができます。カタログ・サーバーまたはコンテナー・サーバーの transportType が SSL_Required または SSL_Supported に設定されている場合、SSL を使用して JMX サーバーに接続する必要があります。

SSL を使用するには、-D システム・プロパティーを使用して、トラストストア、トラストストア・タイプ、およびトラストストア・パスワードを MBean クライアントで構成する必要があります。
  1. -Djavax.net.ssl.trustStore=TRUST_STORE_LOCATION
  2. -Djavax.net.ssl.trustStorePassword=TRUST_STORE_PASSWORD
  3. -Djavax.net.ssl.trustStoreType=TRUST_STORE_TYPE
java_home/jre/lib/security/java.security ファイルで SSL ソケット・ファクトリーとして com.ibm.websphere.ssl.protocol.SSLSocketFactory を使用する場合は、次のプロパティーを使用します。
  1. -Dcom.ibm.ssl.trustStore=TRUST_STORE_LOCATION
  2. -Dcom.ibm.ssl.trustStorePassword=TRUST_STORE_PASSWORD
  3. -Dcom.ibm.ssl.trustStoreType=TRUST_STORE_TYPE
スタンドアロン構成で Transport Layer Security/Secure Sockets Layer (TLS/SSL) が有効であるとき、この情報を取得するには、JMX サービス・ポートを設定してカタログ・サーバーおよびコンテナー・サーバーを始動する必要があります。以下のいずれかの方法を使用して、JMX サービス・ポートを設定します。
  • startOgServer スクリプトで -JMXServicePort オプションを使用します。
  • 組み込みサーバーを使用している場合は、ServerProperties インターフェースの setJMXServicePort メソッドを呼び出して、JMX サービス・ポートを設定します。
カタログ・サーバー上の JMX サービス・ポートのデフォルト値は 1099 です。 構成の中の各 JVM に対して、異なるポート番号を使用しなければなりません。JMX/RMI を使用する場合は、たとえデフォルトのポート値を使用する場合であっても、-JMXServicePort オプションとポート番号を明示的に指定してください。

カタログ・サーバーからコンテナー・サーバー情報を表示するときは、JMX サービス・ポートを設定する必要があります。 例えば、このポートは、xscmd -c showMapSizes コマンドを使用する場合に必要となります。

JMX コネクター・ポートを設定して、一時ポートが作成されないようにします。以下のいずれかの方法を使用して、JMX コネクター・ポートを設定します。
  • startOgServer スクリプトで -JMXConnectorPort オプションを使用します。
  • 組み込みサーバーを使用している場合は、ServerProperties インターフェースの setJMVConnectorPort メソッドを呼び出します。