Liberty: Java 2 セキュリティー

WebSphere® Application Server Liberty では、Java™ 2 セキュリティー 機能がサポートされます。Java 2 セキュリティー では、特定の保護されたシステム・リソースへのアクセスを許可する前に、 アクセス権をチェックすることでシステム全体の保全性を向上させる、ポリシー・ベースの精細なアクセス制御メカニズムを提供します。

Java 2 セキュリティー は、Java Platform, Enterprise Edition のロール・ベースの許可とは別に行われます。Java 2 セキュリティー では、ファイル入出力、ソケット、プロパティーなど、システム・リソースへのアクセスを保護します。一方、Java Platform, Enterprise Edition セキュリティーでは、サーブレットや JSP ファイルなど、Web リソースへのアクセスを保護します。

デプロイヤーおよび管理者の場合の Java 2 セキュリティー

Java 2 セキュリティー を有効にする前に、 必要なアクセス権がすべてのアプリケーションに付与されていることを確認してください。そうでないとアプリケーションが実行に失敗する可能性があります。 デフォルトでは、Java Platform, Enterprise Edition 7.0 仕様によって、アクセス権がアプリケーションに付与されます。アプリケーションが Java 2 セキュリティー 用に作成されていない場合、 またはアプリケーション・プロバイダーがアプリケーションの一環として permissions.xml ファイルを提供していない場合、 Java 2 セキュリティー が有効であると、 アプリケーションで実行時に Java 2 セキュリティー アクセス制御例外が発生することがあります。 アプリケーションが実行されていても、正しく実行されない可能性があります。

アプリケーション開発者の場合の Java 2 セキュリティー

アプリケーション開発者は、デフォルトの WebSphere ポリシーに付与されているアクセス権と、Java SDK API のアクセス権要件を把握する必要があります。アプリケーションで呼び出す API が、追加のアクセス権を必要とするかどうかを認識していなければなりません。 アクセス権を必要とする Java API について詳しくは、Permissions in the Java 2 SDKを参照してください。
アクセス権は、permissions.xml ファイルによってアプリケーションに追加され、 リストされたアクセス権に関連付けられたコードベースは、ファイルの場所に基づきます。 スタンドアロンの .war アプリケーションの場合、 permissions.xml ファイルは、META-INF ディレクトリーの下にバンドルされ、 指定されたすべてのアクセス権が、.war ファイルに含まれるすべてのモジュールに適用されます。 .ear アプリケーションの場合、permissions.xml は、.ear 自体の META-INF ディレクトリーの直下にバンドルされ、指定されたアクセス権は、 .ear ファイルに含まれるすべてのモジュールに適用されます。
注: .ear アプリケーションのケースで、 .ear 以外のモジュールの META-INF ディレクトリーにバンドルされた permissions.xml ファイルは無視されます。

Java 2 セキュリティー の有効化

Java 2 セキュリティー 機能はカーネル拡張の一部であり、websphere.java.security プロパティーで bootstrap.properties ファイルを更新することで、ブートストラップ時に有効化されます。

websphere.java.security プロパティーが bootstrap.properties ファイルで指定された場合、 Java 2 セキュリティー が適用されます。そうでない場合、アクセス権チェックは行われません。

制限アクセス権の指定

Liberty では、Web または EJB アプリケーション・コンポーネントの実行時に制限アクセス権を指定するメカニズムが用意されています。制限アクセス権では、バンドルまたはアプリケーションにそのアクセス権のインスタンスが付与されないようにします。 アプリケーションが、許可された内容を超えるアクセス権 (例えば、VM を終了するアクセス権など) を自身に付与しないようにするメカニズムが提供されます。
制限アクセス権は、server.xml ファイルおよび client.xml ファイルで指定されます。 以下の例では、システム・プロパティー os.name の書き込みに使用される PropertyPermission がどのように制限されるのかを示します。この構文は、server.xml ファイルと client.xml ファイルで同じです。
<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />

アクセス権の付与

OSGi バンドルは、permissions.perm ファイルによって、バンドル内のライブラリー/クラスに付与されるアクセス権を自己制御することができます。

