目次 | 前へ | 次へ Java Management Extensions (JMX) テクノロジのチュートリアル

第 5 章

セキュリティー

この章では、JMX テクノロジのセキュリティー機能の設定方法の例を、次のセクション内で説明します。

  • セクション「主体委譲」では、特定の認証された接続で操作を実行する場合に、複数の異なる ID の代わりに主体委譲モデルを使用するコネクタの例を示します。

注意:アプリケーションでは、ユーザーがパスワードをコマンド行に入力するのではなく、パスワードの入力をユーザーに求めるようにする必要があります。実稼動システムではセキュアな認証メカニズムを使用してください。

簡単なセキュリティー

JMX テクノロジを使用して実装できるもっとも簡単なセキュリティーは、暗号化、ユーザー名とユーザーパスワードの認証、およびファイルアクセス制御に基づくものです。

簡単なセキュリティーを使用した RMI コネクタ

簡単なセキュリティーを使用した RMI コネクタの例は、ディレクトリ work_dir/jmx_examples/Security/simple 内にあります。

  1. work_dir/jmx_examples/Security/simple ディレクトリを開きます。

    このディレクトリ内に、次のディレクトリがあります。

    • /server、次のファイルを格納しています:Server.java
    • /config、セキュリティー構成ファイルを格納しています。
    • access.properties
    • keystore
    • password.properties
    • truststore
    • /mbeans、次のファイルを格納しています。
    • SimpleStandardMBean.java
    • SimpleStandard.java
    • /client、次のファイルを格納しています。
    • Client.java
    • ClientListener.java
  2. テキストエディタで、*.java と *.properties のすべてのファイルを開きます

    これらのファイルについて、以降セクションで分析します。

Server.java

Server.java クラスをコード例 5-1 に示します。

コード例 5-1 RMI コネクタの例題 (簡単なセキュリティー) クラス Server.java
 
public class Server { 
 
  public static void main(String[] args) { 
  try { 
       MBeanServer mbs = MBeanServerFactory.createMBeanServer(); 
 
       HashMap env = new HashMap(); 
 
       SslRMIClientSocketFactory csf =  
                  new SslRMIClientSocketFactory(); 
       SslRMIServerSocketFactory ssf =  
                  new SslRMIServerSocketFactory(); 
       env.put(RMIConnectorServer. 
                  RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE,csf); 
       env.put(RMIConnectorServer. 
                  RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE,ssf); 
 
       env.put("jmx.remote.x.password.file", 
                 "config" + File.separator + "password.properties"); 
       env.put("jmx.remote.x.access.file", 
                 "config" + File.separator + "access.properties"); 
 
       JMXServiceURL url = new JMXServiceURL( 
        "service:jmx:rmi:///jndi/rmi://localhost:9999/server"); 
         JMXConnectorServer cs = 
            JMXConnectorServerFactory.newJMXConnectorServer(url,  
                                                            env,  
                                                            mbs); 
       cs.start(); 
     } catch (Exception e) { 
       e.printStackTrace(); 
     } 
  } 
} 
 

コード例 5-1 に示す Server クラスは、MBean サーバー mbs を作成し、環境マップ env にセキュリティー保護された RMI クライアントソケットファクトリ csf、セキュリティー保護された RMI サーバーソケットファクトリ ssf、およびプロパティーファイル password.properties と access.properties を渡します。

プロパティーファイル password.properties には、ユーザー名とパスワードが含まれ、JMX リモート API インタフェース JMXAuthenticator を使用してアクセスします。プロパティー jmx.remote.x.password.file を使用することは、パスワードベースの JMXAuthenticator を作成し、これを jmx.remote.authenticator プロパティーを通じて環境マップに渡すのと同じ意味を持ちます。

プロパティーファイル access.properties には、ユーザー名と一定レベルのアクセス権、readwrite と readonly のいずれかが含まれます。これはアクティブなユーザーが、MBean サーバー操作にどのレベルでアクセスできるかを表します。このファイルベースのアクセス制御は、アクセスコントローラ MBean サーバー内に実際の MBean サーバーをラップする、JMX テクノロジのインタフェース MBeanServerForwarder を使用して実装されます。アクセスコントローラ MBean サーバーは、適切なチェックを実行したあとに、実際の MBean サーバーに要求を転送します。

Server は RMI コネクタ用に JMX サービス URL、url を作成します。この RMI コネクタはデフォルトの JRMP トランスポート上で動作し、ローカルホストのポート 9999 の RMI レジストリに RMI コネクタスタブを登録します。

MBean サーバー mbs、環境マップ env、およびサービス URL url はすべて JMXConnectorServer に渡され、セキュアな JMX コネクタサーバー cs が新規に作成されます。

SimpleStandardMBean.java

SimpleStandardMBean クラスは、第 3 章「JMX コネクタ」で使用されたものと同じ簡単な MBean インタフェースを定義します。

SimpleStandard.java

SimpleStandard クラスは、第 3 章「JMX コネクタ」で使用されたものと同じ簡単な MBean を定義します。

ClientListener.java

ClientListener クラスは、第 3 章「JMX コネクタ」で使用されたものと同じ簡単な通知リスナーを定義します。

Client.java

Client.java クラスをコード例 5-1 に示します。

コード例 5-1 RMI コネクタの例題 (簡単なセキュリティー) クラス Client.java
 
public class Client { 
 
  public static void main(String[] args) { 
  try { 
      HashMap env = new HashMap(); 
 
      String[] credentials = new String[] { "username" , "password" }; 
      env.put("jmx.remote.credentials", credentials); 
      JMXServiceURL url = new JMXServiceURL( 
         "service:jmx:rmi:///jndi/rmi://localhost:9999/server");       
      JMXConnector jmxc = JMXConnectorFactory.connect(url, env); 
      MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); 
      String domains[] = mbsc.getDomains(); 
      for (int i = 0; i < domains.length; i++) { 
         System.out.println("Domain[" + i + "] = " + domains[i]); 
      } 
       
      ObjectName mbeanName =  
          new ObjectName("MBeans:type=SimpleStandard"); 
      mbsc.createMBean("SimpleStandard", mbeanName, null, null); 
      // Perform MBean operations 
      [...] 
      
      mbsc.removeNotificationListener(mbeanName, listener); 
      mbsc.unregisterMBean(mbeanName); 
      jmxc.close(); 
    }  catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
} 
 

コード例 5-1 に示す Client クラスは、環境マップ env に Server が求める資格セット、つまり username や password を渡します。これらの資格は、コネクタスタブのサービス URL と環境マップが JMXConnectorFactory.connect() に渡されるときに、JMXConnector のインスタンス jmxc に付与されます。Client は jmxc を通じて、Server 側で起動された MBean に接続し、MBean の操作を実行します。

接続が確立すると、環境マップ env で付与された資格はサーバーに送信されます。サーバーは次に、JMXAuthenticator インタフェースの authenticate() メソッドを呼び出し、クライアント資格をパラメータとして渡します。authenticate() メソッドは、クライアントを認証し、アクセス制御の確認に使用される主体セットを含む被認証者を返します。

簡単なセキュリティーを使用した RMI コネクタの例題の実行

簡単なセキュリティーを使用した RMI コネクタの例題を実行するには、次の手順を実行します。


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.