Oracle® Fusion Middleware Oracle Entitlements Server開発者ガイド 11gリリース2 (11.1.2.2) B71698-05 |
|
![]() 前 |
![]() 次 |
ポリシーの配布は、ポリシーを構成するために使用するプロセスと、ポリシー決定ポイント(PDP)で使用可能なポリシー・データによって行います。このデータによってポリシーの評価や、認可の付与または拒否の決定が可能となります。この章の内容は次のとおりです。
Oracle Entitlements Serverでのポリシーの管理とポリシーの配布は、異なる操作です。ポリシー管理操作は、ポリシー・ストア内のポリシーを定義、変更および削除するために使用されます。ポリシー配布コンポーネントは、保護されたリソースへのアクセス権を付与または拒否するためにデータを使用するPDPエンドポイント(セキュリティ・モジュール)で、ポリシーを使用可能にします。ポリシーは、配布されるまで適用されません。ポリシー配布には、次のアクションのいずれかまたはすべてが含まれます。
ポリシー・ストアからのポリシーの読取り。
メモリー内ポリシー・キャッシュでのポリシー・オブジェクトのキャッシング。このキャッシュはセキュリティ・モジュールによって管理し、認可リクエスト処理で使用されます。
ポリシー配布コンポーネントに対してローカルな、ポリシー・ストアから独立したファイルベースの永続キャッシュにあるポリシー・オブジェクトの保存。
中央のOracle Entitlements Server管理コンソールと、(保護されたアプリケーションに)ローカルにインストールされたセキュリティ・モジュールの両方に、ポリシー配布コンポーネントが含まれます。このアーキテクチャによって、次の2つのデプロイメント・シナリオが認められます。1つ目は、多くのセキュリティ・モジュールと通信できる集中ポリシー配布コンポーネントに関係し、2つ目は、1つのセキュリティ・モジュールに対してローカルで、1つのセキュリティ・モジュールと通信するポリシー配布コンポーネントに関係します。次の各項では、詳細を説明します。
集中ポリシー配布コンポーネント・シナリオは、セキュリティ・モジュールのポリシー配布コンポーネント・クライアントと通信するサーバーとして機能する、(管理コンソール内の)ポリシー配布コンポーネントの使用に関係します。図4-1は、このシナリオで、セキュリティ・モジュールのポリシー配布コンポーネント・クライアントがポリシー・ストアと通信しない方法を示します。ポリシーの配布は、Oracle Entitlements Server管理者によって開始され、ポリシー配布コンポーネント・クライアントにプッシュされます。現在、4.2.1項「制御された配布」で説明しているように、制御された方法でのみデータをプッシュできます。このシナリオでは、多くのセキュリティ・モジュールと通信できる集中ポリシー配布コンポーネントが許可されます。
図4-1 Oracle Entitlements Serverポリシー配布コンポーネントの使用方法
ローカルの(セキュリティ・モジュールへの)シナリオは、ポリシー・ストアと直接通信するセキュリティ・モジュールのポリシー配布コンポーネントに関係します。このシナリオでは、ローカルのポリシー配布コンポーネントは、1つのセキュリティ・モジュールのみと通信できます。アプリケーションは、管理操作を管理し、ポリシー配布コンポーネントのセキュリティ・モジュール・インスタンスがポリシーまたはポリシー・デルタを配布するタイミングを決定します。このデプロイメントでは、図4-2に示すように、ポリシー配布コンポーネントは、(配布されるデータがあるかポリシー・ストアを定期的にチェックすることによって、)ポリシー・ストアからデータをプルし、ポリシー・ストアからポリシー・データを送信して、管理者が開始したポリシー配布の後にPDPに対して使用可能にします。
現在、4.2.1項「制御された配布」で説明しているような制御された方法、または、4.2.2項「制御されない配布」で説明しているような制御されない方法のいずれかで、データをプルできます。
Oracle Entitlements Serverでは、アプリケーションおよびサービスを保護する個々のセキュリティ・モジュールへのポリシーの配布タスクを処理します。ポリシー・データは、制御された方法または制御されない方法のいずれかで配布されます。配布モードは、各セキュリティ・モジュールのjps-config.xml
構成ファイルで定義されています。指定した配布モードは、そのセキュリティ・モジュールにバインドされたすべてのApplicationPolicy
オブジェクトに適用可能です。次の各項では、配布モードの詳細を説明します。
制御された配布は、ポリシー配布コンポーネントによって開始され、PDPクライアント(セキュリティ・モジュール)が最後の配布以降に作成または変更されたポリシー・データを受信することを確認します。この点において、配布は、新規または更新済のポリシー・データを配布するための明示的なアクションを実行する、ポリシー管理者によって制御されます。(ポリシー配布コンポーネントは、ポリシー変更および配布を追跡するバージョニング・メカニズムを維持します。)制御された配布を有効化すると、セキュリティ・モジュールは、ポリシー配布コンポーネントの配布を直接リクエストできません。
注意: セキュリティ・モジュールが開始し、それ自体を構成IDを持つポリシー配布コンポーネントに登録する場合は例外です。ポリシーは、この登録に基づいて、セキュリティ・モジュールに配布されます。 |
制御された配布はプッシュまたはプルになります。制御されたプッシュ配布の場合、ポリシー配布コンポーネントは、ローカルの永続キャッシュ(ポリシー・オブジェクトを格納し、ポリシー・ストアから独立するためにPDPによって維持されているファイルベースのキャッシュ)にデータを格納するセキュリティ・モジュールに、新規または更新済のポリシー・データを配布します。制御されたプル配布の場合、セキュリティ・モジュール(とローカルのポリシー配布コンポーネント)は、ポリシー・ストアからの新規および更新されたポリシー・データを取得します。制御されたプッシュ配布は、デフォルトのモードです。
注意: 大規模なポリシー・セットがセキュリティ・モジュールに配布される際のパフォーマンスとスケーラビリティを向上させるため、本番環境では制御されたプル・モードを使用することをお薦めします。 |
ポリシー配布コンポーネントは、セキュリティ・モジュール・クライアントへの一定のライブ接続を維持しません。ポリシーを配布する前に接続を確立します。そのため、セキュリティ・モジュールは、ポリシーを決定する際にポリシー・ストアに依存しません。ポリシー・ストアがオフラインの場合、それ自体のローカル・キャッシュを使用できます。セキュリティ・モジュールが開始すると、ポリシー・ストアが使用可能かどうかチェックされます。使用不可の場合、セキュリティ・モジュールはローカルの永続キャッシュからポリシー・データを使用します。
ポリシー・データのフラッシュ配布は、distributePolicy()
メソッドのflush
パラメータを使用することで実行できます。フラッシュ配布は、ポリシー・ストア内のすべてのポリシー・オブジェクトを完全に再配布するための準備として、ローカルに保存されたポリシーをクリーンアップするよう、ポリシー配布コンポーネントがセキュリティ・モジュールに通知する場合に使用します。詳細は、4.4項「ポリシー配布の開始」を参照してください。
注意: 制御された配布は、データベース・タイプのポリシー・ストアでのみサポートされ、LDAPベースのポリシー・ストアではサポートされません。LDAPポリシー・ストア用に配布APIが呼び出される場合、それは操作不能になります。 |
制御された配布では、ポリシー配布操作のいずれかの部分が失敗すると、配布操作全体が失敗します。ポリシー配布コンポーネントの構成プロパティは、『Oracle Fusion Middleware Oracle Entitlements Server管理者ガイド』を参照してください。
セキュリティ・モジュールはポリシー決定ポイント(PDP)として動作し、認可のリクエストを受信し、適用できるポリシーに基づいて評価して決定し、その決定をポリシー決定ポイント(PEP)である、最初に認可コールを作成したエンティティに返します。このプロセスが機能するには、セキュリティ・モジュールが適切なポリシーを取得できる必要があります。これは、セキュリティ・モジュールのインスタンスを適切なApplicationPolicy
オブジェクトにバインディングすることで実現できます。ポリシー配布の開始時、ApplicationPolicy
オブジェクトにバインディングされたすべてのセキュリティ・モジュールに、そのオブジェクトに関連付けられたポリシー・データが配布されます。デプロイされたセキュリティ・モジュールごとに構成情報があり、ポリシー・ストアに保存されます。SMEntry
オブジェクトは、インスタンスの構成情報へのポインタです。
注意: セキュリティ・モジュールの開始時に、それ自体をOracle Entitlements Serverに登録します。この登録レコードは、ポリシー・ストアにPDPInfoEntry オブジェクトとして追加されます。登録レコードには、セキュリティ・モジュールのエンドポイントと、命名された固有の識別子があります。PDPInfoEntry インタフェースは、oracle.security.jps.service.policystore.info.distribution パッケージ内にあります。このパッケージには、配布のステータス(DistributionStatusEntry )に関する情報と、特定のセキュリティ・モジュールへの配布のステータス(PDPStatusEntry )に関する情報を取得するために使用するインタフェースも含まれています。 |
セキュリティ・モジュールをApplicationPolicy
オブジェクトにバインドするには、SMEntry
オブジェクト(セキュリティ・モジュールの構成を表します)を作成し、ApplicationPolicy
オブジェクトにバインドします。例4-1は、PolicyStore
のインスタンスを取得して、ConfigurationManager
を取得することによりSMEntry
オブジェクトを作成する方法を示しています。これは、1つ以上のApplicationPolicy
オブジェクトをバインディングするために使用できる、SMEntry
オブジェクトを返します。
例4-1 createSecurityModule()メソッドの使用方法
//get the policy store and configuration manager PolicyStore ps = ctx.getServiceInstance(PolicyStore.class); ConfigurationManager configMgr = ps.getConfigurationManager(); //create the SM configuration SMEntry sm = configMgr.createSecurityModule("MyDomainSM", "MyDomainSM Configuration", "MyDomain Security Module Configuration");
createSecurityModule()
パラメータの値は次のように定義されています。
smName - MyDomainSMはSMEntry
オブジェクトの固有の識別子です。セキュリティ・モジュールは、この値を使用してポリシー・ストアに接続し、構成情報を取得します。SMEntry
オブジェクト自体には、構成情報は含まれておらず、単純にポイントしているだけです。
表示名 - MyDomainSM ConfigurationはSMEntry
オブジェクトのオプションの判読可能名です。
説明 - MyDomain Security Module Configurationは、SMEntry
オブジェクトについて説明するオプションの情報です。
作成後、ConfigurationBindingManager
インタフェースをコールし、bindSecurityModule()
メソッドを使用して、SMEntry
オブジェクトを特定のApplicationPolicy
オブジェクトにバインドします。例4-2に、この手順を示します。
例4-2 bindSecurityModule()メソッドの使用方法
//get the policy store and the configuration binding manager PolicyStore ps = ctx.getServiceInstance(PolicyStore.class); ConfigurationBindingManager configBindingMgr = ps.getConfigurationBindingManager(); //bind Security Module to Application Policy configBindingMgr.bindSecurityModule("MyDomainSM", "MyAppPolicy");
bindSecurityModule()
パラメータの値は次のように定義されています。
smName - MyDomainSMはSMEntry
オブジェクトが作成されたときに定義された固有の識別子です。
AppID - MyAppPolicyはApplicationPolicy
オブジェクトが作成されたときに定義された固有の識別子です。
次の各項では、セキュリティ・モジュールの構成とバインディングについて説明します。
ConfigurationManager
のインスタンスを取得したら、SMEntry
オブジェクトを削除、変更および取得することもできます。例4-3は、SMEntry
オブジェクトの固有識別子を渡すことによって、特定のセキュリティ・モジュールの構成を取得する方法を示しています。
例4-3 getSecurityModule()メソッドの使用方法
//get the policy store and configuration manager PolicyStore ps = ctx.getServiceInstance(PolicyStore.class); ConfigurationManager configMgr = ps.getConfigurationManager(); //get Security Module configuration SMEntry sm = configMgr.getSecurityModule("MyDomainSM");
MyDomainSMはSMEntry
オブジェクトが作成されたときに定義された固有の識別子です。さらに、getSecurityModules()
メソッドをコールし、SecurityModuleSearchQuery
クラスを使用して検索条件の配列を渡すことで複数のSMEntry
オブジェクトを取得できます。例4-4は、セキュリティ・モジュールの構成を削除する方法を示しています。
例4-4 deleteSecurityModule()メソッドの使用方法
//get the policy store and configuration manager PolicyStore ps = ctx.getServiceInstance(PolicyStore.class); ConfigurationManager configMgr = ps.getConfigurationManager(); //get Security Module configuration configMgr.deleteSecurityModule("MyDomainSM");
この場合も、MyDomainSMはSMEntry
オブジェクトが作成されたときに定義された固有の識別子です。
ConfigurationBindingManager
インスタンスを取得したら、特定のセキュリティ・モジュールにバインドされているApplicationPolicy
を取得するか、特定のApplicationPolicy
にバインドされているセキュリティ・モジュールを取得することもできます。例4-5は、特定のApplicationPolicy
オブジェクトにバインドされているすべてのSMEntry
オブジェクトの識別子を取得するgetBoundSecurityModules()
メソッドの使用方法について示しています。
例4-5 getBoundSecurityModules()メソッドの使用方法
//get the policy store and the configuration binding manager PolicyStore ps = ctx.getServiceInstance(PolicyStore.class); ConfigurationBindingManager configBindingMgr = ps.getConfigurationBindingManager(); //get Security Module bound to Application Policy List<SMEntry> sms = configBindingMgr.getBoundSecurityModules("MyAppPolicy");
MyAppPolicyはApplicationPolicy
オブジェクトが作成されたときに定義された固有の識別子です。getBoundSecurityModules()
メソッドは、ApplicationPolicy
オブジェクトにバインドされているすべてのSMEntry
オブジェクトの固有の識別子のリストを返します。例4-6は、逆の操作を示しており、特定のセキュリティ・モジュールにバインドされたすべてのApplicationPolicy
オブジェクトを取得します。
例4-6 getBoundApplications()メソッドの使用方法
//get the policy store and the configuration binding manager PolicyStore ps = ctx.getServiceInstance(PolicyStore.class); ConfigurationBindingManager configBindingMgr = ps.getConfigurationBindingManager(); //get Application Policy bound to Security Module List<ApplicationPolicy> apps = configBindingMgr.getBoundApplications("MyDomainSM");
MyDomainSMはSMEntry
オブジェクトが作成されたときに定義された固有の識別子です。getBoundApplications()
メソッドは、SMEntry
にバインドされているApplicationPolicy
オブジェクトすべての固有の識別子のリストを返します。例4-7は、SMEntry
オブジェクトと対応するApplicationPolicy
オブジェクトとのバインドを解除する方法を示しています。
例4-7 unbindSM()メソッドの使用方法
//get the policy store and the configuration binding manager PolicyStore ps = ctx.getServiceInstance(PolicyStore.class); ConfigurationBindingManager configBindingMgr = ps.getConfigurationBindingManager(); //unbind Application Policy from Security Module configBindingMgr.unbindSM("MyDomainSM", "MyAppPolicy");
MyDomainSMはSMEntry
オブジェクトが作成されたときに定義された固有の識別子です。MyAppPolicyはApplicationPolicy
オブジェクトが作成されたときに定義された固有の識別子です。
プログラムにより、distributePolicy()
メソッドをコールすることによってポリシーの配布が開始されます。このメソッドは、ApplicationPolicy
オブジェクトに対して作成されたポリシーを、バインドされたセキュリティ・モジュールに配布します。PDPエンドポイントは、バインドされたポリシーのみを受信します。例4-8は、PolicyDistributionManager
のコール方法とdistributePolicy()
メソッドの使用方法を示しています。さらに、配布のステータスを確認するコードと、処理が100%完了するまで待機するコードを含んでいます。
例4-8 distributePolicy()メソッドの使用方法
//get the application policy PolicyStore ps = ctx.getServiceInstance(PolicyStore.class); ApplicationPolicy bankApplication = ps.getApplicationPolicy("AcmeBank"); //get the PolicyDistributionManager PolicyDistributionManager pdm = bankApplication.getPolicyDistributionManager(); //distribute policies String distID = pdm.distributePolicy(true); DistributionStatusEntry status = pd.getDistributionStatus(distID); while (status.getPercentComplete() != 100) { Thread.currentThread().sleep(200); status = pdm.getDistributionStatus(distID); }
distributePolicy()
のflush
パラメータはtrueに設定することに注意してください。これは、ポリシーがフラッシュ方式で配布されることを示しています。つまり、ポリシー・ストア内のすべてのポリシー・オブジェクトを新たに完全に再配布するための準備として、ローカルに保存されたポリシーをクリーンアップするよう、ポリシー配布コンポーネントがセキュリティ・モジュールに通知します。falseの値は、差分のみが配布されるポリシーの増分配布を示します。
distributePolicy()
メソッドは、配布の識別子の文字列を返します。これをgetDistributionStatus()
メソッドを使用してアプリケーションに渡すことで、配布の進行状況を問い合せることができます。
注意: distributePolicy() は、非同期メソッドです。配布が完了する前にアプリケーションが停止した場合は、配布プロセスが中断します。 |
2番目のgetDistributionStatus()
メソッドは、入力に開始時刻と終了時刻を取ります。DistributionStatusEntry
オブジェクトのリストを返します。DistributionStatusEntry
オブジェクトは配布のステータス(完了または実行中)を表し、PDPごとに開始時刻、終了時刻、配布のイニシエータおよび配布が成功したかどうかの情報を含んでいます。