また、permissions.xml ファイルを通じて付与されたアクセス権、あるいは、server.xml ファイルと client.xml ファイルでアクセス権付与を指定することで付与されたアクセス権をアプリケーションが自己制御することも可能です。

OSGi バンドルのアクセス権

OSGi 仕様では、バンドルの OSGI-INF ディレクトリーの permissions.perm ファイルによって、バンドルのアクセス権を指定するメカニズムが用意されています。 このメカニズムにより、バンドルのアクセス権を精細にアクセス制御できるようになります。
permissions.perm ファイルでは、バンドルで必要となる最大のアクセス権を指定します。
重要: 空の permissions.perm ファイルは、 permissions.perm ファイルがないのと同等ではありません。 制限アクセス権が必要な場合は、空でない permissions.perm ファイルを必ず用意してください。

アプリケーションの server.xmlclient.xml におけるアクセス権の宣言

server.xml ファイルと client.xml ファイルで定義され、指定されたコードベースがないアクセス権は、その Liberty サーバー上のすべてのアプリケーションに適用されます。
以下の例のようにして、server.xml ファイルと client.xml ファイルで付与されるアクセス権を指定することができます。 この例では、すべてのシステム・プロパティーを読み取れるようにする PropertyPermission が付与されます。
<javaPermission className="java.util.PropertyPermission"  name="*" actions="read" />
server.xml ファイルと client.xml ファイルで、アクセス権が制限されるように指定できます。 以下の例では、システム・プロパティー os.name の書き込みに使用される PropertyPermission がどのように制限されるのかを示します。この構文は、server.xml ファイルと client.xml ファイルで同じです。
<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />
注:
  • 制限アクセス権では、restrictiontrue に設定されます。
  • 制限アクセス権として定義されたアクセス権をアプリケーションが自身に付与しようとした場合、 制限アクセス権が付与より優先され、付与は許可されません。

アプリケーションの permissions.xml におけるアクセス権の宣言

permissions.xml ファイルは、Java EE7 仕様で導入された新しいファイルです。これは、アプリケーションの META-INF ディレクトリーの下にパッケージされます。

スタンドアロンの .war ファイルとしてパッケージされたアプリケーションの場合、 META-INF の WAR レベルで指定されたアクセス権は、 .war ファイル内にパッケージされたすべてのモジュールとライブラリーに適用されます。

.ear ファイルのパッケージであるアプリケーションの場合、アクセス権の宣言は、 .ear ファイル・レベルでなければなりません。 このアクセス権設定は、.ear ファイル内、またはそこに含まれるモジュール内にパッケージされたすべてのモジュールとライブラリーに適用されます。 そのようなパッケージ・モジュール内の permissions.xml ファイルは、 permissions.xml ファイルが .ear ファイル自体に指定されたかどうかに関係なく、無視されます。

.rar ファイルにパッケージされたアプリケーションの場合、アクセス権の宣言は、 META-INF の RAR レベルでなければなりません。

再スローなしのオプション

Java 2 セキュリティーが有効の場合、アクセス権違反が発生すると、JDK セキュリティー・マネージャーは、デフォルトで java.security.AccessControl 例外をスローします。例外が処理されないと、実行時の失敗につながる可能性があります。 Java 2 セキュリティー用にアプリケーションを作成する開発者を支援するために、no-rethrow オプションがあります。no-rethrow オプションでは、 AccessControl 例外を console.logmessages.log に記録できますが、アプリケーションは失敗しません。 no-rethrow オプションは、bootstrap.properties ファイルで websphere.java.security.norethrow=true を指定することで有効にします。 no-rethrow オプションは、デフォルトでは有効でないため、 bootstrap.properties ファイルに指定してこのプロパティーを有効にする必要があります。
注: このプロパティーがセキュリティー・マネージャーの例外のスローを許可しないため、 セキュリティー・マネージャーは技術的には Java 2 セキュリティーを適用しないことになります。no-rethrow プロパティーは、実稼働環境では使用しないでください。

動的更新

permissions.permpermissions.xmlserver.xmlclient.xml などのアクセス権ファイルへの動的更新はサポートされません。 アクセス権の更新には、Liberty サーバーの再始動が必要です。

トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwlp_java2security
ファイル名: cwlp_java2security.html