|
XACML (eXtensible Access Control Markup Language) は、認可ポリシーおよびロールの割り当てを記述するための XML 言語です。XACML には拡張ポイントが用意されており、Oracle のようなベンダが独自のリソース、データ型、関数を XACML で表現できるようになっています。
WebLogic Server の XACML 認可プロバイダおよび XACML ロール マッピング プロバイダには、XACML 2.0 のコア仕様が実装および拡張されています (OASIS XACML 2.0 のコア仕様を参照)。また、これらのプロバイダには、「Core and Hierarchical Role Based Access Control (RBAC) Profile of XACML 2.0」も部分的に実装されています (OASIS RBAC 仕様を参照)。
以下の節では、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 メソッドがリソースと見なされます。図 7-1 を参照してください。
EJB メソッドなどのアクションを XACML リソースとして記述することが可能ですが、XACML でのより自然な表現方法は、EJB をリソースとして定義し、EJB メソッドをリソース内のアクションとして定義する方法です。
WebLogic Server でリソースやポリシーについて説明するための用語は、Java EE デプロイメント記述子のモデルに準拠しています。この Java EE モデルでは、以下の用語を使用して主要な概念を説明しています。
XACML では、ポリシーはルールのセットから構成されており、誰にロールを割り当て、誰がリソースにアクセスできるかは、このポリシーを使用して決定します。つまり、XACML のポリシーは、WebLogic Server のロール文やポリシー文に相当します。
WebLogic Server では、XACML のコア仕様で必要とされているすべてのデータ型がサポートされます。それ以外にも、標準 XML データ型や、さまざまなカスタム データ型がサポートされています。このマニュアルでは、Oracle 独自のカスタム データ型を、bea:
というプレフィックスを付けて表します。
WebLogic XACML プロバイダで認識されるすべてのデータ型の詳細については、WebLogic Server API リファレンスの com.bea.common.security.xacml.Type
を参照してください。
XACML では、Action
要素を使用して、リソース内での処理やリソースの階層を識別します。
WebLogic Server では、XACML のすべての Action
識別子がサポートされます (OASIS XACML 2.0 のコア仕様を参照)。また、XACML の environment 識別子を使用できる場所ならどこでも使用できる追加の識別子 1 つもサポートされています。
WebLogic Server リソース内の処理 (たとえば、特定の EJB メソッド) を識別するには、表 A-1 の説明に従って action 識別子を使用します。
注意 : | resource 識別子を使用して処理 (EJB メソッドなど) を記述することは可能ですが、XACML でのより自然な表現方法は action 識別子を使用する方法です。「WebLogic Server と XACML のセキュリティ モデルの比較」を参照してください。 |
weblogic.security.spi.Direction (セキュリティ プロバイダに ONCE 、PRIOR 、または POST を渡すために使用するオブジェクト型) を参照。
|
表 A-2 では、action-id
識別子に指定する値について説明します。
weblogic.security.service.AdminResource コンストラクタの action パラメータを参照。
|
|
weblogic.security.service.JDBCResource コンストラクタの action パラメータを参照。
|
|
weblogic.security.service.JMSResource コンストラクタの action パラメータを参照。
|
|
weblogic.security.service.JNDIResource コンストラクタの action パラメータを参照。
|
|
|
|
weblogic.security.service.WorkContextResource コンストラクタの action パラメータを参照。
|
|
次の例では、Action
要素を使用して、SimpleSoap Web サービス内の mymethod
を対象として指定しています。
<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
識別子がサポートされます (OASIS XACML 2.0 のコア仕様を参照)。また、XACML の environment 識別子を使用できる場所ならどこでも使用できる追加の識別子 1 つもサポートされています。表 A-3 を参照してください。
key には ContextHandler 要素名を指定する (『WebLogic セキュリティ プロバイダの開発』の「ContextHandler と WebLogic リソース」を参照)。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 のポリシーを独自のポリシー セットに含めることはできます。
<Policy
PolicyId="urn:mycompany:myapplication:policyid:1"
...>
次に、上の Policy
要素への有効な参照の例を示します。
<PolicyIdReference>
urn:mycompany:myapplication:policyid:1</PolicyIdReference>
XACML では、Resource
要素を使用して、データ、サービス、またはシステム コンポーネントを表現します。
WebLogic Server では、XACML のすべての Resource
識別子がサポートされています (OASIS XACML 2.0 のコア仕様を参照)。
WebLogic Server リソースを識別するには、resource 識別子を表 A-4 に説明する方法で使用します。WebLogic Server リソースについては、「ポリシーで保護できるリソースのタイプ」を参照してください。
|
||
|
||
|
次の例では、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 のすべての Subject
識別子がサポートされています (OASIS XACML 2.0 のコア仕様を参照)。
WebLogic Server レルムに定義されている WebLogic Server のユーザ、グループ、またはロールを識別するには、subject 識別子を表 A-5 に説明する方法で使用します。
Web サービスへのアクセスを保護するために使用できるセキュリティ ロールを、表 A-5 に示した識別子を使用して定義している XACML ドキュメントの例については、コード リスト 7-1 を参照してください。
以下の節では、XACML のコア仕様に定義されている関数以外に、WebLogic Server の XACML プロバイダでサポートされる関数について説明します。
以下の function 識別子は、標準の XACML 関数を直接移植したもので、XML および WebLogic Server のデータ型 long
、float
、decimal
、および bea:Character
に使用できます。これらのデータ型の詳細については、『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 で提供されるその他の関数をまとめます。
|
||
|
||
|
||
|
||
|
||
|
次に示すポリシーは、リクエストが特定の URL パターンに一致すると、instance-method
関数を使用して HttpServletRequest.getAuthType()
メソッドを呼び出します (Java EE 5.0 API 仕様の javax.servlet.http.HttpServletRequest.getAuthType()
を参照)。WebLogic Server の ContextHandler
は、サーブレット コンテナ経由で受け付けるすべてのリクエストにおいて、この HttpServletRequest
オブジェクトを認可プロバイダおよびロール マッピング プロバイダで使用できるようにします。URL リソースのすべてのポリシーは、このメソッドまたは他の HttpServletRequest
メソッドを呼び出すことができます。
<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>
<!-- このポリシーでは、instance-method 関数を複数回呼び出すため、
これを変数として宣言する。
-->
<VariableDefinition VariableId="authType">
<Apply FunctionId="urn:bea:xacml:2.0:function:instance-method">
<!-- HttpServletRequest オブジェクトを関数に渡す。BEA の ContextHandler は、このオブジェクトを
セキュリティ フレームワークで使用できるようにする。
-->
<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>
<!-- 「getAuthType()」を、呼び出す HttpServletRequest メソッドの
名前として渡す。
-->
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">
getAuthType
</AttributeValue>
<!-- getAuthType() メソッド シグネチャにはパラメータは含まれないため、
クラスの空のバッグを渡す。
-->
<Apply FunctionId="urn:bea:xacml:2.0:function:class-bag" />
</Apply>
</VariableDefinition>
<!-- getAuthType() が null 以外の値として「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">
<!-- instance-method 関数は bea:Object を返すため、
このポリシーでは関数を object-to-string 関数内にラップする。
これにより、別の文字列で出力される関数の比較が可能
になる。
-->
<Apply FunctionId="urn:bea:xacml:2.0:function:object-to-string">
<VariableReference VariableId="authType" />
</Apply>
<!-- String オブジェクトを宣言して
HttpServletRequest.getAuthType() 戻り値と比較する。
-->
<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-8 に、算術値を別の入力型に変換するための Oracle 提供の関数、および XACML で定義されている算術関数の基本セットを拡張するための Oracle 提供の関数をまとめます。
double 型の引数 2 つを取り、IEEE 754 標準に従って 2 つの引数値を剰余演算した結果を double 値として返す。http://grouper.ieee.org/groups/754/ を参照。
|
||
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-10 には、文字列または Java オブジェクトを別のデータ型またはオブジェクト型に変換するための Oracle 提供の関数をまとめます。コンテナが現在のコンテキストで使用可能にするオブジェクトを渡すには、environment 識別子 urn:bea:xacml:2.0:environment:context:
key
を使用して bea:Object
を指定します。「Environment 識別子」を参照してください。
表 A-11 に、Java オブジェクトを比較するための Oracle 提供の関数をまとめます。
bea:Object 型の引数 2 つを取り、Collection.contains() を呼び出して、1 番目の bea:Object に 2 番目の bea:Object が含まれるかどうかを示す boolean 値を返す。1 番目の bea:Object は java.util.Collection を実装している必要がある。実装していない場合は評価が確定されない。
|
||
bea:Object 型の引数 2 つを取り、Collection.containsAll() を呼び出して、1 番目の bea:Object に 2 番目の bea:Object のすべてが含まれるかどうかを示す boolean 値を返す。2 つの bea:Object は java.util.Collection を実装している必要がある。実装していない場合は評価が確定されない。
|
表 A-12 に、Java オブジェクトを比較するための Oracle 提供の関数をまとめます。
判定に複数の PolicySet
を適用する場合は、それらの結果が次のアルゴリズムで結合されます。
urn:oasis:names:tc:xacml:1.0:policy-combining-algorithm:deny-overrides