ヘッダーをスキップ

Oracle Containers for J2EE セキュリティ・ガイド
10g(10.1.3.4.0)

B50832-01
目次
目次
索引
索引

戻る 次へ

2 Javaプラットフォームのセキュリティ

この章では、JavaおよびJ2EEのアプリケーションとともに使用できる標準的なセキュリティ・モデルの概要について説明します。この章の内容は次のとおりです。

J2EEセキュリティ・モデル

J2EEでは、アプリケーションを基礎となるセキュリティ・インフラストラクチャから切り離す、コンテナ管理セキュリティ用の宣言による許可モデルを定義します。認可ポリシー(リソースとユーザーまたはロール間の関連付け)は、アプリケーション・コード内ではなく、アプリケーションのデプロイメント・ディスクリプタ内で静的に表現されます。認可はロールベースであるため、アクセスレベルで付与され、通常、WebのURLやEJBメソッドなどのリソースを保護します。

この項では、次のJ2EEセキュリティ機能について説明します。

Webアプリケーションの認証と認可

この項では、Webアプリケーションのセキュリティ(主に宣言によるセキュリティ構成)について説明します。より高度なプログラム機能を実行するため、APIについても説明します。APIを使用すると、セキュリティ機能を実行時に決定できます。

内容は次のとおりです。

Webアプリケーションの標準認証方式

いくつかの標準認証方式を使用して、J2EE Webアプリケーションにアクセスできます。

WebアプリケーションURLベースの認可

J2EEセキュリティ・モデルの場合、保護するWebリソースはURLパターンによって識別されます。これは、Webアプリケーションのweb.xmlファイルで指定されます。次に示すのは、アプリケーションのURLパターン/resourceでリソースを保護する構成の抜粋です。

  <web-resource-collection>
    <web-resource-name>resource access</web-resource-name>
    <url-pattern>/resource</url-pattern>
  </web-resource-collection>

これは、web.xmlのセキュリティ制約の一部です。これにより、リソースへのアクセスを許可されているJ2EE論理ロールも指定されます。J2EE仕様に記載されているJ2EE論理ロールには、開発者(アプリケーション・コンポーネント・プロバイダ)、アセンブラ、デプロイヤ、システム管理者などがあります。

たとえば、J2EEロールsr_developersweb.xmlファイルで宣言されているとします。このロールによるリソースへのアクセスを許可するセキュリティ制約は、次のようになります。

 <security-constraint>
    <web-resource-collection>
      <web-resource-name>resource access</web-resource-name>
      <url-pattern>/resource</url-pattern>
    </web-resource-collection>
    <!-- authorization -->
    <auth-constraint>
      <role-name>sr_developers</role-name>
    </auth-constraint>
 </security-constraint>

これにより、この後のOC4J固有の構成手順で、sr_developersロールを適切なデプロイ・ロール(セキュリティ・プロバイダに定義されているロール)にマップすることができます。

関連項目

 

Webアプリケーションにおけるrun-asモードと伝播されたアイデンティティ

WebアプリケーションからEJBへのコールの場合、デフォルト・モードとして、Webクライアントのセキュリティ・アイデンティティがEJBコンテナに伝播されます。

状況によっては、WebコンテナやEJBコンテナに認識されていないWebクライアントによるコールを、Webコンテナが許可しなければならない場合があります。これには、インターネットからリソースへのアクセスを許可する場合など、コンテナに認証されていないWebクライアントをサポートするシナリオも含まれます。

このような状況の場合、<servlet>要素の<run-as>サブ要素を使用して、Webアプリケーションのweb.xmlファイルに対して、みなし実行識別性を指定することができます。

<run-as>
   <role-name>sr_developers</role-name>
</run-as>

Webコンテナは、コールのセキュリティ・アイデンティティをサーブレットからEJBレイヤーに伝播します。このとき、<run-as>要素に指定されたロールが使用されます。このロールは、<security-role>要素を使用して事前に宣言されている必要があります。伝播されたアイデンティティは、みなし実行識別性によって非表示になります。

関連項目

 

関連するWebアプリケーションAPI

