WebLogic Security プログラマーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

Java セキュリティを使用しての WebLogic リソースの保護

この節では、以下のトピックを取り上げます。

 


Java EE セキュリティを使用しての WebLogic リソースの保護

WebLogic Server は、URL (Web)、エンタープライズ JavaBean (EJB)、およびコネクタのコンポーネントを保護する Java EE セキュリティをサポートしています。さらに、WebLogic Server では、デプロイメント記述子を使って追加のセキュリティ ポリシーを指定するコネクタ モデルが、URL および EJB のコンポーネントに拡張されています。

注意 : Java EE コネクタ アーキテクチャ仕様と同じように、Java EE では異なるアプリケーション タイプ (Java EE 5.0 仕様を参照) の Java 2 セキュリティのデフォルト パーミッションに対する要件が規定されています。

コネクタ仕様では、すでに次の例のように <security-permission> タグを使って追加セキュリティ ポリシーを指定するデプロイメント記述子に対応しています (コード リスト 8-1 を参照)。

コード リスト 8-1 security-permission タグのサンプル
<security-permission>
<description> Optional explanation goes here </description>
<security-permission-spec>
<!—
http://java.sun.com/j2se/1.4.2/docs/guide/security/PolicyFiles.html#FileSyntax の構文にしたがって、単一の grant 文をここに記述する。このとき、「codebase」および「signedBy」句は使用しない。次に例を示す
-->
grant {
permission java.net.SocketPermission “*”, “resolve”;
};
</security-permission-spec>
</security-permission>

rar.xml ファイルでの <security-permission> タグのサポートに加えて、WebLogic Server では weblogic.xml ファイルと weblogic-ejb-jar.xml ファイルに <security-permission> タグを追加しています。これらは、コネクタ モデルを他の 2 つのアプリケーション タイプ (Web アプリケーションと EJB) に拡張し、すべてのコンポーネント タイプでセキュリティ ポリシーへのインタフェースを統一すると共に、将来の Java EE 仕様の変更に備えるためのものです。

 


Java セキュリティ マネージャを使用しての WebLogic リソースの保護

Java セキュリティ マネージャと WebLogic Server を一緒に使用すると、Java 仮想マシン (JVM) 内で実行されているリソースのセキュリティを強化できます。Java セキュリティ マネージャは、任意のセキュリティ手順です。以下の節では、WebLogic Server で Java セキュリティ マネージャを使用する方法について説明します。

Java セキュリティ マネージャの詳細については、http://java.sun.com/j2se/1.5.0/docs/guide/security/index.html の Java セキュリティに関する Web ページを参照してください。

Java セキュリティ マネージャの設定

Java 2 (SDK 1.2 以降) 環境で WebLogic Server を実行する場合、WebLogic Server は Java 2 の Java セキュリティ マネージャを使用して、信頼性のないコードが Java セキュリティ ポリシー ファイルによって制限されているアクションを実行しないようにできます。

Java 仮想マシン (JVM) には、Java セキュリティ ポリシー ファイルでコードに制約を設定するセキュリティ メカニズムが組み込まれています。Java セキュリティ マネージャは、Java セキュリティ ポリシー ファイルを使用して一連のパーミッションをクラスに強制的に付与します。これらのパーミッションを使用すると、JVM のインスタンスで実行される指定されたクラスに特定の実行時処理を許可するかどうかを設定できます。多くの場合、脅威モデルでは悪意あるコードが JVM で実行されることを想定していないため、Java セキュリティ マネージャは必要ありません。しかし、信頼されていないサード パーティが WebLogic Server を使用し、信頼されていないクラスが実行される場合、Java セキュリティ マネージャが役立ちます。

WebLogic Server で Java セキュリティ マネージャを使用するには、WebLogic Server の起動時に -Djava.security.policy 引数と -Djava.security.manager 引数を指定します。-Djava.security.policy 引数は、Java 2 セキュリティ ポリシーを格納するファイル名を、相対パス名または絶対パス名で指定します。

WebLogic Server には、編集および使用可能なサンプル Java セキュリティ ポリシー ファイルが用意されています。このファイルは、WL_HOME\server\lib\weblogic.policy にあります。

注意 : このサンプル ポリシー ファイルは完全なものではなく、修正を加えてからでないと WebLogic Server を起動できません。特に、WLS やすべてのアプリケーションが適切に機能するには、コンフィグレーションに基づいて各種のパーミッションを追加する必要があります。

たとえば、WLS を正常に起動して Administration Console からアプリケーションをデプロイするには、weblogic.policy に以下のように追加する必要があります。

permission java.util.PropertyPermission '*', 'read'; 
permission java.lang.RuntimePermission '*';
permission java.io.FilePermission ' <<ALL FILES>>', 'read,write';
permission javax.management.MBeanPermission '*', '*';

