Oracle® Fusion Middleware Oracle Entitlements Server開発者ガイド 11gリリース2 (11.1.2.3) E67355-01 |
|
前 |
次 |
Oracle Entitlements Serverには、ポリシーやポリシー・オブジェクトをプログラムによって作成するためのJavaアプリケーション・プログラミング・インタフェース(API)が含まれています。この章では、それらの様々なポリシー・オブジェクトをAPIを使用して作成する方法について説明します。
内容は次のとおりです。
注意: 対応するWebLogic Scripting Tool (WLST)コマンドは、『Oracle Fusion Middleware Oracle Entitlements Server管理者ガイド』を参照してください。 |
The Oracle Entitlements Server Java APIは、第1章「ポリシー・モデルの使用方法」で説明されているポリシー・オブジェクトの作成、管理(読取り、変更、削除)および検索を行うために使用できます。ポリシー・オブジェクトは一般に、名前の最後がEntry
のインタフェースです。oracle.security.jps.service.policystore.info
パッケージには、PolicyEntry
、AppRoleEntry
およびPermissionSetEntry
など、多くのポリシー・オブジェクトが含まれています。oracle.security.jps.service.policystore.info.resource
パッケージには、ResourceEntry
、ResourceTypeEntry
およびResourceActionsEntry
などが含まれています。ポリシー・オブジェクトを作成または管理するには、次の操作を行う必要があります。
ポリシー・ストアへのハンドルを取得します。
2.3.1項「ポリシー・ストアへのアクセス」を参照してください。
オブジェクトを作成する(または作成済の)アプリケーション・ポリシーを取得します。
2.3.2項「アプリケーション・ポリシーの作成」を参照してください。
適切なエンティティ管理インタフェースのインスタンスを取得します。エンティティ・マネージャを使用してポリシー・オブジェクトを作成および管理します。
oracle.security.jps.service.policystore.entitymanager
パッケージには、ResourceManager
、PolicyManager
、AppRoleManager
、PermissionSetManager
など、すべてのインタフェースが含まれています。
次の項では、ポリシー・オブジェクトに対して特定の操作を実行するためにどのようにAPIを使用できるかをより具体的に説明します。
詳細は、次のいずれかまたは両方のOracle Entitlements Server Java APIリファレンス・ガイドを参照してください。
Oracle Fusion Middleware Oracle Entitlements Server管理Java APIリファレンス
Oracle Fusion Middleware Oracle Entitlements Server PDP拡張Java APIリファレンス
特定のポリシー・オブジェクトを作成するには、ポリシー・ストアと該当するエンティティ・マネージャ・インタフェースのインスタンスへのハンドルを取得して、create
メソッドを使用します。ポリシー・オブジェクトには、Name、Display Name、Descriptionなどの共通の要素があり、作成時にはこれらを定義する必要があります。作成しているオブジェクトの型固有のその他の要素も定義する必要があります。createメソッドの例とパラメータの説明は、2.3項「単純なポリシーの実行」および2.4項「単純なポリシー用の詳細な要素の作成」
を参照してください。
特定のポリシー・オブジェクトを変更するには、ポリシー・ストアへのハンドルを取得して、新しいオブジェクトを作成するか、既存のものを検索してオブジェクトを取得します。オブジェクトのインスタンスはメモリー内に配置されます。オブジェクトのメソッドを使用して、メモリー内インスタンスを変更します。必要に応じて1つ以上をコールできます。変更が完了したら、オブジェクトのManager
インタフェースのインスタンスを取得して、modify
メソッドを使用し、メモリー内オブジェクトへの参照を渡します。これにより、ポリシー・ストア内のオブジェクト自体に変更が伝播されます。これらの操作の例とパラメータの説明は、第3章「プログラムによるポリシー・オブジェクトの構成」を参照してください。
ポリシー・オブジェクトを削除するには、ポリシー・ストアと、該当するエンティティ・マネージャ・インタフェースのインスタンスへのハンドルを取得します。オブジェクトの定義済の名前をマネージャのdelete
メソッドに渡して削除します。また、一部のオブジェクトはカスケード削除が可能です。詳細は、第3章「ポリシー・オブジェクトのプログラムによる管理」を参照してください。
ポリシー定義で参照するポリシー・オブジェクトの取得には、しばしば検索が必要になります。ポリシー・オブジェクトを検索するには、単純な問合せまたは複雑な問合せを使用します。各Manager
インタフェースには、問合せのタイプごとに単数または複数のget
メソッドがあります。単数のget
メソッドでは、オブジェクトの定義済の名前を渡すことで特定のポリシー・オブジェクトを検索および取得できます。複数のget
メソッドは、複雑な問合せを使用して複数のオブジェクトを取得するために使用します。複数のget
メソッドの場合は、oracle.security.jps.service.policystore.search
に定義されているSearchQuery
クラスを使用して検索基準を渡します。表2-1は、標準のSearchQuery
クラスのパラメータおよび説明を示しています。
表2-1 複雑なSearchQueryパラメータの使用方法
パラメータ | 説明 |
---|---|
policy_object |
問合せを実行するために使用するプロパティが定義された列挙。オブジェクト・タイプに応じて名前、表示名、説明などを格納できます。特定の検索タイプで許可されたプロパティは、Java APIリファレンスを参照してください。 |
negation |
値に |
operator |
|
search string |
検索に使用される文字列の値を取得します。
|
|
検索文字列を検索対象の値と一致させる方法を定義する列挙です。次のいずれかを定義する必要があります。
|
これらの検索操作の詳細は、第3章「ポリシー・オブジェクトのプログラムによる管理」を参照してください。特定のポリシー・オブジェクト固有のSearchQuery
パラメータ情報についてはOracle Entitlements Server Java APIリファレンスを参照してください。
Oracle Entitlements Serverのポリシー・ストアでは、XACML 2.0標準に準拠するために、追加のデータ型へのサポートが追加されています。使用されるデータ型は、データ自体の種類とOracle Entitlements Serverの解析方法によります。たとえば、特定のIPアドレスがあり、Oracle Entitlements Serverでマスクの処理にIPアドレスのセマンティクスを使用する場合は、OpssIPAddress
データ型を使用してください。OpssString
を使用した場合は、Oracle Entitlements ServerがIPアドレスとして処理する必要があると認識しません。表2-2に、データ型を示します。
表2-2 データ型の説明
データ型 | 説明 |
---|---|
ANY_URI |
Uniform Resource Identifier (URI)とオプションの記述子を表します。 |
BASE64_BINARY |
任意のBase64エンコード・バイナリ・データを表します。 |
BOOLEAN |
trueまたはfalseを表します。 |
DATE |
整数値化された年、月、日、時間および分のプロパティ、小数値化された2番目のプロパティおよびブール値のタイムゾーン・プロパティによってオブジェクトとして表示可能な値です。 |
DATE_TIME |
整数値化された年、月、日、時間および分のプロパティ、小数値化された2番目のプロパティおよびブール値のタイムゾーン・プロパティによってオブジェクトとして表示可能な値です。 |
DAYTIME_DURATION |
座標系にグレゴリオ暦の年、月、日、時、分および秒の要素が指定されたオブジェクトとして時間間隔を表します。 |
DNS_NAME |
ドメイン・ネームサービス(DNS)ホストの名前と、オプションのポートまたはポートの範囲を表します。 |
DOUBLE |
IEEE倍精度64ビット浮動小数点型を表します。 |
HEX_BINARY |
任意の16進エンコード・バイナリ・データを表します。 |
INTEGER |
有限長の10進数桁とオプションの先頭符号を表します。符号を省略した場合、正の数値が仮定されます。 |
IP_ADDRESS |
インターネット・プロトコル(IP)・アドレスを表します。 |
RFC822_NAME |
電子メール・アドレスを表します。 |
STRING |
文字列を表します。 |
TIME |
特定の毎日繰り返す時刻を表します。PDPが制約または義務に指定された時刻を評価するとき、PDPがデプロイされたホストのローカル時間として解釈されます。 |
X500_NAME |
識別名(DN)を表します。 |
YEARMONTH_DURATION |
時間間隔を表します。年数と月数を格納可能です。 |
これらのデータ型は、次の用途に使用できます。
データ型を属性(動的属性、リソース属性、カスタム属性リトリーバによって取得されたカスタム属性)に割り当てることによる属性の宣言
ポリシー・ルールの制約
義務内での値の戻し
入力パラメータ
顧客/組込み関数の戻り値の宣言
表2-3に、各データ型で使用できる関数のカテゴリを示します。
表2-3 データ型に対する関数のカテゴリ
関数のカテゴリ | 説明 |
---|---|
ARITHMETIC_FUNCTION |
IntegerまたはDoubleデータ型の2つの引数を取得し、IntegerまたはDoubleデータ型を返します。 |
BAG_FUNCTION |
プリミティブ・データ型のバッグ(順序付けられていない値の集合体。値が重複する場合もあります)を処理し、たとえばバッグ内のデータ型や、バッグ内の値の数を判定します。 |
CUSTOM_FUNCTION |
|
DATE_TIME_ARITHMETIC_FUNCTION |
日時データ型を使用した算術演算を実行します。 |
EQUALITY_COMPARISON_FUNCTION |
2つの引数(整数または倍精度データ型)を比較して、それらが等しいかどうかについてのブール値を返します。 |
GREATER_THAN_COMPARISON_FUNCTION |
2つの引数(整数または倍精度データ型)を比較して、一方が他方よりも大きいかどうかについてのブール値を返します。 |
GREATER_THAN_EQUAL_COMPARISON_FUNCTION |
2つの引数(整数または倍精度データ型)を比較して、一方が他方よりも大きいまたは等しいかどうかについてのブール値を返します。 |
HAS_VALUE_EXISTENCE_FUNCTION |
この関数は属性名を引数として取ります。属性に値が割り当てられている場合はtrueを返します。 |
HIGHER_ORDER_BAG_FUNCTION |
通常時に関数をバッグに適用できるようにバッグを処理します。 |
LESS_THAN_COMPARISON_FUNCTION |
2つの引数(整数または倍精度データ型)を比較して、一方が他方よりも小さいかどうかについてのブール値を返します。 |
LESS_THAN_EQUAL_COMPARISON_FUNCTION |
2つの引数(整数または倍精度データ型)を比較して、一方が他方よりも小さいまたは等しいかどうかについてのブール値を返します。 |
LOGICAL_FUNCTION |
ブール・データ型引数を処理します。 |
NUMERIC_CONVERSION_FUNCTION |
IntegerまたはDoubleデータ型の1つの引数を取得し、対応するIntegerまたはDoubleデータ型を返します。 |
REGEXP_FUNCTION |
2つの引数を比較し、1つ目のOpssStringは正規表現を表します。2つ目の引数(任意のタイプ)がその正規表現に一致するかどうかをチェックします。 |
SET_FUNCTION |
(重複する要素の削除により)2つのバッグの模倣セットを処理します。 |
SPECIAL_MATCH_FUNCTION |
様々なデータ型を処理し、指定された標準の一致アルゴリズムに基づいてブールで評価します。 |
STRING_CONVERSION_FUNCTION |
文字列データ型を取得し、定義に従って変換します。 |
STRING_FUNCTION |
文字列を取得し、他のデータ型に変換します。 |
TYPE_IS_IN_EXISTENCE_FUNCTION |
2つの引数を取ります。1つ目は単一タイプ・オブジェクト、2つ目は同じタイプのバッグです。この関数は、1つ目の引数の値が2つ目の引数で表されたバッグに存在する場合にtrueを返します。 |
VALID_FOR_FUNCTION |
この関数は、最初の引数で指定された時間のあいだ、決定キャッシュを有効に保持します。 |
これらの関数は、次の用途に使用できます。
ポリシー・ルールの制約
義務内での値の戻し
カスタム/組込み関数の入力パラメータ
データ型とそれらの使用方法の詳細は、XACML 2.0仕様を参照してください(http://docs.oasis-open.org/xacml/
)。
1.2項「単純なポリシーの構成」で説明した単純なポリシーの手順を実行するには、特定の順序でオブジェクトを作成する必要があります。たとえば、ResourceEntry
オブジェクトは、ResourceType
オブジェクトを定義した後にのみ作成できます。次のセクションは、単純なポリシーをプログラムで実行する場合の適切な順序で並べられています。
注意: ポリシー・オブジェクトを作成する前に、ポリシー・モデル・コンポーネントの全体的な編成構造を決定する必要があります。たとえば、1つのApplicationPolicy オブジェクトのみを実装し、その親の内部の複数のPolicyDomainEntry オブジェクトにポリシーを委任すると便利な場合があります。詳細は、5.7項「ポリシー・ドメインの委任」を参照してください。 |
あらゆるポリシー管理アクティビティより前に、PolicyStore
オブジェクトのインスタンスを取得する必要があります。次の手順は、oracle.security.jps
パッケージのインタフェースを使用して、PolicyStore
オブジェクトを取得する方法を示しています。Smithは、ポリシーを管理する管理権限を持ったユーザーとして指定されています。
注意: コールが認可されていないユーザーのメソッドには、エラーが返されます。 |
PolicyStore
のインスタンスを取得します。次の例では、コードがJVM引数-Doracle.security.jps.config="absolutepath of jps-config.xml"
で起動されることを想定しています。
JpsContextFactory ctxFact = JpsContextFactory.getContextFactory(); JpsContext ctx = ctxFact.getContext(); PolicyStore ps = ctx.getServiceInstance(PolicyStore.class); if (ps == null) { // if no policy store instance configured in jps-config.xml System.out.println("no policy store instance configured"); return; }
JpsContext
は、Oracle Platform Security Servicesを構成するファイルjps-config.xml
内の特定のドメインで共通のサービス・インスタンスのコレクションを宣言します。複数のJpsContext
がjps-config.xml
で定義されている場合は、デフォルトのJpsContext
で指定されているポリシー・ストアが返されます。また、特定のJpsContext
を名前で取得することもできます。
この構成ファイルの詳細は、『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』を参照してください。Oracle Entitlements Server固有のパラメータは、『Oracle Fusion Middleware Oracle Entitlements Server管理者ガイド』を参照してください。
注意:
|
管理ユーザーを指定します。
Subject smith = new Subject(); Principal principal = new WLSUserImpl("smith"); smith.getPrincipals().add(principal); BindingPolicyStore ps = BindingPolicyStoreFactory.getInstance();ps.setSubject(smith);
このコードは、アプリケーション・コンテナの認証メカニズムを使用してサブジェクトが設定されていない場合にのみ必要になります。認証メカニズムによってサブジェクトを設定している場合は、取得された認証済のサブジェクトはポリシー・ストアへのアクセスを認証されます。BindingPolicyStore
を使用する必要はありません。
ApplicationPolicy
オブジェクトは、特定のアプリケーションへの保護されたアクセスを定義するために必要なすべてのオブジェクトのコンテナです。ApplicationPolicy
オブジェクトは、保護対象のターゲットごとに作成する必要があります。必要な数だけ作成できます。ApplicationPolicy
を作成すると、このオブジェクトは、プログラム・マネージャを含んだApplicationPolicy
インタフェースによって表現されます。プログラム・マネージャは、アプリケーションのアクセス要件を定義するために使用するリソース、ポリシーおよびその他のセキュリティ・オブジェクトを作成するために必要です。これらのセキュリティ・オブジェクトは、第1章「ポリシー・モデルの使用方法」で定義されたモデルで構成されます。
注意: ApplicationPolicy オブジェクトは、Oracle Entitlements Server管理コンソールでアプリケーションとして表現されます。 |
ApplicationPolicy
オブジェクトは、PolicyStore
インタフェースにあるメソッドによって作成、削除および取得できます。例2-1に、createApplicationPolicy()
メソッドを使用してApplicationPolicy
オブジェクトを作成する方法を示します。
例2-1 createApplicationPolicy()メソッドの使用方法
ApplicationPolicy ap = ps.createApplicationPolicy("Trading", "Trading Application","Trading Application.");
createApplicationPolicy()
パラメータの値は次のように定義されています。
名前 - TradingはApplicationPolicy
オブジェクトの固有の識別子です。
表示名 - Trading ApplicationはApplicationPolicy
オブジェクトのオプションの判読可能名です。
説明 - Trading Application.は、ApplicationPolicy
オブジェクトについて説明するオプションの情報です。
注意: ApplicationPolicy オブジェクトを削除すると、その中に作成されたすべての子オブジェクトも削除されます。 |
ResourceTypeEntry
オブジェクトは、特定の種類のリソースの特性の範囲全体を指定します。(ApplicationPolicy
オブジェクトに関連付けられた)高いレベルのResourceTypeEntry
オブジェクトから、特定のResource
オブジェクトをインスタンス化して、実際の保護されたターゲットを表現します。したがって、ResourceTypeEntry
は、リソース属性(このリソース・タイプのインスタンスが持つことができる仕様)と、保護されたインスタンスで実行できるすべての有効なアクションの定義を含みます。ResourceTypeEntry
に追加されたアクションは標準のアクション(URLへのGETおよびPOST)の場合も、ビジネス・オブジェクトでのカスタム・アクション(銀行口座間の振替)の場合もあります。
注意: ResourceTypeEntry オブジェクトは、Oracle Entitlements Server管理コンソールでリソース・タイプとして表現されます。 |
ResourceTypeEntry
を作成、削除、取得または変更するには、ResourceTypeManager
のインスタンスを取得します。例2-2では、TradingAppというApplicationPolicy
オブジェクトにTradingResType
という名前のResourceTypeEntry
を作成しています。TradingResType
には、2つの有効なアクション(BUYおよびSELL)とManagerType
という名前の属性があります。
例2-2 createResourceType()メソッドの使用方法
ResourceTypeManager resourceTypeManager = tradingApp.getResourceTypeManager(); List<String> actions = new ArrayList(); actions.add("get"); List<AttributeEntry<? extends DataType>> attributes = new ArrayList<AttributeEntry<? extends DataType>>();attributes.add(new BasicAttributeEntry<OpssString> ("orderNo", OpssString.class));attributes.add(new BasicAttributeEntry<OpssBoolean> ("isDomestic", OpssBoolean.class)); ResourceTypeEntry resType = rtm.createResourceType ("TradingResType", "Trading ResType", "Trading Resource Type", actions, attributes, ",", null);
tradingAppは、ResourceTypeManager
の取得元のApplicationPolicy
オブジェクトの名前です。createResourceType()
パラメータの値は次のように定義されています。
名前 - TradingResTypeはResourceTypeEntry
の固有の識別子です。
表示名 - Trading ResTypeはResourceTypeEntry
のオプションの判読可能名です。
説明 - Trading Resource TypeはResourceTypeEntry
を説明するオプションの情報です。
アクション - actionsは、 ResourceTypeEntry
のすべての有効なアクションの順序付けされたコレクション(リスト)です。この場合はGETです。setAllAction()
メソッドを使用して、デフォルトのアクション・キーワードを設定します。
属性 - attributesはResourceTypeEntry
のすべての有効な属性のリストを指定します。重複している属性がある場合は、1つのものとして処理されます。1つまたは複数の属性を定義するには、ExtensionManager
のcreateAttribute()
によって作成し、ここで参照します。詳細は、2.4.3項「属性と関数定義の作成」を参照してください。属性もNULLを指定できます。
デリミタ - /
(フォワード・スラッシュ)は、アクションのデフォルトのデリミタです。別のデリミタを設定するにはsetResourceNameDelimiter()
メソッドを使用します。このメソッドにデリミタをResourceTypeEntry.ResourceNameDelimiter
列挙として渡します。
リソース・マッチャー・クラス - NULLは、ターゲットおよびアクション・マッチングに使用するリソース権限マッチャー・クラスがないことを表します。Java権限クラスの実装を設定するには、マッチャー・クラスのクラス名を割り当てます。この場合、リソース・タイプは所定の権限にバインドされます。リソース・タイプによって定義されたポリシーは、権限ベースのポリシーです。
ResourceTypeEntry
オブジェクトは、オブジェクトのsetHierarchicalResource()
メソッドを呼び出すことで階層として定義することもできます。isHierarchical
パラメータにtrueを渡すことにより、ResourceTypeEntry
が階層として設定されます。これにより階層型のResourceTypeEntry
を使用して、次の適用を受けるResourceEntry
をインスタンス化できます。
階層型のResourceTypeEntry
から作成されたResourceEntry
に適用可能なポリシーは、子のResourceEntry
オブジェクトにも適用可能です。
階層型のResourceTypeEntry
から作成されたResourceEntry
に定義された属性は、子のResourceEntry
オブジェクトにも継承されます。
isHierarchicalResource()
メソッドは、ResourceTypeEntry
が階層として設定されているかどうかを判定するために使用できます。
ResourceTypeEntryオブジェクトのResourceEntry
インスタンスの作成は、2.3.4項「リソースのインスタンス化」
を参照してください。
ResourceEntry
オブジェクトは、保護アプリケーション内で特定の保護されたターゲットを表します。コンテナ(URL、EJB、JSP)により管理されるソフトウェア・コンポーネント、またはアプリケーション内のビジネス・オブジェクト(レポート、取引、収益のグラフ)を表すことができます。
注意: ソフトウェア・コンポーネントとビジネス・オブジェクトの詳細は、『Oracle Fusion Middleware Oracle Entitlements Server管理者ガイド』を参照してください。 |
ResourceEntry
オブジェクトは、ResourceTypeEntry
オブジェクトのインスタンスとして定義されます。該当するResourceTypeEntry
は、ResourceEntry
のインスタンスの作成を試行する前に定義してください。詳細は、2.3.3項「リソース・タイプの定義」を参照してください。
ResourceEntry
オブジェクトを作成するには、該当するApplicationPolicy
またはPolicyDomainEntry
の getResourceManager()
メソッドを使用してResourceManager
のインスタンスを取得します。次に、createResource()
メソッドを使用してオブジェクトを作成します。
注意: ResourceEntry オブジェクトは、Oracle Entitlements Server管理コンソールでリソースとして表現されます。 |
例2-3では、当座預金口座のResourceEntry
を作成しています。Trading
は、ResourceManager
を取得するApplicationPolicy
オブジェクトを表します。
例2-3 createResource()メソッドの使用方法
ResourceManager resMgr = Trading.getResourceManager(); List<AttributeEntry<? extends DataType>> attributes = new ArrayList<AttributeEntry<? extends DataType>>(); attributes.add(new BasicAttributeEntry<OpssString> ("orderNo", new OpssString("12345678"))); attributes.add(new BasicAttributeEntry<OpssBoolean> ("isDomestic", new OpssBoolean(true))); ResourceEntry checkingRes = resMgr.createResource("Bob_checking1", "Bob Checking Account", "Checking account.", resType, attributes);
createResource()
パラメータの値は次のように定義されています。
名前 - Bob_checking1はResourceEntry
の固有の識別子です。
表示名 - Bob Checking AccountはResourceEntry
のオプションの判読可能名です。
説明 - Checking account.はResourceEntry
を説明するオプションの情報です。
タイプ - resTypeは、リソースをインスタンス化するResourceTypeEntry
オブジェクトです。
属性 - このResourceEntry
に対して構成している(オプションの)リソース属性が存在することを指定します。この場合は、順序番号と、リソースが内部にあるかどうかに関するブール値です。1つまたは複数の属性を定義するには、ExtensionManager
のcreateAttribute()
によって作成し、ここで参照します。
ResourceEntry
を作成したら、ResourceActionsEntry
内でアクションとペアにするか、PermissionSetEntry
内に含めることができます。詳細は、2.3.5項「リソースへのアクションの関連付け」および2.4.4項「プロパティ・セットの定義」を参照してください。
注意: 2.3.3項「リソース・タイプの定義」の説明のとおり、階層型ResourceEntry オブジェクトは、ResourceTypeEntry オブジェクトからインスタンス化できます。階層型ResourceEntry オブジェクトをインスタンス化する場合には、次の条件を満足する必要があります。
|
ResourceActionsEntry
オブジェクトは、リソース・インスタンスを、そのインスタンスに対して実行できる一連のアクションと関連付けます。リソース・インスタンスは、静的なResourceEntry
または動的なResourceNameExpression
のいずれかに指定します。
注意: ResourceActionsEntry は、独立して管理可能な名前付きオブジェクトではありません。単純な関係です。 |
詳細は、次の各項を参照してください。
ResourceEntry
をインスタンス化する手順は、2.3.4項「リソースのインスタンス化」を参照してください。ResourceEntry
をインスタンス化したら、ResourceActionsEntry
オブジェクトを作成して、そのリソースに対して実行可能なアクションを定義します。一連のアクションは、対応するResourceTypeEntry
に対して定義されている有効なアクションのサブセットを使用して、リストに定義します。例2-4では、ResourceActionsEntry
インタフェースを使用してResourceEntry
とアクションの間に関係(resActsList
)を作成しています。この例では、当座預金口座ResourceEntry
を作成し、その当座預金口座に読取りと変更の機能を関連付けています。
例2-4 ResourceEntryによるResourceActionsEntryの作成
ResourceEntry checkingRes = resMgr.createResource("Bob_checking1", "Bob Checking Account", "Checking account.",resType, null); List<String> actions = new ArrayList<String>(); actions.add("read"); actions.add("write"); List<ResourceActionsEntry> resActsList = new ArrayList<ResourceActionsEntry>(); resActsList.add(new BasicResourceActionsEntry(checkingRes, actions));
Bob_checking1は、ResourceEntry
です。Listは、Bob_checking1に対して適用可能なアクションを定義しています。それらは、読取りおよび書込みであり、このResourceActionsEntry
オブジェクトで管理されます。許容されるアクションは、親のResourceTypeEntry
から抽出されます。
ResourceEntry
を使用するかわりに、ResourceNameExpression
を指定することもできます。ResourceNameExpression
は、定義済のResourceTypeEntry
と文字列を表現するJava正規表現を含みます。文字列は、実行時にResourceEntry
インスタンスと一致させるために使用されます。たとえば、表2-4のポリシー・データが定義済であるとします。RAE1およびRAE2が、専用のResourceEntry
オブジェクトのResType1およびResType2によって定義されています。RAE3はResourceNameExpression
によって定義されます。Policy3の実行時の評価で、ResourceEntry
との一致にhttp://.*
が使用され、HTTP URLに対応するResourceEntry
のResType1が返されます。
表2-4 ResourceNameExpressionオブジェクトの照合
ResourceEntry | ResourceActionsEntry | ポリシー |
---|---|---|
ResType1 (HTTP URL) |
RAE1とResType1 |
Policy1とRAE1 |
ResType2 (HTTPS URL) |
RAE2とResType2 |
Policy2とRAE2 |
RAE3とResType1 |
Policy3とRAE3 |
例2-5は、ResourceNameExpression
によってResourceActionsEntry
を作成する方法を示しています。
例2-5 ResourceNameExpressionによるResourceActionsEntryの作成
// create one ResourceActionEntry ResourceNameExpression resExpression = new ResourceNameExpression (resTypeName, resNameExp); ResourceActionsEntry resActionsEntry = new BasicResourceActionsEntry (resExpression, actions); List<ResourceActionsEntry> resActionsList = new ArrayList<ResourceActionsEntry>(); resActionsList.add(resActionsEntry);
表2-5はResourceNameExpression
の例を示しています。任意の正規表現を使用できますが、表に記載されているパターン表現は、正規表現よりも高速に処理されます。
表2-5 ResourceNameExpressionの例
式 | 説明 |
---|---|
リソース・タイプ固有 |
アクション・タイプを指定するには、リソース・タイプ専用のキーワードを使用します。
|
".*" |
すべてのリソースを指定します。
|
"http.*" |
先頭がhttpのすべてのリソースを指定します。
|
".*html" |
末尾がhtmlのすべてのリソースを指定します。
|
1つ以上のResourceActionsEntry
オブジェクトに権限セットを移入することもできます。詳細は、2.4.4「権限セットの定義」を参照してください。
PolicyRuleEntry
は、結果(およびオプションで条件)を定義します。結果には、ポリシー・ルールから実現可能な結果を指定します。Oracle Entitlements Serverでの結果はGRANTまたはDENYです。ポリシー・ルールが(プリンシパルとターゲットのResourceEntry
に関する情報とともに)評価されるとき、ResourceEntry
に対するサブジェクトの権限が決定されます。すべてのPolicyEntry
オブジェクトは、ポリシー・ルールを1つ(のみ)含む必要があります。詳細は、2.3.8項「ポリシーの定義」を参照してください。
例2-6に、BasicPolicyRuleEntry
実装を使用してmyRule
という名前のPolicyRuleEntry
オブジェクトを作成する方法を示します。
例2-6 PolicyRuleEntryの作成
PolicyRuleEntry myRule = new BasicPolicyRuleEntry ("ReportRule", "Report Policy Rule", "Rule for Reports policy.", PolicyRuleEntry.EffectType.GRANT, myCondition);
パラメータの値は次のように定義されています。
名前 - ReportRuleはポリシー・ルールの固有の識別子です。
表示名 - Report Policy Ruleはポリシー・ルールのオプションの判読可能名です。
説明 - Rule for Reports policyはポリシー・ルールを説明するオプションの情報です。
PolicyRuleEntry.EffectType - 目的とする結果に基づいてGRANTの値を取得します。PolicyRuleEntry.EffectType
列挙は、Oracle Entitlements Serverの使用可能な結果タイプを定義します。この定数は、GRANTまたはDENYです。
条件 - myConditionは、ポリシー・ルールによって使用されるオプションの条件の名前です。条件は、BooleanExpressionEntry
であり、ブール値を返すExpression
を表します。詳細は、2.4.5項「条件の定義」を参照してください。
PrincipalEntry
は、ポリシーに関連するユーザー、グループまたはロールを指定します。これは、2.3.8項「ポリシーの定義」
の説明のとおり、PolicyEntryオブジェクトに追加します。表2-6は、プリンシパルの種類と、プログラムによってそれらを指定する方法を示しています。
表2-6 プログラムによるプリンシパルの指定
プリンシパルのタイプ | 例 |
---|---|
ユーザー |
ユーザー・プリンシパル検証プロバイダのクラス名( PrincipalEntry aUser = new BasicPrincipalEntry ("weblogic.security.principal.WLSUserImpl", "smith"); List<PrincipalEntry> myPrincipal = new ArrayList<PrincipalEntry>(); myPrincipal.add(aUser); |
グループ |
グループ・プリンシパル検証プロバイダ( PrincipalEntry aGroup = new BasicPrincipalEntry ("weblogic.security.principal.WLSGroupImpl", "Acme"); List<PrincipalEntry> myPrincipal = new ArrayList<PrincipalEntry>(); myPrincipal.add(aGroup); |
ロール |
tRoleアプリケーション・ロールを取得し、 AppRoleEntry aRole = appRoleManager.getAppRole(tRole); List<PrincipalEntry> principal = new ArrayList<PrincipalEntry>(); principals.add(tRole); 詳細は、2.4.1項「アプリケーション・ロールの作成」を参照してください。 |
匿名ロール |
ポリシーに PrincipalEntry anonymous = new AnonymousRoleEntry(); List<PrincipalEntry> principals = new ArrayList<PrincipalEntry>(); principals.add(anonymous); 詳細は、2.4.1項「アプリケーション・ロールの作成」を参照してください。 |
認証ロール |
ポリシーに PrincipalEntry authenticated = new AuthenticatedRoleEntry(); List<PrincipalEntry> principals = new ArrayList<PrincipalEntry>(); principals.add(authenticated); 詳細は、2.4.1項「アプリケーション・ロールの作成」を参照してください。 |
ポリシーのサブジェクトが複数のグループ、ロールまたはそれら両方の場合、定義済のプリンシパル・セマンティックに基づいてユーザーにポリシーが適用されます。次のオプションがあります。
PRINCIPAL_AND_SEMANTIC
は、プリンシパルとしてリストされているALLグループまたはロールにユーザーが一致する場合に、そのユーザーに適用されるポリシーを定義します。たとえば、プリンシパルのリストに2つのロールが含まれている場合、ポリシーを適用するには、ユーザーをポリシーの両方のロールのメンバーにする必要があります。
PRINCIPAL_OR_SEMANTIC
は、プリンシパルとしてリストされているグループまたはロールの1つのAT LEASTにユーザーが一致する場合に、そのユーザーに適用されるポリシーを定義します。たとえば、プリンシパルのリストに2つのロールが含まれている場合、ユーザーは、適用されるポリシーのこれらのロールの1つのみでメンバーになることができます。
ポリシーは、特定のプリンシパルが特定のリソースに対して所有するアクセス権を指定します。基本的に、PolicyRuleEntry
、ResourceActionsEntry
、PrincipalEntry
など、アクセス制御に必要なすべての要素が統合されています。
ポリシーは、プログラミングではPolicyEntry
オブジェクトとして表現されます。PolicyEntry
オブジェクトを作成するには、getPolicyManager()
メソッドを使用して、PolicyManager
のインスタンスを取得します。次に、createPolicy()
メソッドを使用してオブジェクトを作成します。例2-7は、myPolicy
という名前のポリシーを作成しています。
例2-7 createPolicy()の例の使用方法
PolicyManager policyMgr = domain.getPolicyManager(); List<PermissionSetEntry> permSets = new ArrayList<PermissionSetEntry>(); permSets.add(permSet1); permSets.add(permSet2); List<PrincipalEntry> principals = new ArrayList<PrincipalEntry>(); principals.add(appRole1); principals.add(new BasicPrincipalEntry(WLSUserImpl.class.getCanonicalName(), "john")); PolicyEntry myPolicy = policyManager.createPolicy ("BankPolicy", "Bank policy", "Policy for bank.", myRule, permSets, principals, null, obligations, PolicyEntry.POLICY_SEMANTIC.AND);
domain
は、ポリシーを作成するポリシー・ドメインを参照します。createPolicy()
パラメータの値は次のように定義されています。
名前 - Bank PolicyはPolicyEntry
の固有の識別子です。
表示名 - Bank policyはPolicyEntry
のオプションの判読可能名です。
説明 - Policy for bank.はPolicyEntry
を説明するオプションの情報です。
ポリシー・ルール - myruleはPolicyRuleEntry
オブジェクトです。
PermissionSetEntry
- permSetsはPermissionSetEntry
オブジェクトのコレクション(リスト)です。詳細は、2.4.4「権限セットの定義」を参照してください。
プリンシパル - principalsは、このポリシーのサブジェクトとして定義されたPrincipalEntry
オブジェクトの順序付きのコレクション(リスト)です。
ResourceActionsEntry
- ResourceActionsEntry
オブジェクトのリストも定義可能です。PermissionSetEntry
オブジェクトのリストがNULLの場合、このリストに有効な要素が少なくとも1つ含まれている必要があります。
義務 - ObligationEntry
オブジェクトのリストを使用可能です。詳細は、2.4.6「義務の追加」を参照してください。
policySemantic - ポリシーで指定されたプリンシパルの処理方法を指定します。PolicyEntry.POLICY_SEMANTIC
列挙は、ANDまたはORの使用可能定数を定義します。
PolicyEntry.POLICY_SEMANTIC.ANDは、ユーザーがポリシーにリストされているすべてのプリンシパルに一致する場合に、そのユーザーに適用されます。たとえば、プリンシパルのリストに2つのロールがある場合、そのユーザーは適用されるポリシーの両方のロールのメンバーである必要があります。
PolicyEntry.POLICY_SEMANTIC.ORは、ユーザーがポリシーにリストされている少なくとも1つのプリンシパルに一致する場合に、そのユーザーに適用されます。たとえば、プリンシパルのリストに2つのロールが含まれているとき、ポリシーを適用するにはユーザーをこれらのロールの少なくとも1つのメンバーにします。
2.3項「単純なポリシーの実行」では、ポリシーを定義するために最小限必要なコンポーネントの作成方法について説明しました。次の項では、単純なポリシーに1.3項「単純なポリシーへの詳細なオブジェクトの追加」で説明した拡張ポリシー要素の追加方法について説明します。
AppRoleEntry
オブジェクトは、アクセス権をグループ化するためにApplicationPolicy
に関連付けます。これにより、アプリケーション・ロールを付与するユーザーに配布できます。AppRoleEntry
を定義すれば、grantAppRole
を使用して静的にロールをプリンシパルに割り当てたり、ロール・マッピング・ポリシーを使用して動的にプリンシパルに割り当てることができます。(詳細は、2.4.2項「ロール・マッピング・ポリシーの作成」を参照してください。)AppRoleEntry
には次の要素をメンバーとして追加できます。
アイデンティティ・ストアのエンタープライズ・ユーザー
アイデンティティ・ストアのエンタープライズ・ロール
ポリシー・ストアのその他のアプリケーション・ロール
注意: AppRoleEntry オブジェクトは、Oracle Entitlements Server管理コンソールでアプリケーション・ロールとして表現されます。アプリケーション・ロールは、管理コンソールのナビゲーション・ツリーの「ロール・カタログ」ブランチの配下にまとめられます。 |
アプリケーション・ロールが特定のポリシーのプリンシパルとして指定されている場合、ロールに割り当てられているすべてのユーザーがそのポリシーによって管理されます。すべてのApplicationPolicy
コンテナには、2つの暗黙的なアプリケーション・ロールがあります。
匿名ロール — 認可されていないすべてのユーザーに暗黙的に割り当てられます。
認可ロール — 認可されているすべてのユーザーに暗黙的に割り当てられます。
AppRoleEntry
を作成するには、アプリケーション・ロールを作成するApplicationPolicy
オブジェクト内からAppRoleManager
インスタンスを取得し、createAppRole()
メソッドを使用します。例2-8は、TraderRoleという名前のAppRoleEntry
の作成を示しています。
例2-8 アプリケーション・ロールの作成
AppRoleManager roleMgr = bankApplication.getAppRoleManager(); AppRoleEntry traderRole = roleMgr.createAppRole("TraderRole", "Trader Role", "Trader role");
bankApplication
は、AppRoleManager
を取得するApplicationPolicy
オブジェクトを定義しています。createAppRole()
パラメータの値は次のように定義されています。
名前 - TraderRoleはAppRoleEntry
オブジェクトの固有の識別子です。
表示名 - Trader RoleはAppRoleEntry
オブジェクトのオプションの判読可能名です。
説明 - Trader Roleは、AppRoleEntry
オブジェクトについて説明するオプションの情報です。
AppRoleEntry
オブジェクトにプリンシパルを割り当てるには、適切なユーザーまたはグループを含んだPrincipalEntry
リストを作成します。grantAppRole()
は、ロールをリストのプリンシパルに割り当てるために使用します。例2-9は、ユーザーJSMITHの作成と、TraderRoleへの割当てを示しています。
例2-9 アプリケーション・ロールへのプリンシパルの割当て
//create user named JSMITH PrincipalEntry aUser = new BasicPrincipalEntry("weblogic.security.principal.WLSUserImpl", "JSMITH"); //Add user to principals list List<PrincipalEntry> principalList = new ArrayList<PrincipalEntry>(); principal.add(aUser); //assign user to role. roleMgr.grantAppRole(traderRole, principal);
grantAppRole()
パラメータの値は次のように定義されています。
名前 - TraderRoleは、ユーザーの割当て先のAppRoleEntry
オブジェクトの名前です。
プリンシパル - principalは追加するユーザーを含んだリストの名前です。
アプリケーション・ロール階層は、他のアプリケーション・ロールのメンバーにアプリケーション・ロールを割り当てることで作成できます。アプリケーション・ロールに適用されるポリシーは、そのメンバーとして割り当てられたすべてのアプリケーション・ロールにも適用されます。例2-10では、TraderManagersロールがAllManagersロールのメンバーとして割り当てられています。したがって、AllManagersロールのメンバーに適用されるすべてのポリシーは、TraderManagersロールのすべてのメンバーにも適用されます。
例2-10 アプリケーション・ロール階層の適用
//create AllManagers and TraderManagers roles AppRoleEntry allManagers = roleMgr.createAppRole("AllManagers", "AllManagers Role","Role for all managers."); AppRoleEntry traderManagers = roleMgr.createAppRole("TraderManagers", "TraderManagers Role", "Role for Trader managers."); //add TraderManagers to a principals list List<PrincipalEntry> principalList = new ArrayList<PrincipalEntry>(); principal.add(traderManagers); //add TraderManagers role as principal of AllManagers role roleMgr.grantAppRole(allManagers, principal);
ロール・マッピング・ポリシーはApplicationPolicy
レベルで作成されます。これは、アプリケーション・ロールが定義されるレベルと同じレベルです。RolePolicyEntry
オブジェクトはロール・マッピング・ポリシーを表します。このオブジェクトは、ポリシーを定義するメソッドを提供します。そのメソッドによって、ユーザーまたはグループにアプリケーション・ロールを付与するか、または拒否するかどうかが決定されます。
注意: RolePolicyEntry オブジェクトは、Oracle Entitlements Server管理コンソールでロール・マッピング・ポリシーとして表現され、ロール・カタログ内で編成されます。 |
RolePolicyEntry
オブジェクトを作成するには、対応するApplicationPolicy
内のgetRolePolicyManager()
メソッドを使用して、RolePolicyManager
のインスタンスを取得します。次に、createRolePolicy()
メソッドを使用してオブジェクトを作成します。
例2-11 createRolePolicyメソッドの使用方法
//get the RolePolicyManager RolePolicyManager roleMapPolicyManager = TellerApp.getRolePolicyManager(); List<AppRoleEntry> appRoles = new ArrayList<AppRoleEntry>(); appRoles.add(appRole1); List<PrincipalEntry> principalList = new ArrayList<PrincipalEntry>(); principals.add(new BasicPrincipalEntry(WLSUserImpl.class.getCanonicalName(), "john")); PolicyRuleEntry rule = new BasicRuleEntry("rule", "rule for role policy", "rule for role policy", EffectType.GRANT, null); List<ResourceEntry> resources = new ArrayList<ResourceEntry>(); resources.add(resource1); //create the RolePolicyEntry RolePolicyEntry rolepolicy = roleMapPolicyManager.createRolePolicy ("TellerRoleMapping", "Teller Role Mapping", "Teller Role Mapping Policy", appRoles, principals, rule, resources, null);
TellerAppは、RolePolicyManager
の取得元のApplicationPolicy
オブジェクトの名前です。createRolePolicyEntry()
パラメータの値は次のように定義されています。
名前 - TellerRoleMappingはRolePolicyEntry
の固有の識別子です。
表示名 - Teller Role MappingはRolePolicyEntry
のオプションの判読可能名です。
説明 - Teller Role Mapping PolicyはResourceTypeEntry
を説明するオプションの情報です。
アプリケーション・ロール・リスト - appRolesは、RolePolicyEntry
の評価で付与(または拒否)されるすべてのアプリケーション・ロールの順序付きコレクション(リスト)です。
プリンシパル・リスト - principalsはアプリケーション・ロールにマップするPrincipalEntry
オブジェクトのコレクション(リスト)です。この値は、ApplicationRoleまたは管理ロールとなります。また、このリストを空にすることはできません。
ポリシー・ルール - ruleは、ロール・マッピング・ポリシーの条件を定義するPolicyRuleEntry
オブジェクトです。特定の値が必要です。
注意: ロール・マッピング・ポリシーの条件は、認可ポリシーの条件と同じ機能を提供します。 |
リソース名 - resourcesは、ロール・マッピング・ポリシーに関連付けるResourceEntry
オブジェクトのリストです。これは、NULLまたは空のリストを指定できるオプションのパラメータです。このパラメータでは、ロール・マッピング・ポリシーの範囲を特定の(複数の)リソースに指定することもできます。
リソース名の式 - この値には、リソース名の式を指定して、ロール・マッピング・ポリシーに関連付けることができます。これは、(この例のように)NULLまたは空のリストを指定できるオプションのパラメータです。このパラメータでは、ロール・マッピング・ポリシーの範囲を特定の(複数の)リソースに指定することもできます。
属性または関数定義は、特定の属性または関数を記述するメタデータです。いくつかの情報の中で、属性や関数の名前、属性が取得するデータの型または関数の戻り値を値として定義し、さらに該当する値が単一か複数であるかを定義します。メタデータは、Oracle Entitlements Serverに、定義された特定の属性または関数の処理方法を指定します。属性および関数の定義は条件や義務で使用することができます。条件については、属性および関数の定義を使用して、保護リソースへのアクセスをさらに制限するためにポリシーに追加できるオプションの式を作成できます。義務については、このオプションの名前と値のペアから、ポリシー決定によって、ポリシー実行ポイント(PEP)に追加情報が返されます。義務を定義するには次の2つの方法があります。
絶対値を含む属性が返される場合に、静的に定義。
属性値またはカスタム関数が実行時に評価され出力が返される場合に、動的に定義。
属性および関数定義は、ApplicationPolicy
レベルで管理されます。定義は、Oracle Entitlements Server用に事前定義されたものを使用するか、ExtensionManager
を使用して要求に合せて新しいものを定義できます。カスタム定義の作成に関する情報は、次の項を参照してください。
事前定義されたRuleExpressionEntry.BuiltInAttributes
およびRuleExpressionEntry.BuiltInFunctions
列挙定義の情報は、Oracle Fusion Middleware Oracle Entitlements Server管理Java APIリファレンスを参照してください。
AttributeEntry
オブジェクトは、実行時に動的に定義される値(たとえばユーザーの地域)や、保護リソースのタイプに基づく値(たとえばテキスト・ファイルの作成日)の場合があります。ポリシーの評価中に、属性値はアプリケーションにより渡されることができるか、またはOracle Entitlements Serverが属性リトリーバ・コンポーネントを使用して取得できます。
注意: 動的な属性定義は、ApplicationPolicy の子オブジェクトとして管理することで、別のポリシー・ドメイン内のポリシーで使用できます。ポリシー・ドメインの詳細は、第5章「ポリシー管理の委任」を参照してください。 |
属性定義を作成するには、ExtensionManager
のインスタンスを取得し、createAttribute()
メソッドを使用します。例2-12では、myAttrという名前の属性定義を作成しています。
例2-12 動的な属性定義の作成
//get the ExtensionManager ExtensionManager xMgr = bankApplication.getExtensionManager(); //create the dynamic attribute AttributeEntry<OpssString> attr = xMgr.createAttribute ("min_age", "minimum age", "minimum age of subject.", OpssString.class, AttributeEntry.AttributeCategory.DYNAMIC, true);
bankApplication
は、拡張を作成するApplicationPolicy
オブジェクトを表します。createAttribute()
パラメータの値は次のように定義されています。
名前 - min_ageは属性の固有の識別子です。
表示名 - minimum ageは属性のオプションの判読可能名です。
説明 - minimum age of subject.は属性を説明するオプションの情報です。
データ型 - OpssString.classは、属性のデータ型です。この場合は文字列です。このパラメータは、oracle.security.jps.service.policystore.info.DataType
クラスの任意のサブクラスの値を取得します。
注意: attr.setValue(new OpssString("John")) は、文字列の値をJohnに設定するコードです。 |
カテゴリ - AttributeEntry.AttributeCategory.DYNAMICは属性を動的に定義します。これには、DYNAMICまたはRESOURCEを指定可能です。動的属性の値は、認可リクエストによって渡すか、ポリシー決定ポイントによって取得します。リソース属性の値は、リソース・インスタンスによって定義します。
isSingleValue - trueは、属性が単一の値を取得することを示します。falseの値は複数の値を示します。
カスタム関数は、外部から実装されたロジックを表し、PDPに返される出力を生成するために使用します。出力された値は条件で使用します。例2-13は、関数を作成するApplicationPolicy
を取得して、ExtensionManager
のインスタンスを取得することによりカスタム関数を作成する方法を示しています。
例2-13 カスタム関数定義の作成
ApplicationPolicy ap = ps.getApplicationPolicy("MyAppPolicy"); ExtensionManager xMgr = ap.getExtensionManager(); FunctionEntry func = xMgr.createFunction("myFunc", "Credit Standing Function", "Returns credit standing.", "acme.demo.CreditStanding", OpssBoolean.class, params);
MyAppPolicyは、関数を作成するApplicationPolicy
オブジェクトの識別子です。createFunction()
メソッドの値は次のように定義されています。
名前 - myFuncはFunctionEntry
の固有の識別子です。
表示名 - Credit Standing FunctionはFunctionEntryのオプションの判読可能名です。
説明 - Returns credit standing.はFunctionEntryを説明するオプションの情報です。
クラス名 - acme.demo.CreditStandingは、FunctionEntry
を実装するクラスの完全修飾名です。
戻りデータ型 - ポリシー・ストアによってサポートされているすべてのデータ型(OpssBoolean
、OpssDate
、OpssInteger
、OpssString
、OpssTime
)で構成されたスーパークラスのoracle.security.jps.service.policystore.info.DataType
クラスのサブクラスです。
入力データ型 - paramsは、関数の入力データ型を表します。これは、ポリシー・ストアによってサポートされているすべてのデータ型(OpssBoolean
、OpssDate
、OpssInteger
、OpssString
、OpssTime
)で構成されたスーパークラスのoracle.security.jps.service.policystore.info.DataType
クラスのサブクラスの1つです。
詳細は、2.4.5項「条件の定義」と7.2項「カスタム関数の開発」を参照してください。
1.2項「単純なポリシーの構成」に記載されているとおり、PermissionSetEntry
オブジェクトは、1つ以上のResourceActionsEntry
オブジェクトを集約するために使用します。ResourceActionsEntry
オブジェクトは、保護するリソースと、ポリシーによって許可または拒否するアクションをペアにしたものです。(ResourceActionsEntryオブジェクトの詳細は、2.3.5項「リソースへのアクションのポリシー・ルールの関連付け」
を参照してください。)PermissionSetEntry
を使用すれば、必要時にResourceActionsEntry
オブジェクトをバンドルできます。リソースがResourceActionsEntry
オブジェクトで参照されている場合、そのリソースはpermissionSet
が定義(または変更)されたのと同じポリシー・ドメイン内で定義されている必要があります(後者はpermissionSet
がリソースの追加時に変更された場合に適用可能です)。これは、標準のRBACロール集約のかわりに使用できる構造体です。
注意: PermissionSetEntry オブジェクトはOracle Entitlements Server管理コンソールで資格として表現されます。 |
例2-14は、PermissionSetEntry
オブジェクトの作成方法を示しています。この例では、ResourceEntry
およびResourceActionsEntry
を作成するコードが示されています。domainはPermissionSetManager
のインスタンスを取得するポリシー・ドメインの名前です。
例2-14 PermissionSetEntryの作成
//get the PermissionSetManager PermissionSetManager psMgr = domain.getPermissionSetManager(); //create a ResourceEntry and ResourceActionsEntry ResourceManager resMgr = domain.getResourceManager(); ResourceEntry checkingRes = resMgr.createResource("Bob_checking1", "Bob Checking Account", "Checking account.", type, null); List<String> actions = new ArrayList<String>(); actions.add("read"); actions.add("write"); List<ResourceActionsEntry> resActsList = new ArrayList<ResourceActionsEntry>(); resActsList.add(new BasicResourceActionsEntry(checkingRes, actions)); //create a PermissionSetEntry PermissionSetEntry permSet = permSetManager.createPermissionSet("RptsPermSet", "Reports Permission Set", "Permission set for Reports policy.", resActsList);
createPermissionSet()
パラメータの値は次のように定義されています。
名前 - RptsPermSetはPermissionSetEntry
オブジェクトの固有の識別子です。
表示名 - Reports Permission SetはPermissionSetEntry
オブジェクトのオプションの判読可能名です。
説明 - Permission set for Report policy.はPermissionSetEntry
オブジェクトを説明するオプションの情報です。
ResourceActionsEntry - resActsListは、このPermissionSetEntry
オブジェクトに関連付けられている、ResourceActionsEntry
です。
ポリシー・ルールのオプションの条件は、アクセスのリクエストに応答して返される決定に追加の要求を設定するために使用します。たとえば、条件の使用により、リクエストが特定の場所で発行された場合、または特定の時間に発行された場合にのみリソースへのアクセス権を付与することができます。条件は式の形で作成され、trueかfalseかが決定されます。式の結果がtrueの場合、ポリシーの条件は満たされ、ポリシーが適用されます。式の結果がtrueでない場合、ポリシーは適用されません。
注意: ロール・マッピング・ポリシーの条件は、認可ポリシーの条件と同じ機能を提供し、同じ形式を使用しています。 |
条件は、2.3.6項「ポリシー・ルールの指定」
の説明のとおり、PolicyRuleEntryに定義します。これは属性と関数を使用して作成した式であり、オプションで、詳細に制限するためにポリシー・ルールに追加できます。式は、動的またはリソース属性の値、あるいはコンポーネントの関数から返された値を使用して評価されます。
条件はtrueまたはfalseを返す必要があるため、式はtrueまたはfalseしか返すことができません。したがって、BooleanExpressionEntry
で定義する必要があります。BooleanExpressionEntry
では、次の操作が可能です。
ExpressionComponent
オブジェクトを数に制限なく使用できます。
式オブジェクトは、式と、ExpressionComponent
型の1つ以上の引数を含みます。ExpressionComponent
インタフェースは、式の要素として使用可能なあらゆるエンティティを表します。
注意: 式にコンポーネントを追加する順序は、入力パラメータのリストに表示されているパラメータの順序と同じにする必要があります。たとえば、関数が(OpssString, OpssTime, OpssInteger) を要求する場合、式を次のように作成する必要があります。
ex.addExpressionComponent(<string param>); ex.addExpressionComponent(<time param>); ex.addExpressionComponent(<integer param>); |
次のオブジェクトはExpressionComponent
型です。
あらゆるDataTypeオブジェクト
2.1項「Java APIの使用方法」を参照してください。
AttributeEntry
ValueCollection
式
ExpressionComponent
オブジェクトをネストできます。
事前定義またはカスタム関数と、ブールまたは非ブール戻り型を使用できます。
関数の入力として事前定義済または動的属性を使用できます。
動的属性は、評価時に値が取得されるものです。
事前定義済属性は、値がポリシーまたはルールのサブジェクト、リソース、アクションと関連付けられていないものです。たとえば、日中の時刻などがあります。
現在サポートされているデータ型のBoolean、Date、Integer、StringおよびTimeのリテラル値(ExpressionComponent
として定義)。
ANDまたはOR演算子を使用して複数の式から返されたブール値を比較できます。
例2-15は、BooleanExpressionEntry
クラスを使用して、式と(オプションの)パラメータを指定する方法を示しています。
BooleanExpressionEntry
パラメータには次の要素があります。
組込み関数用のFunctionEntry
またはExtensionManager
を使用して取得するカスタム関数。
ゼロまたは1つ以上のExpressionComponent
オブジェクト。ExpressionComponent
は、Class<? extends DataType>
、ValueCollection
、AttributeEntry
およびExpression
によって実装するインタフェースです。式
を作成するために使用できるオブジェクトには、OpssBoolean、OpssDate、OpssInteger、OpssString、OpssTime、ValueCollection、AttributeEntry
インタフェースを実装するすべてのクラス、または式
自体(ネスト)があります。式は、string1 = string2
のような単純な条件や、(((checking_balance + savings_balance) > 10000) AND (customFunc_checkCustomerType(user_name, "GOLD"))
のような複雑な条件を表します。
開発者は高いレベルから次の手順を実行して、条件をBooleanExpressionEntry
として定義する必要があります。この手順では、プロセスを詳細記述するロジックが定義済であると仮定されています。この例では、銀行のポリシーは、普通預金と当座預金の合計残高が$10,000以上のGOLDメンバーのユーザーのみに適用可能であると仮定されています。
AttributeEntry
オブジェクトを定義するロジックの個々のコンポーネントを分離します。この例では、普通預金と当座預金の残高の合計($10,000との比較)を定義する属性と、顧客の種類を定義する属性(GOLDとの比較)です。
FunctionEntry
オブジェクトを定義するコンポーネントごとに暗黙的に存在する関数を特定します。この例では、合計残高を作成する関数(saving_balance + checking_balance > 10000)と顧客のタイプをチェックする関数(customFunc_checkCustomerType(username, "GOLD"))になります。
ExpressionComponent
オブジェクトを1つずつ作成し、関数およびパラメータとして識別します。この例では、式がネストされ、AND演算子が使用されています。
integer_add(saving_balance, check_balance)
integer_greater_than(integer_add
(saving_balance, check_balance), 10000)
customFunc_checkCustomerType(username, "GOLD")
and(integer_greater_than(integer_add
(saving_balance, check_balance), 10000,
customFunc_checkCustomerType(username, "GOLD"))
BooleanExpressionEntry
をExpressionComponent
オブジェクトを使用して作成します。例2-16は推奨されるブール式の生成方法を示しています。
例2-16 BooleanExpressionEntryの作成
//Define the checking and savings balances and compute one total Expression addBalance = new Expression(function entry for integer_add); addBalance.add(attribute entry for savings_balance); addBalance.add(attribute entry for checking_balance); //Compare the total balance to 10,000 Expression greaterThan = new Expression (function entry for integer_greater_than); greaterThan.addExpressionComponent(addBalance); greaterThan.addExpressionComponent(new OpssInteger(10000)); //Define the function to check the customer type Expression goldMember = new Expression(function entry for customFunc_checkCustomerType); goldMember.addExpressionComponent(attribute entry for username); goldMember.addExpressionComponent(new OpssString("GOLD")); //Compare the outcome using AND operator Expression top = new Expression(function entry for AND); top.addExpressionComponent(greaterThan); top.addExpressionComponent(goldMember);
式コンストラクタが関数エントリに提供されており、それぞれの関数の引数が左から右へ式コンポーネントとして追加されています。
注意: すべてのExpressionComponent オブジェクトを一度に追加するにはsetExpressionComponent(List<ExpressionComponent>) インタフェースを使用します。コンポーネントのリストは、引数が渡される順序に作成する必要があります。たとえば、リストの最初のコンポーネントは、関数に最初に渡される引数であり、2番目のコンポーネントは2番目の引数のようになります。 |
BooleanExpressionEntry
を作成します。
Oracle Entitlements Serverでは、条件で使用するための多数の事前定義済関数がサポートされています(AND/OR、ブール関数、文字列関数など)。次の項では、使用可能な式の種類に関する情報について説明します。
ブール式は、2つのブールの結果の比較に基づいた結果を評価できます。比較の結果はtrueまたはfalseになります。ブール式では、異なる値の型を持つ複数の基本式を基にしたポリシー条件を使用できます。
次のコードには2つの基本式と1つのブール式が含まれています。整数式(2つの整数を比較)と文字列式(2つの文字列を比較)は基本式です。ブール式は、基本式によって返された結果を比較しています。
Expression leftExpression = new Expression(function-entry-for-INTEGER_LESS_THAN); leftExpression.add(attribute entry for userBudget); leftExpression.add(new OpssInteger(2000)); Expression rightExpression = new Expression(function-entry-for-STRING_EQUAL); rightExpression.addExpressionComponent(thisMonth); rightExpression.addExpressionComponent(new OpssString("December")); Expression expression = new Expression(function-entry-for-AND); expression.addExpressionComponent(leftExpression); expression.addExpressionComponent(rightExpression); //boolean expression RuleExpressionEntry<OpssBoolean> condition = new BooleanExpressionEntry<OpssBoolean>(expression);
パラメータの値は次のように定義されています。
userBudget - ドルの金額を表す動的属性
2000 - 整数の定数値
function-entry-for-INTEGER_LESS_THAN - (ExtensionManager.getFunctionEntry(BuiltInFunctions.INTEGER_LESS_THAN)
列挙を使用して取得したFunctionEntry
を取ります。
thisMonth - 当月を表す動的属性
December - 文字列の定数
function-entry-for-STRING_EQUAL - (ExtensionManager.getFunctionEntry(BuiltInFunctions.STRING_EQUAL)
列挙を使用して取得したFunctionEntry
を取ります。
leftExpression / rightExpression - 基本式の結果を表す動的属性
December - 文字列の定数
function-entry-for-AND - (ExtensionManager.getFunctionEntry(BuiltInFunctions.AND)
列挙を使用して取得したFunctionEntry
を取ります。
注意: ANDは、基本式の結果もtrueの場合のみtrueを返します。他にサポートされているブール式の演算は、NOT(単独のtrue/falseの値を取り否定します)と、OR (2つのtrue/false値を取り、いずれかのオペランドがtrueの場合に1つのtrueの結果を生成します)です。 |
カスタム関数式はカスタム関数を呼び出し、結果に基づいてtrueまたはfalseを返します。カスタム関数式には、1つ以上のパラメータを含めることもできます。関数をコールし、なんらかのパラメータを定義したら、そのパラメータを入力として使用する関数を呼び出すためにRuleExpressionEntry
オブジェクトを作成します。次のコードは、リクエストを行ったクライアントを低リスクと見なすことができるかどうかを判定します。関数がクライアントのタイプを分析し、低リスクの場合にはLow Riskの文字列を返します。
//get the ClientType custom function FunctionEntry function = xMgr.getFunction("ClientType"); Expression ex = new Expression(function); //add component referencing "LowRisk" string to expression ex.addExpressionComponent(new OpssString("LowRisk"); //construct BooleanExpressionEntry to invoke function RuleExpressionEntry<OpssBoolean> = new BooleanExpressionEntry(ex);
2番目の例は、式の異なる値の型のパラメータを取得するカスタム関数式を作成する方法を示しています。
// define the acceptable expression value types List<Class<? extends DataType>> inputParams = new ArrayList<Class <? extends DataType>>(); inputParams.add(OpssInteger.class); inputParams.add(OpssString.class); inputParams.add(OpssTime.class ); // declare the function FunctionEntry func = extensionManager.createFunction("ReportsPolicyCondition", "ReportsPolicyCondition", "Condition for Reports policy.", "oracle.demo.oes.ComplexFunction", OpssBoolean.class, inputParams); // use the function to construct a condition AttributeEntry<OpssInteger> attrEntry = extMngr.getAttribute(BuiltInAttributes.SYS_OBJ.toString()); Expression expression = new Expression (func) expression.addExpressionComponent(new OpssInteger(100)); expression.addExpressionComponent(attrEntry); expression.addExpressionComponent(new OpssTime(17, 0, 0)); RuleExpressionEntry<OpssBoolean> condition = new BooleanExpressionEntry <OpssBoolean>(expression);
注意: カスタム関数式は、比較演算を使用しません。 |
義務は、ポリシー実行の間.に考慮されるオプションの情報を指定します。この情報は、認可の決定をコールしたエンティティに、解決された結果(GRANTまたはDENY)とともに返され、ポリシーの結果に追加の要件が適用されます。たとえば、特定の金額が当座預金口座から引き出された場合に、口座の名義人の登録携帯電話にテキスト・メッセージが送信されます。
義務は、一連の名前と値のペアを含んだ名前付きオブジェクトとして管理されます。このオブジェクトは、常にポリシーのコンテキストで管理されます。義務を定義するには次の2つの方法があります。
絶対値を持つ属性が義務として返される静的な定義
属性値またはカスタム関数が実行時に評価され、出力が義務として返される動的な定義
ポリシーに義務が含まれている場合、情報は一連の属性を含む名前付きのObligationEntry
オブジェクトとしてアプリケーションに返されます。義務を指定するには、戻す値を含んだObligationEntry
オブジェクトを作成します。次の手順では、Trader managers may run reports.
という文字列メッセージを提供するObligationEntryを作成します。
AttributeAssignment
クラスを使用してメッセージ文字列を定義し、traderRptList
という名前の属性の配列リストに追加します。
AttributeAssignment<OpssString>traderRpt = new AttributeAssignment<OpssString> ("traderRptMessage", new OpssString("Trader managers may run reports.")); List<AttributeAssignment<? extends DataType>> traderRptList = new ArrayList<AttributeAssignment<? extends DataType>>(); traderRptList.add(traderRpt);
パラメータの値は次のように定義されています。
名前 - traderRptMessageは文字列の固有の識別子です。
OpssString - Trader managers may run reports.は文字列です。
traderRptObl
義務およびtraderRptOblList
配列をObligationEntry
インタフェースを使用して作成します。
ObligationEntry traderRptObl = new BasicObligationEntry ("traderRptObl", "Trader Report Obligation", "obligation for Trader Report policy.", traderRptList); List<ObligationEntry>traderRptOblList = new ArrayList<ObligationEntry>(); traderRptOblList.add(traderRptObl);
パラメータの値は次のように定義されています。
名前 - traderRptOblは義務の固有の識別子です。
表示名 - Trader Report Obligationは義務のオプションの判読可能名です。
説明 - Obligation for Trader Report policy.は義務のオプションの説明です。
割当て - traderRptListは前に作成した属性配列リストです。
ポリシーの作成時に義務を指定します。
PolicyEntry policyEntry = policyManager.createPolicy ("TraderRpt", "TraderRpt", "Trader report policy.", traderRptRule, traderRptPermissionSetEntryList, traderRptPrincipals, traderRptOblList);
パラメータの値は次のように定義されています。
名前 - TraderRptはポリシーの固有の識別子です。
表示名 - TraderRptはポリシーのオプションの判読可能名です。
説明 - Trader Report policy.はオプションの説明です。
ルール - traderRptRuleはPolicyRuleEntry
オブジェクトの名前です。
PermSets - traderRptは、PermissionSetEntry
オブジェクトのリストです。
プリンシパル - traderRptPrincipalsは、PrincipalEntry
オブジェクトのリストです。
義務 - traderRptRuleはObligationEntry
オブジェクトのリストです。
注意: アプリケーションで義務を使用する場合は、isAccessAllowed() 認可リクエストで、リクエストする必要があります。 |
http://www.oracle.com/technetwork/middleware/oes/overview/index.html
には、Oracle Entitlements Serverの開発および管理例のリストがあります。