![]() ![]() ![]() ![]() |
XACML (eXtensible Access Control Markup Language) は、認可ポリシーおよびロールの割り当てを記述するための XML 言語です。WebLogic Server の XACML 認可プロバイダおよび WebLogic Server XACML ロール マッピング プロバイダには、XACML 2.0 のコア仕様が実装されています (XACML 2.0 のコア仕様を参照)。
WebLogic Server Administration Console で作成できるものよりも複雑なセキュリティ ロールまたはポリシーを作成する必要がある場合、または、セキュリティ ロールおよびポリシーを標準の言語で表現する必要がある場合は、ロールおよびポリシーを XACML ドキュメントで作成し、WebLogic Scripting Tool を使用してセキュリティ レルムに追加することができます。また、レルムのロールとポリシーを XACML ドキュメントにエクスポートし、そのドキュメントを他の WebLogic Server レルムにインポートできます。たとえば、開発環境のレルムからロールとポリシーをエクスポートし、プロダクション環境のレルムにインポートできます。
次の節では、XACML ドキュメントを使用して WebLogic Server リソースを保護する方法を説明します。
警告 : | XACML ドキュメントをセキュリティ レルムにロードする前に、必ずバックアップを作成してください。属性の記述に誤字などのエラーがあると、XACML プロバイダはレルムのロールとポリシーを不確定な要素として評価し、その結果、すべてのユーザ (管理者も含む) がドメインからロックされてしまう場合があります。詳細については、「警告 : 不確定な結果によってすべてのユーザがロックアウトされる可能性がある」を参照してください。 |
XACML ドキュメントを使用して WebLogic Server リソースを保護する場合、次の前提条件に留意してください。
weblogic.management.security.authorization.PolicyStoreMBean
インタフェースを実装するサード パーティの認可プロバイダを使用する必要がある。weblogic.management.security.authorization.PolicyStoreMBean
インタフェースを実装するサード パーティのロール マッピング プロバイダを使用する必要がある。
カスタムのロールおよびポリシーが記述される XACML ドキュメントを作成し、WebLogic Scripting Tool を使用してセキュリティ レルムにロールまたはポリシーを追加できます。
XACML 仕様では、決定エンジンが決定点を処理できない場合、不確定な結果が返されます。決定点とそれに関連付けられた決定点に対して使用する結合アルゴリズムによっては、不確定な結果が決定の最上位に伝播し、プロバイダがすべての要求へのアクセスを拒否する可能性があります。
たとえば、次の属性には MustBePresent='true'
が指定され、スペルの間違い (ancestor
ではなく ancest
er
) が含まれています。この場合、不確定として評価されて、セキュリティ プロバイダはアクセスを拒否します。
<ResourceAttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:2.0:resource:resource-ancester"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="true"/>
WebLogic Server では、リソースが階層にまとめられています。Administration Console または Java EE デプロイメント記述子 (XACML ドキュメントではない) を使用して WebLogic リソースを保護する場合、階層の上位のリソースに作成されたポリシーは、同じ階層の下位に存在するリソースに対してデフォルトのポリシーとして機能します。下位階層のポリシーは、常に上位階層のポリシーをオーバーライドします。
XACML ドキュメントは、この階層による保護方式をエンコードできます。ただし、XACML の階層モデルは WebLogic Server とは少し異なります。「WebLogic Server と XACML のセキュリティ モデルの比較」を参照してください。
リソースをデプロイまたは作成すると、ユニークで不変な識別子 (ID) が作成されますが、XACML ドキュメントには WebLogic Server ID を指定するリソース識別子が含まれる必要があります。
WebLogic Server がリソースに割り当てる ID を見つけるには、次の手順に従います。
Administration Console オンライン ヘルプの「監査プロバイダのコンフィグレーション」を参照してください。監査プロバイダによって保存されるログ ファイルの場所は記録しておいてください (デフォルトでは、サーバの logs
ディレクトリに保存されます)。
たとえば、Web サービス クライアントを使用して、保護する Web サービス メソッドを呼び出します。
これにより、監査プロバイダがリソースへのメッセージを生成するイベントがトリガされます。
たとえば、WebLogic Server デフォルト監査プロバイダを重大度レベル INFORMATION
以上のメッセージを生成するようにコンフィグレーションする場合、sayHello
メソッドを SimpleSoapPort
という Web サービスから呼び出すと、監査ログには次のエントリ (ロール マッピング プロバイダから 1 つと認可プロバイダから 1 つ) が記録されます。
#### Audit Record Begin <Mar 30, 2006 9:24:12 AM>
<Severity =INFORMATION>
<<<Event Type = RoleManager Audit Event ><Subject: 0>
<<webservices>><type=<webservices>,
application=webservicesJwsSimpleEar, contextPath=/jws_basic_simple,
webService=SimpleSoapPort, method=sayHello,
signature={java.lang.String}><>>> Audit Record End ####
#### Audit Record Begin <Mar 30, 2006 9:24:12 AM>
<Severity =SUCCESS>
<<<Event Type = Authorization Audit Event V2 ><Subject: 0>
<ONCE><<webservices>><type=<webservices>,
application=webservicesJwsSimpleEar, contextPath=/jws_basic_simple,
webService=SimpleSoapPort, method=sayHello,
signature={java.lang.String}>>> Audit Record End ####
sayHello
メソッドのリソース ID は次のとおりです。type=<webservices>,
application=webservicesJwsSimpleEar, contextPath=/jws_basic_simple,
webService=SimpleSoapPort, method=sayHello,
signature={java.lang.String}
監査ログの ID は、WebLogic Server リソース階層の最下位にあるリソース用です。通常は、特定のオペレーション (Web サービスや EJB のメソッド、特定の URL の HTTP メソッドなど) に対してポリシーを作成するのではなく、階層のより上位のリソース (URL パターンや Web サービス全体など) に対してポリシーを作成します。
次のリソース ID は、前述の手順のリソース ID から得ることができます。
sayHello
メソッドを含む Web サービスの ID は次のとおりです。type=<webservices>,
application=webservicesJwsSimpleEar, contextPath=/jws_basic_simple,
webService=SimpleSoapPort
type=<
application
>,
application=webservicesJwsSimpleEar
アプリケーションのリソース ID では、type=<application>
を指定します。
type=<webservices>
ルート レベルのポリシーとリソースの階層の詳細については、「ポリシーを使用して複数のリソースを保護する」を参照してください。
ロールの割り当ておよび認可ポリシーを作成する場合、2 つの XACML ドキュメント (ロールを記述するドキュメントとポリシーを記述するドキュメント) を作成します。一方のドキュメントをロール マッピング プロバイダのストアにロードし、もう一方のドキュメントを認可プロバイダのストアにロードします。
XACML を使用して WebLogic Server リソースを記述する方法については、「WebLogic Server における XACML のリファレンス」を参照してください。
XACML ドキュメントのロールの割り当てを記述するための構文は、RBAC プロファイル仕様に明記されています (WebLogic Server では、この仕様のサブセットのみをサポートしています)。
Policy
親要素。Policy
の下位要素として Target
要素。Target
の下位要素として、次の ResourceMatch
要素を含む 1 つ以上の Resource
要素。
(省略可能) ロールの名前を特定する 1 つの ResourceMatch
要素。この ResourceMatch
要素を含めない場合は、ロール ポリシーがレルム内のすべてのロールに適用されます。MatchId
属性には function 識別子 (ワイルドカードを含むロール名) を指定できます。DataType
属性には string
型を指定する必要があります。
(省略可能) ロールが適用される WebLogic リソースを特定する別の ResourceMatch
要素。この ResourceMatch
要素を含めない場合は、ロールがすべての WebLogic リソースに適用されます。
Target
の下位要素として、ポリシーがその他のリソース タイプではなくロールに適用されることを示す Action
要素。Policy
の下位要素として、ロール内にユーザ、グループ、ロールを定義する 1 つまたは複数の Rule
要素。
コード リスト 7-1 の XACML ドキュメントでは、MyRole
というロールが SimpleSoapPort
Web サービスで使用できるように指定しています。また、webServiceGroup グループがロールに存在するように指定しています。
<Policy xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os"
PolicyId="urn:sample:xacml:2.0:myRolePolicy"
RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:
first-applicable">
<Description>My Role Policy</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=<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>
<ResourceMatch
MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">
MyRole
</AttributeValue>
<ResourceAttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:2.0:subject:role"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="true" />
</ResourceMatch>
</Resource>
</Resources>
<Actions>
<Action>
<ActionMatch
MatchId="urn:oasis:names:tc:xacml:1.0:function:anyURI-equal">
<AttributeValue
DataType="http://www.w3.org/2001/XMLSchema#anyURI">
urn:oasis:names:tc:xacml:2.0:actions:enableRole
</AttributeValue>
<ActionAttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"
DataType="http://www.w3.org/2001/XMLSchema#anyURI"
MustBePresent="true" />
</ActionMatch>
</Action>
</Actions>
</Target>
<Rule RuleId="primary-rule" Effect="Permit">
<Condition>
<Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">
webServiceGroup
</AttributeValue>
<SubjectAttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:2.0:subject:group"
DataType="http://www.w3.org/2001/XMLSchema#string" />
</Apply>
</Condition>
</Rule>
<Rule RuleId="deny-rule" Effect="Deny" />
</Policy>
コード リスト 7-2 の XACML ドキュメントでは、MyRole
ロールのみが SimpleSoapPort
Web サービスにアクセスできるように指定しています。
<Policy PolicyId="urn:sample:xacml:2.0:myID"
RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:
first-applicable">
<Description>My XACML Authorization Policy</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=<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>
</Target>
<Rule RuleId="primary-rule" Effect="Permit">
<Condition>
<Apply
FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
<AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">
don
</AttributeValue>
<SubjectAttributeDesignator
AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
SubjectCategory="urn:oasis:names:tc:xacml:1.0:subject-category:
access-subject"/>
</Apply>
</Condition>
</Rule>
<Rule RuleId="deny-rule" Effect="Deny"/>
</Policy>
WebLogic Scripting Tool (WLST) は、XACML ドキュメントを WebLogic セキュリティ レルムにロードするのに使用できるコマンドライン スクリプト インタフェースです。
WLST は対話モードまたはスクリプト モードで使用できます。WLST はオフライン モードでは使用できません。認証プロバイダとロール マッピング プロバイダは、管理サーバの実行時のみポリシー ストアを更新できます。
スクリプト モードの使用の詳細については、『WebLogic Scripting Tool ガイド』の「WebLogic Scripting Tool の使用」を参照してください。
WLST の対話モードを使用するための手順を以下に示します。
localhost:7001
でリスンしている WebLogic Server インスタンスに接続するために、次のコマンドを入力します。String
オブジェクトにロードするために、次のコマンドを入力します。
ポリシーを追加、変更、または削除するのに使用できるオペレーションの詳細なリストについては、『WebLogic Server MBean リファレンス』の「XACMLAuthorizerMBean
」を参照してください。
WebLogic Server Administration Console では、XACML ドキュメントから追加するロールおよびポリシーが表示されません。
その代わり、ロールおよびポリシーがレルムに追加されたかどうかを確認するには、「XACML ドキュメントへのロールおよびポリシーのエクスポート」を参照してください。
管理対象 Bean (MBean) は、リソースの管理データおよびオペレーションを公開するための標準です。アプリケーション開発者は、MBean (カスタム MBean) を作成しアプリケーションをモニタおよび管理することによって、アプリケーションの運用および管理コストを大幅に減らすことができます。詳細については、『JMX による管理の容易なアプリケーションの開発』を参照してください。
カスタム MBean を WebLogic Server MBean サーバに登録する場合、MBean に対して誰がアクセスできるのかを定義する XACML ドキュメントを作成できます。「前提条件」に記載した前提条件に加えて、MBean のオブジェクト名には「Type=
value
」キー プロパティが含まれている必要があります。
カスタム MBean に対するロールおよびポリシーを作成するための主な手順は次のとおりです。
カスタム MBean を WebLogic MBean サーバに登録すると、WebLogic Security サービスによって MBean の各属性に対して 2 つのリソース ID (属性のゲッター メソッドとセッター メソッドの ID) が作成されます。各 MBean オペレーションに対しては 1 つのリソース ID が作成されます。
ID には次のパターンが使用されます。type=<jmx>, operation=
type-of-access
, application=,
mbeanType=type-name
, target=
attribute-or-operation
type-of-access
。ポリシーで保護するアクセスのタイプを指定します。以下の値のいずれかを使用します。get
誰が 1 つまたは複数の MBean 属性を読み取ることができるかをポリシーで制御することを示します。
set
誰が 1 つまたは複数の MBean 属性を書き込むことができるかをポリシーで制御することを示します。
invoke
誰が 1 つまたは複数の MBean オペレーションを呼び出すことができるかをポリシーで制御することを示します。
create
誰が MBean サーバの create
メソッドを使用して MBean のインスタンスを作成できるかをポリシーで制御することを示します。
unregister
誰が MBean サーバの unregister
メソッドを使用して MBean のインスタンスを登録解除できるかをポリシーで制御することを示します。
type-name
。MBean オブジェクト名の Type
キー プロパティの値です。attribute-or-operation
。MBean 属性またはオペレーションの名前です。
たとえば、NewUserCount
という 1 つの属性と clearNewUserCount
というオペレーションを含む MBean を作成し、その MBean を medrec:Name=AdminReportMBean,Type=CustomMBeanType
というオブジェクト名で登録する場合、セキュリティ サービスによって次のリソース ID が作成されます。type=<jmx>, operation=get, application=, mbeanType=CustomMBeanType,
target=NewUserCount
type=<jmx>, operation=set, application=, mbeanType=CustomMBeanType,
target=NewUserCount
type=<jmx>, operation=clearNewUserCount, application=,
mbeanType=CustomMBeanType,target=
セキュリティ レルムに存在するすべてのロールおよびポリシーの XACML 表現を確認するために、認可プロバイダとロール マッピング プロバイダからデータをエクスポートできます。
警告 : | ロールおよびポリシーの「ラウンドトリップ」編集を行ってはいけません。つまり、ロールおよびポリシーをエクスポートして、XACML ドキュメントを変更し、変更したドキュメントをインポートしないでください。エクスポートしたファイルを編集すると、WebLogic Server コンフィグレーションが使用できなくなる可能性があります。エクスポートしたファイルの編集はサポートされていません。 |
セキュリティ データのエクスポート方法については、Administration Console オンライン ヘルプの「セキュリティ プロバイダからのデータのエクスポート」を参照してください。
![]() ![]() ![]() |