セキュリティ ポリシー ファイルを指定しないで Java セキュリティ マネージャを有効にする場合、Java セキュリティ マネージャでは、$JAVA_HOME\jre\lib\security ディレクトリの java.policy ファイルに定義されるデフォルトのセキュリティ ポリシーを使用します。

Java セキュリティ マネージャのセキュリティ ポリシーは、以下のいずれかの方法で定義します。

全体的に使用する weblogic.policy ファイルを修正する

WebLogic Server デプロイメントで Java セキュリティ マネージャのセキュリティ ポリシー ファイルを使用するには、WebLogic Server の起動時に Java セキュリティ マネージャに weblogic.policy ファイルの場所を指定する必要があります。これを行うには、サーバの起動に使用する Java コマンドラインで次の引数を設定します。

次に例を示します。

java...-Djava.security.manager \
-Djava.security.policy==c:\weblogic\weblogic.policy
注意 : java.security.policy 引数を指定するときには、Java セキュリティ マネージャによって weblogic.policy ファイルだけが使用されるよう、= の代わりに == を使用します。== を使用すると、weblogic.policy ファイルはデフォルトのセキュリティ ポリシーをオーバーライドします。単一の等号記号 (=) を使用した場合、weblogic.policy ファイルが既存のセキュリティ ポリシーに付加されます。

CLASSPATH に追加のディレクトリがある場合、または追加のディレクトリにアプリケーションをデプロイしている場合は、それらのディレクトリに対する特定のパーミッションを weblogic.policy ファイルに追加します。

weblogic.policy ファイルを使用する際には、次のような注意事項を考慮することをお勧めします。

警告 : Java セキュリティ マネージャは、管理サーバと管理対象サーバの起動時に部分的に無効にされます。起動シーケンス中は、現在の Java セキュリティ マネージャが無効化され、checkRead() メソッドが無効化された Java セキュリティ マネージャに置き換えられます。このメソッドを無効化した場合、起動シーケンスのパフォーマンスは飛躍的に向上しますが、セキュリティは最低レベルに下がります。WebLogic Server のスタートアップ クラスは、この部分的に無効にされた Java セキュリティ マネージャと一緒に実行されます。このため、スタートアップ クラスを十分にチェックして、セキュリティ (ファイルの読み取りなど) を検討する必要があります。

Java セキュリティ マネージャの詳細については、java.lang.SecurityManager クラスの Javadoc を参照してください。

アプリケーション型のセキュリティ ポリシーを設定する

サーブレット、EJB、および Java EE コネクタ リソース アダプタのデフォルト セキュリティ ポリシーを、Java セキュリティ ポリシー ファイルで設定します。サーブレット、EJB、およびリソース アダプタのデフォルト セキュリティ ポリシーは、以下のコードベースで Java セキュリティ ポリシーに定義します。

注意 : これらのセキュリティ ポリシーは、WebLogic Server の特定のインスタンスにデプロイされるすべてのサーブレット、EJB、およびリソース アダプタに適用されます。

アプリケーション固有のセキュリティ ポリシーを設定する

特定のサーブレット、EJB、またはリソース アダプタのセキュリティ ポリシーを設定するには、セキュリティ ポリシーをそれらのデプロイメント記述子に追加します。デプロイメント記述子は、以下のファイルに定義されます。

注意 : リソース アダプタのセキュリティ ポリシーは Java EE 仕様に準拠し、サーブレットおよび EJB のセキュリティ ポリシーは WebLogic Server の Java EE 仕様拡張に準拠します。

コード リスト 8-2 は、セキュリティ ポリシーをデプロイメント記述子に追加するための構文です。

コード リスト 8-2 セキュリティ ポリシーの構文
<security-permission>
<description>
Allow getting the J2EEJ2SETest4 property
</description>
<security-permission-spec>
grant {
permission java.util.PropertyPermission "welcome.J2EEJ2SETest4","read";
};
</security-permission-spec>
</security-permission>
注意 : 現時点では、<security-permission-spec> タグは weblogic-application.xml ファイルに追加できません。このタグを使用できるのは、weblogic-ejb-jar.xmlrar.xml、または weblogic.xml ファイルの中だけです。また、<security-permission-spec> 属性では変数はサポートされていません。

Java Authorization Contract for Containers の使用

Java Authorization Contract for Containers (JACC) は Java EE の一部です。JACC は、EJB およびサーブレットに対する Java 2 パーミッションベースのセキュリティ モデルです。JACC は、JSR-115 によって定義されます。

JACC は、WebLogic Server ドメイン内の EJB およびサーブレット コンテナに代替認可メカニズムを提供します。表 8-1 に示すように、JACC がコンフィグレーションされていると、WebLogic Security フレームワークのアクセス決定、裁決、およびロール マッピング機能は、EJB およびサーブレットの認可判定には使用されません。

