| Oracle® Fusion Middleware Oracle Entitlements Server開発者ガイド 11gリリース2 (11.1.2.3) E67355-01 |
|
![]() 前 |
![]() 次 |
ポリシーの配布は、ポリシーを構成するために使用するプロセスと、ポリシー決定ポイント(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クライアント(セキュリティ・モジュール)がポリシー・ストアからポリシーおよびポリシー変更を定期的に取得(プル)する場合、これは制御されない配布と呼ばれます。ポリシーの変更は、ポリシー・ストアに保存され、制御されない配布は、その変更を次の定義済の間隔で取得します。制御されない配布は、セキュリティ・モジュールによって開始され、完全に定義されていないポリシーを取得することがあります。ポリシー・ストアは、オンラインで、制御されない配布に対して常に使用可能である必要があります。制御されない配布は、どのポリシー・ストア・タイプでもサポートされます。
セキュリティ・モジュールはポリシー決定ポイント(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ごとに開始時刻、終了時刻、配布のイニシエータおよび配布が成功したかどうかの情報を含んでいます。