高度な使用方法として、標準的なJ2EEプログラム機能があります。この機能により、Webアプリケーションを使用してユーザーに関する情報を取得できます。次のメソッドは、ユーザーによるリソースへのアクセスが許可されるかどうかを判断する際に使用できます。

Webアプリケーションで使用できるのは、javax.servlet.http.HttpServletRequestインスタンスに含まれる次のメソッドです。

Enterprise JavaBeanの認証と認可

この項では、EJBのセキュリティ(主に宣言によるセキュリティ構成)について説明します。より高度なプログラム機能を実行するため、APIについても説明します。APIを使用すると、セキュリティ機能を実行時に決定できます。

内容は次のとおりです。

EJB認証

リモート・コンテナ内のEJBにアクセスする場合は、EJBにアクセスしているクライアントの認証が必要です。

また、ORMISが使用されている場合(ORMIはSecure Sockets Layerとともに使用)、CLIENT-CERT認証とEJBを併用できます。

関連項目

 

EJBメソッドベースの認可

J2EEセキュリティ・モデルの場合、保護するEJBリソースは、そのメソッド名または特定のEJB内にある名前マスクによって識別されます。これは、EJBのejb-jar.xmlファイルで指定されます。次の例は、PurchaseOrder Beanのすべてのメソッドを保護する構成を抜粋したものです。

  <method>
   <ejb-name>PurchaseOrder</ejb-name>
   <method-name>*</method-name>
  </method>

これは、ejb-jar.xml内にあるメソッド・パーミッションの一部です。これにより、リソースへのアクセスを許可されているJ2EE論理ロールも指定されます。J2EE仕様に記載されているJ2EE論理ロールには、開発者(アプリケーション・コンポーネント・プロバイダ)、アセンブラ、デプロイヤ、システム管理者などがあります。

次の例では、ロールmyMgrによるPurchaseOrder EJBの任意のメソッドへのアクセスが許可されます。

 <method-permission>
  <role-name>myMgr</role-name>
  <method>
   <ejb-name>PurchaseOrder</ejb-name>
   <method-name>*</method-name>
  </method>
 </method-permission>

これにより、この後のOC4J固有構成手順で、myMgrロールを適切なデプロイ・ロール(セキュリティ・プロバイダに定義されているロール)にマップすることができます。

関連項目

 

EJBアプリケーションにおけるrun-asモードと伝播されたアイデンティティ

ejb-jar.xmlデプロイメント・ディスクリプタには、EJBに対するみなし識別性指定を指定できます。これは、あるEJBが別のEJBをコールする際に、アイデンティティ伝播と連携して使用できます。みなし識別性は、伝播されるアイデンティティを非表示にし、コールされたEJBにまとめて適用され、メソッドを実行する場合のアイデンティティとして使用されます。このアイデンティティは、<security-role>要素を使用して事前に宣言されているJ2EE論理ロールになります。

この場合、<security-identity>要素の<run-as>サブ要素を次のように使用します。

<run-as>
   <role-name>admin</role-name>
</run-as>

関連項目

 

関連するEJB API

高度な使用方法として、標準的なJ2EEプログラム機能があります。この機能により、EJBを使用してユーザーに関する情報を取得できます。次のメソッドは、コール元によるリソースへのアクセスが許可されるかどうかを判断する際に使用できます。

EJBアプリケーションで使用できるのは、javax.ejb.EJBContextインスタンスに含まれる次のメソッドです。

アイデンティティの伝播

J2EEにおけるアイデンティティ伝播とは、オリジナルのWebモジュールまたはEJBによって起動されるEJBに対して、WebモジュールまたはEJBからセキュリティ・アイデンティティを転送することです。

  1. 開始アプリケーション・クライアントまたはWebクライアントは、セキュリティ・アイデンティティを使用して中間のEJBまたはWebモジュールにアクセスします。

  2. 中間のEJBまたはWebモジュールは、セキュリティ・アイデンティティの転送や伝播を行ってターゲットEJBにアクセスし、ターゲットEJBを起動します。

通常、伝播用のモデルには次の2つがあります。