WebLogic Server は、JSR-115 に完全に準拠しているものの、WebLogic 認可プロバイダほどには最適化されていない JACC プロバイダを実装します。Java JACC クラスは、アクセス決定を下す際に使用します。JSR-115 はロール マッピングに対処する方法を定義しないので、ロールとプリンシパルの間のマッピングには WebLogic JACC クラスが使用されます。JACC プロバイダの開発の詳細については、http://java.sun.com/j2ee/javaacc を参照してください。

注意 : WebLogic Server で使用される JACC クラスには、決定を下すためのポリシー オブジェクトの実装は含まれません。代わりに、JACC クラスは、java.security.Policy オブジェクトに依存します。

この節では、以下のトピックを取り上げます。

表 8-1 には、JACC を有効にした場合に、どのプロバイダがロール マッピングに使用されるかを示します。

表 8-1 JACC を有効にした場合
 
EJB/サーブレットの認可とロール マッピングに使用されるプロバイダ
その他のすべての認可とロール マッピングに使用されるプロバイダ
EJB/サーブレットのロールとポリシーを Administration Console で表示および変更できるかどうか
JACC が有効
JACC プロバイダ
WebLogic Security フレームワーク プロバイダ
不可
JACC が無効
WebLogic Security フレームワーク プロバイダ
WebLogic Security フレームワーク プロバイダ
可能 (設定による)

注意 : JACC は、ドメイン内のすべてのサーバで有効にするか、またはすべてのサーバで無効にしてください。これは、WebLogic Security フレームワークがレルム/ドメイン固有であるのに対し、JACC はサーバ固有であるためです。WebLogic JACC を使用するか、独自の JACC プロバイダを作成 (こちらを推奨) して JACC を有効にした場合は、EJB と Servlet の認可ポリシーをドメイン内で同期させる必要があります。たとえば、アプリケーションは、サーバを起動するたびに再デプロイされます。JACC がコンフィグレーションされたサーバを、コマンドラインに JACC オプションを指定せずに起動すると、EJB や Servlet のロール マッピングおよび認可判定にデフォルトの WebLogic 認可プロバイダが使用されます。

WebLogic JACC プロバイダと WebLogic 認可プロバイダの比較

WebLogic JACC プロバイダは、JSR-115 に完全に準拠していますが、動的ロール マッピングをサポートしておらず、EJB およびサーブレット以外のリソースの認可判定は行いません。セキュリティ機能のパフォーマンスと柔軟性を向上させるため、SSPI ベースのプロバイダを使用することをお勧めします。

表 8-2 では、WebLogic JACC プロバイダと WebLogic 認可プロバイダの機能を比較します。

表 8-2 WebLogic JACC プロバイダと WebLogic 認可プロバイダの比較
WebLogic JACC プロバイダ
WebLogic 認可プロバイダ
JACC 仕様 (JSR-115) を実装
付加価値の高いセキュリティ フレームワーク
EJB およびサーブレットのデプロイメント/認可判定を行う
デプロイメント/認可判定を行う
java.security.Policy オブジェクトを使用して判定を実施
複数の認可/ロール プロバイダで使用可能
デプロイメント時の静的ロール マッピング
動的ロール マッピング
J2SE パーミッションでアクセスを制御
資格エンジンでアクセスを制御
ロール マッピングおよびロール/プリンシパル マッピングは、デプロイメント記述子でのみ変更可能
ロール マッピングおよびロール/プリンシパル マッピングは、デプロイメント記述子および Administration Console で変更可能

WebLogic JACC プロバイダの有効化

WebLogic JACC プロバイダをコマンドラインから有効にするには、以下のシステム プロパティと値のペアを指定する必要があります。

たとえば、適切にコンフィグレーションされた weblogic.policy ファイルがあれば、次のコマンドラインで WebLogic JACC プロバイダが有効になります。

# ./startWebLogic.sh -Djava.security.manager\
-Djava.security.policy==<pathname>/weblogic.policy \
-Djavax.security.jacc.policy.provider=\
weblogic.security.jacc.simpleprovider.SimpleJACCPolicy \
-Djavax.security.jacc.PolicyConfigurationFactory.provider=\
weblogic.security.jacc.simpleprovider.PolicyConfigurationFactoryImpl \
-Dweblogic.security.jacc.RoleMapperFactory.provider=\
weblogic.security.jacc.simpleprovider.RoleMapperFactoryImpl

注意 : デフォルトのセキュリティ ポリシーをオーバーライドするには、-Djava.security.policy==<pathname>/weblogic.security を使用します。単一の等号記号 (=) を使用した場合、weblogic.policy ファイルが既存のセキュリティ ポリシーに付加されます。

ページの先頭       前  次