A WebLogic ServerにおけるXACMLのリファレンス
WebLogic ServerのXACML認可プロバイダおよびXACMLロール・マッピング・プロバイダ:
この付録の内容は次のとおりです。
ここでは、XACMLのWebLogic Server拡張、およびその制限事項についてのみ説明しています。XACML 2.0言語の完全なリファレンス情報については、OASIS XACML 2.0コア仕様 およびOASIS RBAC仕様を参照してください。
WebLogic ServerとXACMLのセキュリティ・モデルの比較
WebLogic Serverでリソースやポリシーを表現するためのモデルは、Java EEデプロイメント記述子のモデルに準拠しています。このJava EEモデルでは、リソースの階層を作成し、最上位のロールと認可ポリシーによって下位層のリソースを保護します。(「リソースの階層の保護」を参照してください)下位階層のポリシーは、常に上位階層のポリシーをオーバーライドします。リソース階層の上位には、エンタープライズ・アプリケーション、Webアプリケーション、およびEJBが配置されます。リソース階層の最下位には、EJBメソッド、特定のURLパターンのHTTPメソッド、およびMBeanのゲッターとセッターが配置されます。
XACMLモデルでも、リソースの階層は認識されます。しかし、ネイティブのWebLogic Serverモデルと異なり、作成するXACMLポリシーでは、リソースをそのリソース自体のポリシーで保護するのか、リソースの親または祖先のポリシーで保護するのかを判断する方法を指定する必要があります。
また、XACMLドキュメントでは、リソースとリソースのアクションを区別するのが一般的です。たとえば、XACMLドキュメントでリソースとしてEJBを定義したら、そのEJBリソース内にEJBのメソッドを表すアクションを定義します。ネイティブのWebLogic Serverモデルでは、EJBと各EJBメソッドがリソースと見なされます。図A-1を参照してください。
EJBメソッドなどのアクションをXACMLリソースとして記述することが可能ですが、XACMLでのより自然な表現方法は、EJBをリソースとして定義し、EJBメソッドをリソース内のアクションとして定義する方法です。
用語の比較
WebLogic Serverでリソースやポリシーについて説明するための用語は、Java EEデプロイメント記述子のモデルに準拠しています。このJava EEモデルでは、以下の用語を使用して主要な概念を説明しています。
-
ロールには、特定の時間にどのユーザーまたはグループにそのロールを割り当てるかを示す1つまたは複数の条件が含まれています。ロール式は、条件と、その条件に従ってロールに追加するユーザーまたはグループの名前を組み合せたものです。これらの式の集合をロール文と呼びます。
-
ポリシーには、特定の時間に誰がリソースにアクセスできるかを示す1つまたは複数の条件が含まれています。ポリシー式は、条件と、その条件に従ってアクセスを許可するユーザー、グループ、またはロールの名前を組み合せたものです。これらの式の集合をポリシー文と呼びます。
XACMLでは、ポリシーはルールのセットから構成されており、誰にロールを割り当て、誰がリソースにアクセスできるかは、このポリシーを使用して決定します。つまり、XACMLのポリシーは、WebLogic Serverのロール文やポリシー文に相当します。
データ型について
Oracle実装では、XACMLのコア仕様で必要とされているすべてのデータ型がサポートされます。それ以外にも、標準XMLデータ型や、様々なカスタム・データ型がサポートされています。このマニュアルでは、Oracle独自のカスタム・データ型を、bea:
という接頭辞を付けて表します。
WebLogic XACMLプロバイダで認識されるすべてのデータ型の詳細は、Oracle WebLogic Server APIリファレンスのcom.bea.common.security.xacml.Type
を参照してください
アクション識別子
XACMLでは、Action
要素を使用して、リソース内での処理やリソースの階層を識別します。
WebLogic Serverでは、XACMLのコア仕様にのすべてのAction
識別子がサポートされます(XACML 2.0のコア仕様を参照)。また、XACMLの環境識別子を使用できる場所ならどこでも使用できる追加の識別子1つもサポートされています。
WebLogic Serverリソース内の処理(たとえば、特定のEJBメソッド)を識別するには、表A-1の説明に従ってアクション識別子を使用します。
ノート:
リソース識別子を使用して処理(EJBメソッドなど)を記述することは可能ですが、XACMLでのより自然な表現方法はアクション識別子を使用する方法です。「WebLogic ServerとXACMLのセキュリティ・モデルの比較」を参照してください
表A-1 アクション識別子
次を識別するには... | この識別子を使用します... |
---|---|
操作 |
|
プロバイダがセキュリティ・チェックを実行するタイミング |
WebLogicセキュリティSPIには、プロバイダが要求されたセキュリティ・チェックを実行するタイミングを指定するためのオプション機能が含まれています。
この Oracle WebLogic Server Java APIリファレンスの ノート: 認可プロバイダでは、Directionオブジェクトを判定内で使用することもできます。WebLogic ServerのXACML認可プロバイダでは、 |
表A-2では、action-id
識別子に指定する値について説明します。
表A-2 action-id識別子の値
処理がこのリソース・タイプである場合は... | 次を指定します... |
---|---|
管理 |
Adminリソースによって保護する管理アクティビティの名前。たとえば 有効な値については、Oracle WebLogic Server APIリファレンスの |
アプリケーション |
WebLogic Server管理コンソールに表示されるアプリケーション名。 |
コントロール |
Javaコントロール内のメソッドの名前。Javaコントロールは、再利用可能なコンポーネントで、WebLogic Platformアプリケーション内の任意の場所に作成して使用できます。 |
EJB |
EJBメソッドの名前。たとえば |
JDBC |
JDBCリソースによって保護する管理アクティビティの名前。 有効な値については、Oracle WebLogic Server Java APIリファレンスの |
JMS |
JMSリソースによって保護する管理アクティビティの名前。 有効な値については、Oracle WebLogic Server Java APIリファレンスの |
JMX |
WebLogic Server MBean内の処理の名前。たとえば |
JNDI |
JNDIリソースによって保護する管理アクティビティの名前。 有効な値については、Oracle WebLogic Server Java APIリファレンスの |
サーバー |
サーバー・リソースによって保護するサーバー・ライフサイクル・アクティビティの名前。たとえば 有効な値については、「サーバー・リソース」を参照してください |
URL |
HTTPメソッドの名前。たとえば |
Webサービス |
Webサービス・メソッドの名前。たとえば |
ワーク・コンテキスト |
ワーク・コンテキスト・リソースによって保護する管理アクティビティの名前。 有効な値については、Oracle WebLogic Server Java APIリファレンスの |
その他 |
文字列 |
例
次の例では、Action
要素を使用して、SimpleSoap Webサービス内のmymethod
をターゲットとして指定しています。
ノート:
<AttributeValue>
要素に値を指定するときは、余分な空白を含めないでください。具体的には:
-
最初の値の前には空白を1つのみ入力します。
-
複数の値を指定するとき、1つのみの空白で各値を区切ります。
-
最後の値の後には空白を入力しません。
たとえば:
<AttributeValue datatype>value1, value2, value3</AttributeValue>
<Target> <Resources> <Resource> <ResourceMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">type=<webservices>, application=webservicesJwsSimpleEar,contextPath=/jws_basic_simple, webService=SimpleSoapPort</AttributeValue> <ResourceAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:2.0:resource:resource-ancestor" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> </ResourceMatch> </Resource> </Resources> <ActionMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">mymethod</AttributeValue> <ActionAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> </ActionMatch> </Target>
環境識別子
XACMLでは、必要に応じてEnvironment
要素を使用して、ターゲットにアクセスを許可する前に満たされなければならない条件を運用環境内に記述できます。たとえば、Environment
要素を使用して、アクセスを許可する日付と時間の範囲を指定できます。
Weblogic Serverでは、XACMLのすべてのEnvironment
識別子をサポートされます(http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-core-spec-os.pdf
にあるOASIS XACML 2.0コア仕様を参照)。また、標準のXACMLの環境識別子を使用できる場所ならどこでも使用できる追加の識別子1つに対するサポートも追加されています。表A-3では、コンテナからプロバイダに渡す値を保持するのに使用できる識別子に対しての値のリストを提供します。
表A-3 WebLogic Serverの環境識別子
識別子 | 値 および 説明 |
---|---|
属性ID |
この識別子では、『Oracle WebLogic Serverセキュリティ・プロバイダの開発』のContextHandlerとWebLogicリソースに関する項で定義されているように、 |
データ型 |
|
値 |
一致させたい |
例
次の例では、Environment
要素を使用して、WebLogic Serverのリスニング・ポートの値を一致させています。このような要素を使用して、リクエストをリスニング・ポート9001で受け付けることを要件とするポリシーを作成できます。
<Environment>
<EnvironmentMatch
MatchId="urn:oasis:names:tc:xacml:1.0:function:double-equal">
<EnvironmentAttributeDesignator
AttributeId="urn:bea:xacml:2.0:environment:context:com.bea.cont
extelement.channel.Port"
DataType="http://www.w3.org/2001/XMLSchema#double"/>
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#double">9001</AttributeValue>
</EnvironmentMatch>
</Environment>
ポリシーおよびポリシーセット識別子
XACMLでは、Policy
要素を使用して1つまたは複数のルールを記述し、PolicySet
要素を使用して1つまたは複数のポリシーを記述できます。各要素には、ユニークな識別子を提供するためのPolicySetId
属性を含める必要があります。XACML仕様では、PolicySetId
識別子を有効なURI値にすることが要件になっています。
XACMLドキュメントでは、PolicySetId
を使用して、特定のPolicy
またはPolicySet
要素を別のPolicySet
要素に含めることができます。WebLogic Serverでは、認可プロバイダやロール・マッピング・プロバイダのポリシー・ストアで、PolicySetId
をキーとして使用します。
WebLogic Serverでは、urn:bea:
で始まるURI値は内部使用のために予約されています。urn:bea:
で始まるURIを使用して独自のポリシーを作成することはできませんが、それらの値を使用してOracleのポリシーを独自のポリシー・セットに含めることはできます。
リソース識別子
XACMLでは、Resource
要素を使用して、データ、サービス、またはシステム・コンポーネントを表現します。
WebLogic Serverでは、XACML 2.0コア仕様の説明に従って、すべてのXACML Resource
識別子がサポートされます。
Weblogic serverリソースを識別するには、リソース識別子を表A-4に説明する方法で使用します。WebLogic Serverリソースについては、「ポリシーで保護できるリソースのタイプ」を参照してください。
表A-4 WebLogic Serverのリソース識別子
次を識別するには... | 次の識別子を使用します... |
---|---|
リソース |
「保護するリソースのIDの取得」を参照してください |
リソースとその祖先 |
「保護するリソースのIDの取得」を参照してください |
リソースの親 |
「保護するリソースのIDの取得」を参照してください |
リソースの祖先 |
「保護するリソースのIDの取得」を参照してください |
例
次の例では、Resource
要素がSimpleSoapPortというWebサービスに一致し、そのWebサービス内のすべてのメソッドが返されます。
<Resource> <ResourceMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">type=<webservices>, application=webservicesJwsSimpleEar, contextPath=/jws_basic_simple, webService=SimpleSoapPort</AttributeValue> <ResourceAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:2.0:resource:resource-ancestor" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> </ResourceMatch> </Resource>
サブジェクト識別子
XACMLでは、Subject
要素を使用して、述部から参照できる属性を持つアクタを表現します。
WebLogic Serverでは、XACML 2.0のコア仕様に記載されている、XACMLサブジェクト識別子がサポートされています。
WebLogic Serverレルムに定義されているWebLogic Serverのユーザー、グループ、またはロールを識別するには、サブジェクト識別子を表A-5に説明する方法で使用します。
表A-5 WebLogicのサブジェクト識別子
次を識別するには... | 次の識別子を使用します... |
---|---|
ユーザー・プリンシパル |
|
グループ・プリンシパル |
|
ロール |
ノート: WebLogic Serverでは、この属性を定義しているRBACプロファイル仕様の一部のみがサポートされています。 |
SOAPドキュメントに署名したサブジェクト |
|
WebLogic ServerのXACML関数
以下の節では、XACMLのコア仕様に定義されている関数以外に、WebLogic ServerのXACMLプロバイダでサポートされる関数について説明します。
カスタム・データ型のバリアント
以下の関数識別子は、標準のXACML関数を直接移植したもので、XMLおよびWebLogic Serverのデータ型long
、float
、decimal
、およびbea:Character
に使用できます。これらのデータ型の詳細は、Oracle WebLogic Server Java APIリファレンスのcom.bea.common.security.xacml.Type
を参照してください。
この一覧のtype
には、データ型の名前(long
、float
、decimal
、またはcharacter
)が入ります。
urn:bea:xacml:2.0:function:type-equal urn:bea:xacml:2.0:function:type-greater-than urn:bea:xacml:2.0:function:type-greater-than-or-equal urn:bea:xacml:2.0:function:type-less-than urn:bea:xacml:2.0:function:type-less-than-or-equal urn:bea:xacml:2.0:function:type-one-and-only urn:bea:xacml:2.0:function:type-bag-size urn:bea:xacml:2.0:function:type-is-in urn:bea:xacml:2.0:function:type-bag urn:bea:xacml:2.0:function:type-intersection urn:bea:xacml:2.0:function:type-union urn:bea:xacml:2.0:function:type-at-least-one-member-of urn:bea:xacml:2.0:function:type-subset urn:bea:xacml:2.0:function:type-set-equals
bea:Object
を比較する関数については、「オブジェクトの比較」を参照してください
例
次に、urn:bea:xacml:2.0:function:character-equal
を使用して2つのbea:character
を比較するCondition
の例を示します。
<Condition> <Apply FunctionId="urn:bea:xacml:2.0:function:character-equal"> <AttributeValue DataType="urn:bea:xacml:2.0:data-type:character">Q</AttributeValue> <AttributeValue DataType="urn:bea:xacml:2.0:data-type:character">Q</AttributeValue> </Apply> </Condition>
その他の関数
表A-6に、標準のXACML関数以外にWebLogic SERVERで提供されるその他の関数をまとめます。
表A-6 その他のWebLogic Server XACML関数
関数 | 説明 |
---|---|
|
『構成ウィザードによるWebLogicドメインの作成』のWebLogicドメインの作成に関する項を参照してください。 |
|
この関数は、以下の引数を取ります。
呼び出されたメソッドの戻り値は、関数からは |
|
この関数は、以下の引数を取ります。
この関数は、パラメータ 呼び出されたメソッドの戻り値は、関数からは |
|
この関数は、以下の引数を取ります。
呼び出されたメソッドの戻り値は、関数からは |
|
この関数は、以下の引数を取ります。
呼び出されたメソッドの戻り値は、関数からは |
|
この関数は、Java Reflection APIを使用して、指定された
|
例
次のポリシーは、リクエストが特定のURLパターンに一致すると、instance-method
関数を使用してHttpServletRequest.getAuthType()
メソッドを呼び出します(http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletRequest.html#getAuthType
にある「Java EE 7 Platform API Specification」のjavax.servlet.http.HttpServletRequest.getAuthType()
を参照)。WebLogic ServerのContextHandler
は、サーブレット・コンテナ経由で受け付けるすべてのリクエストにおいて、このHttpServletRequest
オブジェクトを認可プロバイダおよびロール・マッピング・プロバイダで使用できるようにします。URLリソースのすべてのポリシーは、このメソッドまたは他のHttpServletRequest
メソッドを呼び出すことができます。
例A-1 HttpServletRequest.getAuthType()を呼び出すポリシー
<Policy xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os" PolicyId="urn:sample:xacml:2.0:function:instance-method" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm: first-applicable"> <Description>function:instance-method</Description> <Target> <Resources> <Resource> <ResourceMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">type=<url>, application=MedRecEAR, contextPath=,uri=/docs/*</AttributeValue> <ResourceAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:2.0:resource: resource-ancestor-or-self" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"/> </ResourceMatch> </Resource> </Resources> </Target> <!-- Declaring the instance-method function as a variable because this policy invokes it multiple times. --> <VariableDefinition VariableId="authType"> <Apply FunctionId="urn:bea:xacml:2.0:function:instance-method"> <!-- Passing the HttpServletRequest object to the function, which the BEA ContextHandler makes available to the security framework. --> <Apply FunctionId="urn:bea:xacml:2.0:function:object-one-and-only"> <EnvironmentAttributeDesignator DataType="urn:bea:xacml:2.0:data-type:object" AttributeId="urn:bea:xacml:2.0:environment:context:com.bea. contextelement.servlet.HttpServletRequest" /> </Apply> <!-- Passing "getAuthType()" as the name of the HttpServletRequest method to invoke --> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">getAuthType</AttributeValue> <!-- Because the getAuthType() method signature contains no parameters, pass an empty bag of Class. --> <Apply FunctionId="urn:bea:xacml:2.0:function:class-bag" /> </Apply> </VariableDefinition> <!-- Creating a rule that allows access to the resource only if the getAuthType() returns a non-null value and if the non-null value is "CLIENT_CERT" --> <Rule RuleId="primary-rule" Effect="Permit"> <Condition> <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and"> <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:not"> <Apply FunctionId="urn:bea:xacml:2.0:function:object-is-null"> <VariableReference VariableId="authType" /> </Apply> </Apply> <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal"> <!-- Because the instance-method function returns a bea:Object, this policy wraps the function in an object-to-string function, which enables comparison a of the function output with another string. --> <Apply FunctionId="urn:bea:xacml:2.0:function:object-to-string"> <VariableReference VariableId="authType" /> </Apply> <!-- Declaring a String object to compare to the HttpServletRequest.getAuthType() return value. --> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">CLIENT_CERT</AttributeValue> </Apply> </Apply> </Condition> </Rule> <Rule RuleId="deny-rule" Effect="Deny" /> </Policy>
日付および時刻の変換
表A-7に、XACMLの日付と時刻を別のデータ型に変換するためのOracle提供の関数をまとめます。
表A-7 WebLogic Serverの日付および時刻の変換
関数 | 説明 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
算術変換および算術関数
表A-8に、算術値を別の入力型に変換するためのOracle提供の関数、およびXACMLで定義されている算術関数の基本セットを拡張するためのOracle提供の関数をまとめます。
表A-8 Weblogic Serverの算術変換および算術関数
関数 | 説明 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
オブジェクト型の変換
WebLogic Serverには、XACMLデータをJavaオブジェクトに変換するための様々な関数が用意されています。各関数のURIは、次のようになっています。
urn:bea:xacml:2.0:function:type-to-object
type
には、XACMLデータ型の名前が入ります。表A-9に、すべてのデータ型と、それらに対応する関数によって返されるJavaオブジェクトをまとめます。
たとえば、この関数では、java.lang.String
オブジェクトとしてtestが返されます。
<Apply FunctionId="urn:bea:xacml:2.0:function:string-to-object">test</Apply>
表A-9 データからJavaオブジェクトへの変換
型が等しい場合... | urn:bea:xacml:2.0:function:type-to-object関数は次を返します... |
---|---|
character |
|
string |
|
boolean |
|
integer |
|
double |
|
float |
|
long |
|
decimal |
|
base64Binary |
|
hexBinary |
|
date |
|
time |
|
dateTime |
|
dayTimeDuration |
|
yearMonthDuration |
|
rfc822Name |
|
x500Name |
|
anyURI |
|
ipAddress |
|
dnsAddress |
|
表A-10には、文字列またはJavaオブジェクトを別のデータ型またはオブジェクト型に変換するためのOracle提供の関数をまとめます。コンテナが現在のコンテキストで使用可能にするオブジェクトを渡すには、環境識別子urn:bea:xacml:2.0:environment:context:
key
を使用して、bea:Object.
を指定します。「環境識別子」を参照してください。
表A-10 WebLogic Serverオブジェクトの変換
関数 | 説明 |
---|---|
|
|
|
|
|
|
|
|
オブジェクトの比較
表A-11に、Javaオブジェクトを比較するためのOracle提供の関数をまとめます。
表A-11 WebLogic Serverオブジェクトの比較
関数 | 説明 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
文字列の比較と操作
表A-12に、Javaオブジェクトを比較するためのOracle提供の関数をまとめます。
表A-12 Weblogic Serverでの文字列の比較と操作
関数 | 説明 |
---|---|
|
|
|
この関数は、
比較では、大文字小文字は区別されません。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|