通常、中間コンテナはターゲット・コンテナによって信頼されている必要があります。これは、伝播されたアイデンティティを認証する際に、ターゲット・コンテナはデータを使用できないためです。伝播されたアイデンティティはisCallerInRole()などの認可チェックに使用されるため、信頼されたアイデンティティである必要があります。

OC4Jの場合、アイデンティティ伝播はサブジェクト伝播と呼ばれます。

関連項目

 

Java 2セキュリティ・モデル

Java 2セキュリティ・モデルは、Oracle Application Serverのセキュリティの一部としてサポートされています。ただし、OC4J自体ではなく、基礎となるJDKに実装されています。

このセキュリティ・モデルにより、開発者や管理者にとっては、エンタープライズ・コンポーネント、サーブレットおよびアプリケーションのセキュリティの様々な側面の制御が向上します。Java 2セキュリティ・モデルは機能ベースであり、保護ドメインを設定し、それに対するセキュリティ・ポリシー(「Java 2認可: Java 2セキュリティ・ポリシー」を参照)を設定できます。

ただし、Java 2セキュリティ・モデル自体にいくつかの制限があります。デプロイメント・ディスクリプタにおいては宣言的であるのとは異なり、Java2セキュリティ・モデルはアプリケーション・コードに基づいています。また、ポリシー管理APIも含まず、スケーラビリティが高くないファイルベース実装を使用します。

ここでは、Java 2セキュリティ・モデルの特徴と機能について説明します。

コードベースのセキュリティ

コードを実行する一連のパーミッションを適用することにより、コードベースのセキュリティは、アプリケーションが実行できる操作を制限します。これにより、信頼されないコードや悪意あるコードのアクションからの保護を行い、次のような制限を実行できます。

コードベースのセキュリティは、ユーザーやユーザー・ロールに基づいていないという点で、ロールベースのセキュリティとは異なります。パーミッションは、コードの取得元やデジタル署名の有無(および署名者)など、コードの特性に基づいて付与されます。

コードベースとは、次の例のようにコードの場所を示すURLのことです。

コードソースは、コードベースの概念を拡張するものです。その場所で生成された署名付きコードを検証する証明書の配列(Javaキーストアに格納)をオプションで含むことができます。コードソースは、java.security.CodeSourceインスタンスによって表され、java.net.URLインスタンスとjava.security.cert.Certificateインスタンスの配列を指定することにより作成されます。

標準的なCodeSourceクラスには、次のメソッドが含まれています。

セキュリティ・パーミッション

パーミッションは、Java 2セキュリティ・モデルの基礎となります。すべてのJavaクラスには(ローカルで実行するかリモートでダウンロードするかに関係なく)、そのクラスに使用可能なパーミッション・セットを定義するように構成されたセキュリティ・ポリシーが適用されます。各パーミッションは特定のリソースへの特定のアクセス権を表します。

java.security.Permissionクラスは、指定されたリソースへのアクセス権、およびこのリソースに対する指定アクションへのアクセス権(オプション)を表す抽象クラスです。このクラスの主要メソッドはimplies(Permission permission)です。このメソッドでは、指定されたパーミッションのアクションが、このメソッドのコールに使用されたパーミッション・インスタンスのアクションで暗黙的に定義されているかどうかをチェックします。

一般的なパーミッション・タイプを表すクラスは次のとおりです(いずれもPermissionを直接的または間接的に拡張したものです)。

表2-1は、Javaパーミッション・インスタンスの特性を示したものです。


重要

AllPermissionは必要な場合のみ使用し、使用する際には十分に注意する必要があります。 


表2-1    Javaパーミッション・インスタンスの特性 
要素  説明   

クラス名 

パーミッション・クラス 

java.io.FilePermission 

ターゲット 

このパーミッションが適用されるターゲット名(リソース) 

