Oracle® Fusion Middleware Oracle WebLogic Server ロールおよびポリシーによるリソースの保護 11g リリース 1 (10.3.1) B55556-01 |
|
![]() 戻る |
![]() 次へ |
XACML (eXtensible Access Control Markup Language) は、認可ポリシーおよびロールの割り当てを記述するための XML 言語です。WebLogic Server の XACML 認可プロバイダおよび WebLogic Server XACML ロール マッピング プロバイダには、http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-core-spec-os.pdf
にある XACML 2.0 のコア仕様が実行されています。
WebLogic Server Administration Console で作成できるものよりも複雑なセキュリティ ロールまたはポリシーを作成する必要がある場合、または、セキュリティ ロールおよびポリシーを標準の言語で表現する必要がある場合は、ロールおよびポリシーを XACML ドキュメントで作成し、WebLogic Scripting Tool を使用してセキュリティ レルムに追加することができます。また、レルムのロールとポリシーを XACML ドキュメントにエクスポートし、そのドキュメントを他の WebLogic Server レルムにインポートできます。たとえば、開発環境のレルムからロールとポリシーをエクスポートし、プロダクション環境のレルムにインポートできます。
次の節では、XACML ドキュメントを使用して WebLogic Server リソースを保護する方法を説明します。
XACML ドキュメントへのロールおよびポリシーのエクスポート
警告 : XACML ドキュメントをセキュリティ レルムにロードする前に、必ずバックアップを作成してください。属性の記述に誤字などのエラーがあると、XACML プロバイダはレルムのロールとポリシーを不確定な要素として評価し、その結果、すべてのユーザ (管理者も含む) がドメインからロックされてしまう場合があります。詳細については、「警告 : 不確定な結果によってすべてのユーザがロックアウトされる可能性がある」を参照してください。 |
XACML ドキュメントを使用して WebLogic Server リソースを保護する場合、次の前提条件に留意してください。
セキュリティ レルムに XACML 認可ポリシーを追加するには、セキュリティ レルムでは、WebLogic Server XACML 認可プロバイダまたは weblogic.management.security.authorization.PolicyStoreMBean
インタフェースを実装するサード パーティの認可プロバイダを使用する必要がある。
セキュリティ レルムに XACML ロール割り当てを追加するには、セキュリティ レルムでは、WebLogic Server XACML ロール マッピング プロバイダまたは weblogic.management.security.authorization.PolicyStoreMBean
インタフェースを実装するサード パーティのロール マッピング プロバイダを使用する必要がある。
XACML 認可ポリシーまたは XACML ロール ポリシーでリソースを保護するには、リソース識別子 (リソース ID) が必要である。リソースをデプロイまたは作成すると、ユニークで不変な ID が作成されるため、リソースのポリシーを作成する前にリソースをデプロイする必要があります。
EJB または Web アプリケーションを保護するには、カスタム ロールのセキュリティ モデル、またはカスタム ロールおよびポリシーのセキュリティ モデルを使用してデプロイする必要がある。XACML ドキュメントを使用して、デプロイメント記述子のみのセキュリティ モデルを使用してデプロイした EJB や Web アプリケーションのロールとポリシーを作成することはできません。「Web アプリケーション、EJB 用のセキュリティ モデルの比較」を参照してください。
カスタムのロールおよびポリシーが記述される XACML ドキュメントを作成し、WebLogic Scripting Tool を使用してセキュリティ レルムにロールまたはポリシーを追加できます。
その主な手順を以下に示します。
XACML 仕様では、決定エンジンが決定点を処理できない場合、不確定な結果が返されます。決定点とそれに関連付けられた決定点に対して使用する結合アルゴリズムによっては、不確定な結果が決定の最上位に伝播し、プロバイダがすべての要求へのアクセスを拒否する可能性があります。
たとえば、次の属性には、MustBePresent='true'
が指定され、スペルの間違い (ancester
ではなく ancestor
) が含まれています。この場合、不確定として評価されて、セキュリティ プロバイダはアクセスを拒否します。
<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 を見つけるには、次の手順に従います。
監査プロバイダをコンフィグレーションしてレルムに対するセキュリティ監査を有効にします。
『Oracle Fusion Middleware Oracle WebLogic Server 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 を編集して、保護するリソースを指定します。
監査ログの ID は、WebLogic Server リソース階層の最下位にあるリソース用です。通常は、特定のオペレーション (Web サービスや EJB のメソッド、特定の URL の HTTP メソッドなど) に対してポリシーを作成するのではなく、階層のより上位のリソース (URL パターンや Web サービス全体など) に対してポリシーを作成します。
次のリソース ID は、前述の手順のリソース ID から得ることができます。
sayHello メソッドを含む Web サービスの ID は次のとおりです。
type=<webservices>, application=webservicesJwsSimpleEar, contextPath=/jws_basic_simple, webService=SimpleSoapPort
Web Service を含むアプリケーションの ID は次のとおりです。
type=<application>, application=webservicesJwsSimpleEar
アプリケーションのリソース ID では、type=<application>
を指定します。
Web サービス全体に対するルート レベルのポリシーの作成に使用する Web サービス タイプの ID は次のとおりです。
type=<webservices>
ルート レベルのポリシーとリソースの階層の詳細については、「ポリシーを使用して複数のリソースの保護」を参照してください。
ロールの割り当ておよび認可ポリシーを作成する場合、2 つの XACML ドキュメント (ロールを記述するドキュメントとポリシーを記述するドキュメント) を作成します。一方のドキュメントをロール マッピング プロバイダのストアにロードし、もう一方のドキュメントを認可プロバイダのストアにロードします。
XACML を使用して WebLogic Server リソースを記述する方法については、「WebLogic Server における XACML のリファレンス」を参照してください。
XACML ドキュメントのロールの割り当てを記述するための構文は、http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-rbac-profile1-spec-os.pdf
にある OASIS 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
グループがロールに存在するように指定しています。
コード リスト 7-1 ロールに対する XACML ポリシー
<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 サービスにアクセスできるように指定しています。
コード リスト 7-2 Web サービスに対する XACML ポリシー
<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 はオフライン モードでは使用できません。認証プロバイダとロール マッピング プロバイダは、管理サーバの実行時のみポリシー ストアを更新できます。
スクリプト モードの使用の詳細については、『Oracle Fusion Middleware Oracle WebLogic Scripting Tool』の「WebLogic Scripting Tool の使用」を参照してください。
WLST の対話モードを使用するための手順を以下に示します。
コンフィグレーションするレルムを含む WebLogic Server インスタンスを起動します。
コマンド プロンプトを開き、WLST を実行するための環境を設定します。
環境を設定する方法の 1 つを以下に示します。
ドメインのルート ディレクトリに移動します。
setWLSenv
スクリプトを呼び出します (このスクリプトはドメインの作成時にドメイン コンフィグレーション ウィザードで作成します)。
XACML ドキュメントを含むディレクトリに移動します。
WLST を起動して localhost:7001
でリスンしている WebLogic Server インスタンスに接続するために、次のコマンドを入力します。
java weblogic.WLST
このコマンドで WLST プロンプトが返されます。
connect('
username
','
password
','localhost:7001')
ただし、username
と password
は管理ユーザの資格です。
XACML ドキュメントを Java String
オブジェクトにロードするために、次のコマンドを入力します。
xacmlFile = open('
myfile
','r')
ただし、myfile
は XACML ドキュメントの名前です。
xacmlDoc = xacmlFile.read()
(省略可能) ドキュメントが String
にロードされたかどうかを確認するには、次のコマンドを入力します。
print(xacmlDoc)
標準出力に xacmlDoc
変数の値が出力されます。
ロールの割り当てを WebLogic XACML ロール マッピング プロバイダにロードするために、次のコマンドを入力します。
cd ('SecurityConfiguration/
mydomain
/Realms/
myrealm
/RoleMappers/XACMLRoleMapper')
各要素の説明は次のとおりです。
mydomain
は WebLogic Server ドメイン の名前です。
myrealm
はドメインのセキュリティ レルムの名前です。
cmo.addPolicy(xacmlDoc)
(XACML ドキュメントに Policy
が含まれている場合)、cmo.addPolicySet(xacmlDoc)
(XACML ドキュメントに PolicySet
が含まれている場合)。
認可ポリシーを WebLogic XACML 認可プロバイダにロードするために、手順 5 を繰り返して XACML ポリシー ドキュメントをロードし、次のコマンドを入力します。
cd ('SecurityConfiguration/
mydomain
/Realms/
myrealm
/Authorizers/XACMLAuthorizer')
各要素の説明は次のとおりです。
mydomain
は WebLogic Server ドメイン の名前です。
myrealm
はドメインのセキュリティ レルムの名前です。
cmo.addPolicy(xacmlDoc)
(XACML ドキュメントに Policy
が含まれている場合)、cmo.addPolicySet(xacmlDoc)
(XACML ドキュメントに PolicySet
が含まれている場合)。
ポリシーの追加、変更、または削除に使用できるオペレーションの詳細なリストについては、『Oracle Fusion Middleware Oracle WebLogic Server MBean リファレンス』の「XACMLAuthorizerMBean
」を参照してください。
WebLogic Server Administration Console では、XACML ドキュメントから追加するロールおよびポリシーが表示されません。
その代わり、ロールおよびポリシーがレルムに追加されたかどうかを確認するには、「XACML ドキュメントへのロールおよびポリシーのエクスポート」を参照してください。
管理対象 Bean (MBean) は、リソースの管理データおよびオペレーションを公開するための標準です。アプリケーション開発者は、MBean (カスタム MBean) を作成しアプリケーションをモニタおよび管理することによって、アプリケーションの運用および管理コストを大幅に減らすことができます。『Oracle Fusion Middleware Oracle WebLogic Server 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 コンフィグレーションが使用できなくなる可能性があります。エクスポートしたファイルの編集はサポートされていません。 |
セキュリティ データのエクスポート方法については、『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「セキュリティ プロバイダからのデータのエクスポート」を参照してください。