| Oracle® Fusion Middleware Oracle WebLogic Serverロールおよびポリシーによるリソースの保護 11gリリース1 (10.3.6) B55556-04 |
|
![]() 前 |
XACML (eXtensible Access Control Markup Language)は、認可ポリシーおよびロールの割当てを記述するためのXML言語です。XACMLには拡張ポイントが用意されており、Oracleのようなベンダーが独自のリソース、データ型、関数をXACMLで表現できるようになっています。
WebLogic ServerのXACML認可プロバイダおよびXACMLロール・マッピング・プロバイダ:
http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-core-spec-os.pdfにあるOASIS XACML 2.0のコア仕様 を実装および拡張します。
http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-rbac-profile1-spec-os.pdfにあるOASIS RBAC仕様で説明されている「Core and Hierarchical Role Based Access Control (RBAC) Profile of XACML 2.0」も部分的に実装します。
以下の節では、XACML 2.0ドキュメントを記述してWebLogic Server上のリソースを保護する場合に使用できる拡張について説明します。また、WebLogic ServerでXACMLを使用する場合の制約についても説明します。
ここでは、XACMLのWebLogic Server拡張、およびその制限事項についてのみ説明しています。XACML 2.0言語の完全なリファレンス情報については、OASIS XACML 2.0コア仕様 およびOASIS RBAC仕様を参照してください。
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のロール文やポリシー文に相当します。
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 APIリファレンスの 注意: 認可プロバイダでは、Directionオブジェクトを判定内で使用することもできます。WebLogic ServerのXACML認可プロバイダでは、 |
表A-2では、action-id識別子に指定する値について説明します。
表A-2 action-id識別子の値
| その処理を含むリソースの種類 | 指定する値 |
|---|---|
Admin |
Adminリソースによって保護する管理アクティビティの名前。たとえば 有効な値については、Oracle WebLogic Server APIリファレンスの |
Application |
管理コンソールに表示されるアプリケーション名。 |
|
コントロール |
Javaコントロール内のメソッドの名前。Javaコントロールは、再利用可能なコンポーネントで、WebLogic Platformアプリケーション内の任意の場所に作成して使用できます。 |
|
EJB |
EJBメソッドの名前。たとえば |
|
JDBC |
JDBCリソースによって保護する管理アクティビティの名前。 有効な値については、Oracle WebLogic Server APIリファレンスの |
|
JMS |
JMSリソースによって保護する管理アクティビティの名前。 有効な値については、Oracle WebLogic Server APIリファレンスの |
|
JMX |
WebLogic Server MBean内の処理の名前。たとえば |
|
JNDI |
JNDIリソースによって保護する管理アクティビティの名前。 有効な値については、Oracle WebLogic Server APIリファレンスの |
|
サーバー |
サーバー・リソースによって保護するサーバー・ライフサイクル・アクティビティの名前。たとえば 有効な値については、「サーバー・リソース」を参照。 |
|
URL |
HTTPメソッドの名前。たとえば |
|
Webサービス |
Webサービス・メソッドの名前。たとえば |
|
ワーク・コンテキスト |
ワーク・コンテキスト・リソースによって保護する管理アクティビティの名前。 有効な値については、Oracle WebLogic Server APIリファレンスの |
|
その他 |
文字列 |
次の例では、Action要素を使用して、SimpleSoap Webサービス内のmymethodを対象として指定しています。
|
注意: <AttributeValue>要素に値を指定するときは、余分な空白を含めないでください。具体的には、次のとおりです。
例: <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: |
urn:bea:xacml:2.0:environment:context:key
この識別子では、『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リソースについては、第3章「ポリシーで保護できるリソースのタイプ」を参照してください。
表A-4 WebLogic Serverのリソース識別子
| 次を識別するには... | 次の識別子を使用します... |
|---|---|
|
Resource |
「保護するリソースの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ドキュメントに署名したサブジェクト |
|
以下の節では、XACMLのコア仕様に定義されている関数以外に、WebLogic ServerのXACMLプロバイダでサポートされる関数について説明します。
以下の関数識別子は、標準のXACML関数を直接移植したもので、XMLおよびWebLogic Serverのデータ型long、float、decimal、およびbea:Characterに使用できます。これらのデータ型の詳細は、Oracle WebLogic Server 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関数
| 関数 | 説明 |
|---|---|
|
in-development-mode |
『構成ウィザードによるドメインの作成』のWebLogicドメインの作成に関する項を参照してください。 |
|
instance-method |
この関数は、以下の引数を取ります。
呼び出されたメソッドの戻り値は、関数からは |
|
instance-method-match |
この関数は、以下の引数を取ります。
この関数は、パラメータ 呼び出されたメソッドの戻り値は、関数からは |
|
instance-method-v2 |
この関数は、以下の引数を取ります。
呼び出されたメソッドの戻り値は、関数からは |
|
instance-method-match-v2 |
この関数は、以下の引数を取ります。
呼び出されたメソッドの戻り値は、関数からは |
|
instance-method-match-v3 |
この関数は、Java Reflection APIを使用して、指定された
|
次のポリシーは、リクエストが特定のURLパターンに一致すると、instance-method関数を使用してHttpServletRequest.getAuthType()メソッドを呼び出します(http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getAuthTypeにある「Java Platform, Enterprise Edition 6 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の日付および時刻の変換
| 関数 | 説明 |
|---|---|
|
dateTime-dayOfMonth |
|
|
dateTime-dayOfMonthMaximum |
|
|
dateTime-dayOfWeek |
|
|
dateTime-secondsOfDay |
|
|
dayTimeDuration-timeZoneOffset |
|
|
string-to-dateTime |
|
|
string-to-date |
|
|
object-to-dateTime |
|
|
object-to-date |
|
表A-8に、算術値を別の入力型に変換するためのOracle提供の関数、およびXACMLで定義されている算術関数の基本セットを拡張するためのOracle提供の関数をまとめます。
表A-8 Weblogic Serverの算術変換および算術関数
| 関数 | 説明 |
|---|---|
|
float-to-double |
|
|
long-to-double |
|
|
long-to-float |
|
|
integer-to-float |
|
|
integer-to-long |
|
|
string-to-double |
|
|
string-to-long |
|
|
string-to-integer |
|
|
string-to-float |
|
|
to-degrees |
|
|
to-radians |
|
|
acos |
|
|
asin |
|
|
atan |
|
|
atan2 |
|
|
ceil |
|
|
cos |
|
|
exp |
|
|
ieee-remainder |
|
|
log |
|
|
maximum |
|
|
minimum |
|
|
pow |
|
|
random-number |
|
|
rint |
|
|
sqrt |
|
|
tan |
|
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 |
java.lang.Character |
|
string |
java.lang.String |
|
boolean |
java.lang.Boolean |
|
integer |
java.lang.Integer |
|
double |
java.lang.Double |
|
float |
java.lang.Float |
|
long |
java.lang.Long |
|
decimal |
java.lang.Double |
|
base64Binary |
java.lang.Byte[] |
|
hexBinary |
java.lang.Byte[] |
|
date |
java.util.Calendar |
|
time |
java.util.Calendar |
|
dateTime |
java.util.Calendar |
|
dayTimeDuration |
java.lang.Long |
|
yearMonthDuration |
java.lang.Integer |
|
rfc822Name |
java.lang.String |
|
x500Name |
java.lang.String |
|
anyURI |
java.net.URI |
|
ipAddress |
java.lang.String |
|
dnsAddress |
java.lang.String |
表A-10には、文字列またはJavaオブジェクトを別のデータ型またはオブジェクト型に変換するためのOracle提供の関数をまとめます。コンテナが現在のコンテキストで使用可能にするオブジェクトを渡すには、環境識別子urn:bea:xacml:2.0:environment:context:keyを使用して、bea:Object.を指定します。「環境識別子」を参照してください。
表A-10 WebLogic Serverオブジェクトの変換
| 関数 | 説明 |
|---|---|
|
string-to-class |
|
|
object-to-string |
|
|
object-to-double |
|
|
object-to-integer |
|
表A-11に、Javaオブジェクトを比較するためのOracle提供の関数をまとめます。
表A-11 WebLogic Serverオブジェクトの比較
| 関数 | 説明 |
|---|---|
|
object-is-null |
|
|
object-equal |
|
|
object-greater-than |
|
|
object-greater-than-or-equal |
|
|
object-less-than |
|
|
object-less-than-or-equal |
|
|
object-collection-contains |
|
|
object-collection-contains-all |
|
表A-12に、Javaオブジェクトを比較するためのOracle提供の関数をまとめます。
表A-12 Weblogic Serverでの文字列の比較と操作
| 関数 | 説明 |
|---|---|
|
string-char-at |
|
|
string-compare-to-ignore-case |
この関数は、
比較では、大文字小文字は区別されません。 |
|
string-contains |
|
|
string-starts-with |
|
|
string-ends-with |
|
|
string-length |
|
|
string-replace |
|
|
string-substring |
|
|
string-normalize-to-upper-case |
|
判定に複数のPolicySetを適用する場合は、それらの結果が次のアルゴリズムで結合されます。
urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:deny-overrides