ディレクトリ/home/* 

アクション 

このターゲットに関連したアクション 

ディレクトリ/home/*に対する読取り、書込みおよび実行権限 

保護ドメイン

保護ドメインにより、パーミッションがコードソースに関連付けられます(「コードベースのセキュリティ」を参照)。保護ドメインを決定するのは、現在有効なポリシーです。Policyクラスのデフォルト実装では、保護ドメインはファイル内の1つの権限エントリです。

各Javaクラスは、ロード時に保護ドメインに関連付けられます。具体的には、ロードされるクラスはすべてjava.security.ProtectionDomainインスタンスに関連付けられます。この保護ドメインに付与されるパーミッションは、静的にバインドするか、アクセス制御チェックが行われたときに動的に決定することができます。各保護ドメインには、JVMの起動時に、構成済のセキュリティ・ポリシーに基づいて一連のパーミッションが割り当てられます。

ProtectionDomainインスタンスには、1つ以上のコードソースが含まれます。また、このインスタンスには、コードを実行するユーザー、クラス・ローダー参照およびPermissionオブジェクトのコレクションを表すパーミッション・セット(java.security.PermissionCollectionインスタンス)を記述するPrincipal配列を含めることもできます。

図2-1は、コード、保護ドメイン、パーミッション・セットの関係を示したものです。それぞれ次のようになります。

Java 2認可: Java 2セキュリティ・ポリシー

Java 2の場合、ポリシーとは、実行するコードとそのコードに付与されるリソース・アクセス権限の間で行われるマッピングのことです。ポリシーの要素には、コードソース、パーミッション、保護ドメインなどがあります。これらについては、すべて前の項に記載されています。

J2SE実装の場合、ポリシーはjava.security.Policyインスタンスとして表されます。通常、このクラスとJava 2セキュリティ・モデルは、OC4J自体ではなく、基礎となるJDKに実装されます。

コードベースのパーミッションの場合、Java 2ポリシーは、java.policyjava2.policyなど(通常の場合の例)の.policyファイル内で宣言されます。ポリシーには、コードベースへのパーミッション権限のコレクションが含まれ、キーストアへの参照を含めることもできます(「鍵の暗号化および交換」を参照)。Java 2ポリシー・ファイルは、通常次の場所にあります。

Java 2認可: セキュリティ・マネージャおよびアクセス・コントローラ

セキュリティ・マネージャ(java.lang.SecurityManagerインスタンス)を使用すると、アプリケーションでJava 2セキュリティ・ポリシーを実装できるようになります。セキュリティ・マネージャを使用することにより、実行されたすべての操作に対して、操作の内容や実行の可否をアプリケーションが判断できるようになります。SecurityManagerクラスには多数のcheckXxx()メソッドがあり、各メソッドでは、操作Xxxが許可されているかどうかをチェックし、許可されていない場合には例外をスローします。この中には、要求されたアクセス(所定のパーミッションによって指定されたもの)が現在有効なセキュリティ・ポリシーによって許可されていない場合に例外をスローするインスタンス・メソッドcheckPermission(Permission)も含まれています。

また、アクセス制御の操作および判定には、アクセス・コントローラ(java.security.AccessControllerインスタンス)も関与します。SecurityManagerメソッドcheckPermission(Permission)のデフォルト実装では、実際にはAccessControllerの静的メソッドcheckPermission(Permission)がコールされます。ただし、AccessController.checkPermission(Permission)メソッドの場合、セキュリティ・マネージャは必要ありません。

基本的には、アクセス・コントローラは次を実行するために使用されます。

システム・リソースへのアクセスを制御するアプリケーションの場合、AccessControllerメソッドによって使用される特定のセキュリティ・モデルおよびアクセス制御アルゴリズムを使用する予定であれば、アプリケーションによってこれらのメソッドを起動する必要があります。一方、実行時にインストールされるSecurityManagerのセキュリティ・モデルに従うアプリケーションの場合、アプリケーションによって、SecurityManagerインスタンスの対応するメソッドを起動する必要があります。

比較すると、SecurityManagerはアクセス制御の中心点の概念を表すのに対し、AccessControllerは、doPrivileged()メソッド(有効な権限を使用して、特定の権限を必要とする指定された権限アクションを実行する)などの特別な機能を持つ特定のアクセス制御アルゴリズムを実装するものです。

アクセス制御コンテキスト(java.security.AccessControlContextインスタンス)の概念もあります。アクセス制御コンテキストを使用すると、特定のセキュリティ・コンテキストに基づいてリソースへのアクセスを制限できます。たとえば、特定の保護ドメイン・インスタンスの配列からアクセス制御コンテキストを作成できます。AccessControlContextクラスは、checkPermission(Permission)メソッドも定義します。この場合このメソッドは、現在の実行スレッドのコンテキストではなく、コール元であるAccessControlContextインスタンスに基づいてアクセスを決定します。したがって、特定のコンテキストと関連するセキュリティ・チェックを異なるコンテキストから実行する必要がある場合に、AccessControlContextインスタンスを使用すると便利です。


重要

Java 2ポリシーを使用するには、セキュリティ・マネージャを指定して有効にする必要があります(「Java 2セキュリティ・マネージャおよびポリシー・ファイルの指定」を参照)。これにより、JDKおよびSubjectメソッドのdoAs()doAsPrivileged()(この章で後述)を使用して、実行するコードのパーミッションをチェックできます。 


関連項目

  • セキュリティ管理の詳細、およびセキュリティ・マネージャとアクセス・コントローラの比較の詳細は、次を参照してください。

    http://java.sun.com/j2se/1.5.0/docs/guide/security/spec/
    security-spec.doc6.html
 

Java Authentication and Authorization Service

Java Authentication and Authorization Service(JAAS)は、アプリケーションでユーザーの認証とアクセス制御の強化に使用されるJavaパッケージです。JAASは、Java 2セキュリティを補完するように設計されています。認可は、実行するコード(Java 2のコードベース・セキュリティ)と、コードの実行者(サブジェクトベースのセキュリティ)に基づいて行われます。

JAASには、標準のPluggable Authentication Module(PAM)フレームワークのJavaバージョンも実装されます。これにより、アプリケーションは認証サービスから独立した状態を維持でき、カスタム認証モジュールの使用がサポートされます。

JAASによりJava 2セキュリティ・モデルのアクセス制御アーキテクチャが拡張され、サブジェクトベースの認可がサポートされます。また、JAASでは、デプロイメント・ディスクリプタ内での宣言によるセキュリティ設定がサポートされるので、コードベースのセキュリティ設定に制限されることがありません。

OC4Jには、スケーラブルなJAASプロバイダが用意されています。OC4Jは、密な認可用の標準メカニズムとして、独自のメカニズムではなくJAASを使用します。OC4Jは、Webベース・アプリケーションとEJBベース・アプリケーションの両方に対してJAAS認可をサポートします。

次に示す項で、JAASの特性と機能について説明します。

プリンシパルとサブジェクト

プリンシパルとは、特定のアイデンティティ(frankという名前のユーザーやhrという名前のロールなど)です。プリンシパルは、java.security.Principalインタフェースを実装するクラスのインスタンスとして表されます。プリンシパル・クラスでは、そのクラスの各インスタンスの一意名を含むネームスペースを定義する必要があります。

サブジェクトは、ユーザー、コンピュータまたはプロセスなど、コンピューティング・サービスを使用する単一ユーザーの関連情報のグループを表します。この関連情報には、サブジェクトのアイデンティティとロール、その他のセキュリティ関連属性(パスワード、暗号キー、その他の資格証明など)が含まれます。サブジェクトは、javax.security.auth.Subjectクラスのインスタンスとして表されます。

ユーザーが認証されると、Subjectインスタンスは認証されたユーザーを表すようになり、次に、適切なPrincipalインスタンスがこのSubjectインスタンスに追加されます。Principalインスタンスは、認証されたユーザーが特定の権限アクションを実行することを認可するために使用されます。

JAAS認証: ログイン・モジュール

JAAS Pluggable Authenticationフレームワーク内では、アプリケーション・サーバーと基礎となる認証サービスは相互に独立した状態を維持します。認証サービスは、アプリケーション・サーバーまたはアプリケーション・コードに変更を加えずに、JAASログイン・モジュールを介してプラグインできます。ログイン・モジュールの主な役割は、提供された資格証明(たとえばパスワード)に基づいてユーザーを認証すること、および適切なプリンシパル(たとえばロール)をサブジェクトに追加することです。使用できるJAASログイン・モジュールの種類には、プリンシパル・マッピング用モジュール、資格証明マッピング用モジュール、Kerberosモジュールがあります。

関連項目

 

ログイン・モジュールの概要

ログイン・モジュールは、javax.security.auth.spi.LoginModuleインタフェースを実装するクラスのインスタンスで、特定タイプの認証を提供するためにアプリケーションにプラグインされます。

このフレームワーク内では、(たとえば、ユーザーがアプリケーションにログインしようとしたときに)ユーザー、ロールまたはコンピューティング・サービスなどのサブジェクトの認証に使用する基本メソッドがjavax.security.auth.login.LoginContextクラスで提供されます。アプリケーションでは、このクラスが、名前と(後述する)コールバック・ハンドラを使用してインスタンス化されます。サブジェクトがアクセスしようとしているアプリケーションによってLoginContextインスタンスのlogin()メソッドが起動されると、LoginContextインスタンスは、渡された名前を採用するメカニズムを使用して構成設定を参照し、アプリケーションに対して起動する適切なログイン・モジュールを決定します。
図2-2に、この概要とログイン・モジュールの機能を示します。

図2-2    ログイン・モジュール


画像の説明

コールバック・ハンドラは、javax.security.auth.callback.CallbackHandlerインスタンスであり、ログイン・モジュールがユーザーと対話してログイン情報を取得できるようにします。CallbackHandlerによって指定される唯一のメソッドは、handle(Callback[])メソッドです。このメソッドは、java.security.auth.callback.Callbackインタフェースを実装するクラスのインスタンスであるコールバックの配列を取ります。コールバックでは、基礎となるセキュリティ・サービスから要求された情報は取得または表示されません。リクエストをアプリケーションに渡し、必要に応じて、要求された情報をセキュリティ・サービスに戻すのみです。javax.security.auth.callbackパッケージ内のコールバック実装には、ユーザー名を処理する名前コールバック・ハンドラ(NameCallback)、パスワードを処理するパスワード・コールバック・ハンドラ(PasswordCallback)およびログイン・フォームにあるユーザー名フィールドやパスワード・フィールド以外の任意のフィールドを処理するテキスト入力コールバック・ハンドラ(TextInputCallback)があります。

様々なログイン・モジュールを異なるアプリケーションで構成したり、単一のアプリケーションで複数のログイン・モジュールを使用できます。JAASフレームワークでは、アプリケーション用に構成されたログイン・モジュールを調整するために2段階の認証プロセスが定義されています。

カスタムまたは外部(サード・パーティ)のログイン・モジュールを、指定のアプリケーションと一緒に使用することができます。Oracleには、ログイン・モジュールとして、RealmLoginModule(ファイルベースおよびLDAPベースのプロバイダ用)、LDAPLoginModule(外部LDAPプロバイダ用)、CoreIDLoginModule(Oracle Access Manager用)およびDBTableOraDataSourceLoginModule(データベース・アイデンティティ・ストアを使用するため)が用意されています。


注意

OC4JおよびOracleAS JAAS Providerとともに宣言によるJ2EE認証を使用するアプリケーションの場合、LoginContextインスタンスを作成する必要はありません。これは、OC4Jによって暗黙的に作成されます。 


ログイン・モジュールのスタック

JAAS PAMアーキテクチャを使用すると、ログイン・モジュールのスタックを定義することにより、エンタープライズ・アプリケーションの認証メカニズムをカスタマイズできます。ログイン・モジュールはそれぞれ独立し、自分自身のユーザー・リポジトリに対して通信を行います。

javax.security.auth.login.Configurationクラスは、アプリケーションの下位にあるログイン・モジュールの構成を表すための抽象クラスです。Configurationインスタンスは、特定のアプリケーションに使用されるログイン・モジュールと、ログイン・モジュールの起動順序を指定します。Configurationクラスは、適切な実装を提供するために拡張されています。

各ログイン・モジュールに対しては、ログイン・モジュール構成の制御フラグ設定により、ログイン・モジュールが、required、requisite、sufficient、optionalのいずれになるかが決定されます。これらの設定の意味は、Configurationクラスの標準的な機能に基づいています。表9-5を参照してください。

ログイン構成には、制御フラグ設定および各ログイン・モジュール固有のオプション設定とともに、完全修飾されたクラス名によって指定されたログイン・モジュールの順序リストも含まれています。認証は、モジュール・リストの順番に従って実行されます。(OC4Jの場合、この順序は、system-jazn-data.xmlファイルに構成されているログイン・モジュールの順序によって決定されます。)

認証全体は、個々のログイン・モジュールとその制御フラグ設定によって制御されます。

JAAS認可: JAASセキュリティ・ポリシー

JAASの場合、ポリシーとは、リソースとユーザー間(またはリソースとロール間)の関連付けのことです。JAASをJava 2セキュリティと統合した場合、Policy APIはプリンシパルに基づいて問合せを処理し、デフォルトのポリシー実装はプリンシパルに基づいて権限エントリをサポートします。Java 2セキュリティ・モデルの拡張の場合、アクセス制御は実行するコードのみではなく、コードの実行者にも基づいて行われます。具体的には、ポリシーは認可ルールのリポジトリで、受領者を指定した場合にその受領者に付与されるパーミッションは何か、という質問に答えるための情報が含まれています。

OC4J 10.1.3.x実装の場合、ポリシーはjavax.security.auth.Policyインスタンスによって表されます。このクラスはJDK 1.4では非推奨ですが、OC4J 10.1.3.x実装では完全サポートされており、Sun社のJDKおよびJ2SEでは引き続きサポートされています。

OC4Jの場合、JAASポリシーはsystem-jazn-data.xmlファイルの<jazn-policy>要素内(または、Oracle Identity Managementセキュリティ・プロバイダを使用している場合はOracle Internet Directory内)で宣言されます。(この機能は、Java 2セキュリティ・モデルの.policyファイルの機能に相当するものです。)この宣言により、ユーザーとロールにパーミッションが付与されます。OracleAS JAAS Provider Admintoolを使用してパーミッションの付与や取消しを行うと、宣言は自動的に更新されます。

JAAS認可: サブジェクト・メソッドdoAs()およびdoAsPrivileged()

Subjectクラスには、JAASモデルの認可用として、次のような標準的なメソッドが含まれています。

図2-3は、doAs()メソッドとdoAsPrivileged()メソッドのサンプル・コード・スタックを示したものです。この場合は、パスワード・ファイルを変更します。doAsPrivileged()メソッドでnullアクセス制御コンテキストを渡す場合、パスワード・ファイルにアクセスする十分な権限をサブジェクトに付与する必要があります。

図2-3    doAs()メソッドおよびAsPrivileged()メソッドのコード・スタック


画像の説明

サブジェクトdoAs()メソッドのプリンシパルに必要なパーミッション

サブジェクトdoAs()メソッドを権限アクションとともに使用する場合、サブジェクトに関連付けられたプリンシパルに対して、必要なパーミッションを付与してください。この場合、OracleAS JAAS Provider Admintoolを使用して付与できます。構成の結果は、system-jazn-data.xmlファイル内の<jazn-policy>要素の下に表示されます。

次の例では、setContextClassLoaderという実行時権限を、myappという名前のPrincipalImplプリンシパルに付与しています。

% java -jar jazn.jar -grantperm sun.security.acl.PrincipalImpl \
      myapp java.lang.RuntimePermission setContextClassLoader

これにより、system-jazn-data.xmlファイル内に次の構成が生成されます。

      <grant>
       <grantee>
         <principals>
          <principal>
            <class>sun.security.acl.PrincipalImpl</class>
            <name>myapp</name>
          </principal>
         </principals>
       </grantee>
       <permissions>
         <permission>
           <class>java.lang.RuntimePermission</class>
           <name>setContextClassLoader</name>
         </permission>
       </permissions>
      </grant>

関連項目

 

開発時におけるセキュリティの考慮事項

ここでは、セキュリティ開発サイクル時の考慮事項について説明します。セキュリティ・モデル間の比較の概要と、アプリケーション開発でセキュリティを確保するための手順を説明します。

概要: J2EE、Java 2、JAASのセキュリティ・モデル比較

この章で説明するJ2EE、Java 2、JAASの各セキュリティ・モデルの相違点の概要は、次のとおりです。

必要に応じて、任意のモデルを使用するか、アプリケーション内のモデルを組み合せることができます。OC4Jの場合、3種類のモデルすべてが完全サポートされています。ニーズが満たされるのであれば、J2EE認可モデルを使用することをお薦めします。これは、管理者やデプロイヤにとって最も単純な方法です。必要に応じてアプリケーションを拡張し、密なコードベース・セキュリティやサブジェクトベース・セキュリティに対して、Java 2セキュリティやJAASセキュリティを使用することができます。

関連項目

  • アプリケーション・セキュリティの方法の詳細は、「認可の方法」を参照してください。

 

セキュアなJ2EEアプリケーションを開発する手順

J2EEソフトウェアの開発は、開発-デプロイ-管理というサイクルで行われます。Oracle Application Serverのセキュリティ実装は、このサイクルのデプロイ-管理部分で重要な役割を果します。開発者はセキュリティをプログラムで統合する必要がなくなり、より便利な宣言によるセキュリティ・モデルを使用できます。

次のリストに、セキュアなアプリケーション開発に固有のタスクに重点を置いてJ2EE開発サイクルの概要を示します。

  1. 開発者は、Webコンポーネント、Enterprise Bean、サーブレット、アプリケーション・クライアントを必要に応じて作成します。

    Oracle Application Serverのセキュリティ実装はプログラム・インタフェースを提供しますが、開発者はそれを使用することなくコンポーネントを作成できます。

  2. 開発者はJ2EE論理ロールを定義し、セキュリティ制約を使用してこれらのロールを権限に割り当てます。すべてのロールに対して、標準J2EEデプロイメント・ディスクリプタの構成が使用されます。

  3. アセンブラは、これらのコンポーネントから構成されるEnterprise Archive(EAR)ファイルを作成します。

    このプロセスの一部として、アプリケーション・アセンブラは環境に適切なオプションを指定します。

  4. アセンブラは、アプリケーション・レベルのセキュリティ制約を定義し、モジュール・レベルの構成間で発生する可能性のある競合を解決します。

  5. デプロイヤがEARをOC4Jのインスタンスにインストールします。

    デプロイメント・プロセスの一部として、デプロイヤはJ2EEロールをデプロイメント・ユーザーおよびロールにマップすることができます(「Application Server Controlを介したセキュリティ・ロール・マッピングの指定」を参照)。

  6. システム管理者がデプロイされたアプリケーションをメンテナンスおよび管理します。

    このタスクには、アプリケーション・ユーザーからの要求に応じたデプロイメント環境のロールと、ユーザーの作成および管理が含まれます。

Java 2またはJAASの機能を使用した密なコードベースのアクセス制御やサブジェクトベースのアクセス制御には、次のような考慮事項があります。

  1. 開発者は、アクセスされる可能性があり、必要に応じて保護が必要なすべてのリソースを特定する必要があります。

  2. 開発者は、パーミッションを定義してリソースを保護する必要があります。(J2SEには事前に定義されたパーミッションがあり、必要に応じて使用できます。)

  3. 開発者は、実行時認可チェック用のコードを実装する必要があります。

  4. デプロイヤは開発者と協議し、アプリケーションに対して適切なJAASモード構成を定義する必要があります。

  5. システム管理者は、適切なパーミッションを強制するポリシー構成を維持管理する必要があります。OracleAS JAAS Provider Admintoolを使用したパーミッションの付与など、ポリシーのプロビジョニングは、実行時よりも前に完了しておく必要があります。

    関連項目

    • セキュリティのベスト・プラクティスの詳細は、『Oracle Application Serverベスト・プラクティス』を参照してください(リリース後に入手可能)。

     


戻る 次へ
Oracle
Copyright © 2003, 2008 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引