7 XACMLドキュメントによるWebLogicリソースの保護
この章の内容は以下のとおりです。
ノート:
XACMLドキュメントをセキュリティ・レルムにロードする前に、必ずバックアップを作成してください。属性の記述に誤字などのエラーがあると、XACMLプロバイダはレルムのロールとポリシーを不確定な要素として評価し、その結果、すべてのユーザー(管理者も含む)がドメインからロックされてしまう場合があります。詳細は、「警告:不確定な結果によってすべてのユーザーがロックアウトされる可能性がある」を参照してください
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のコア仕様が実行されています。
前提条件
XACMLドキュメントを使用してWebLogicリソースを保護する場合、次の前提条件に留意してください。
-
セキュリティ・レルムに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ロールまたはポリシーの追加:主なステップ
カスタムのロールおよびポリシーが記述される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では、リソースが階層にまとめられています。WebLogic Server管理コンソールまたはJava EEデプロイメント記述子(XACMLドキュメントではない)を使用してWebLogicリソースを保護する場合、階層の上位のリソースに作成されたポリシーは、同じ階層の下位に存在するリソースに対してデフォルトのポリシーとして機能します。下位階層のポリシーは、常に上位階層のポリシーをオーバーライドします。
XACMLドキュメントは、この階層による保護方式をエンコードできます。ただし、XACMLの階層モデルはWebLogic Serverとは少し異なります。「WebLogic ServerとXACMLのセキュリティ・モデルの比較」を参照してください
保護するリソースのIDの取得
リソースをデプロイまたは作成すると、ユニークで不変な識別子(ID)が作成されますが、XACMLドキュメントにはWebLogic Server IDを指定するリソース識別子が含まれる必要があります。
WebLogic Serverがリソースに割り当てるIDを見つけるには:
XACMLドキュメントの作成
ロールの割当ておよび認可ポリシーを作成する場合、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属性には関数識別子(ワイルドカードを含むロール名)を指定できます。DataType属性にはstring型を指定する必要があります。(オプション)ロールが適用されるWebLogicリソースを特定する別の
ResourceMatch要素。このResourceMatch要素を含めない場合は、ロールがすべてのWebLogicリソースに適用されます。 -
Targetの下位要素として、ポリシーがその他のリソース・タイプではなくロールに適用されることを示すAction要素。
-
-
Policyの下位要素として、ロール内にユーザー、グループ、ロールを定義する1つまたは複数のRule要素。
例7-1のXACMLドキュメントでは、MyRoleというロールがSimpleSoapPort Webサービスで使用できるように指定しています。また、webServiceGroupグループがロールに存在するように指定しています。
ノート:
<AttributeValue>要素に値を指定するときは、余分な空白を含めないでください。具体的には:
-
最初の値の前には空白を1つのみ入力します。
-
複数の値を指定するとき、1つのみの空白で各値を区切ります。
-
最後の値の後には空白を入力しません。
たとえば:
<AttributeValue datatype>value1, value2, value3</AttributeValue>
例7-1 ロールに対するXACMLポリシー
<?xml version="1.0" encoding="UTF-8"?>
<Policy xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os" PolicyId="urn:bea:xacml:2.0:myRolePolicy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable">
<Description>Grp(group1)</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-or-self" 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ポリシー
<?xml version="1.0" encoding="UTF-8"?>
<Policy xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os" PolicyId="urn:bea:xacml:2.0:myPolicy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable">
<Description>Rol(MyRole)</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-or-self" 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">MyRole</AttributeValue>
<SubjectAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:2.0:subject:role" DataType="http://www.w3.org/2001/XMLSchema#string"/>
</Apply>
</Condition>
</Rule>
<Rule RuleId="deny-rule" Effect="Deny"/>
</Policy>WebLogic Scripting Toolを使用してレルムにロールまたはポリシーを追加する
WebLogic Scripting Tool (WLST)は、XACMLドキュメントをWebLogicセキュリティ・レルムにロードするのに使用できるコマンド・ライン・スクリプト・インタフェースです。
WLSTは対話モードまたはスクリプト・モードで使用できます。WLSTはオフライン・モードでは使用できません。認証プロバイダとロール・マッピング・プロバイダは、管理サーバーの実行時のみポリシー・ストアを更新できます。
スクリプト・モードの使用の詳細は、『WebLogic Scripting Toolの理解』のWebLogic Scripting Toolの使用に関する項を参照してください。
WLSTの対話モードを使用するためのステップを以下に示します。
-
構成するレルムを含むWebLogic Serverインスタンスを起動します。
-
コマンド・プロンプトを開き、WLSTを実行するための環境を設定します。
環境を設定する方法の1つを以下に示します。
-
ドメインのルート・ディレクトリに移動します。
-
setWLSenvスクリプトを呼び出します(このスクリプトはドメインの作成時にドメイン構成ウィザードで作成します)。
-
-
XACMLドキュメントを含むディレクトリに移動します。
-
WLSTを起動して
localhost:7001でリスニングしているWebLogic Serverインスタンスに接続するために、次のコマンドを入力します。-
java weblogic.WLSTこのコマンドでWLSTオフライン・プロンプトが返されます。
-
connect(' ',' ','localhost:7001')Please enter your username :Please enter your 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が含まれている場合)。 -
cmo.setPolicyExpression('type=<jmx>','{Rol(Admin) | Rol(myrole)}')ここで、
myroleは、ポリシーを適用する追加ロールです。
-
-
認可ポリシーを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が含まれている場合)。 -
cmo.setPolicyExpression('type=<jmx>','{Rol(Admin) | Rol(myrole)}')ここで、
myroleは、ポリシーを適用する追加ロールです。
-
ポリシーの追加、変更または削除に使用できる操作の詳細なリストは、Oracle WebLogic Server MBeanリファレンスのXACMLAuthorizerMBeanを参照してください。
ロールまたはポリシーがレルムに存在するかどうかを確認する
WebLogic Server管理コンソールでは、XACMLドキュメントから追加するロールおよびポリシーが表示されません。
そのかわり、ロールおよびポリシーがレルムに追加されたかどうかを確認するには、「XACMLドキュメントへのロールおよびポリシーのエクスポート」を参照してください
カスタムMBeanのロールまたはポリシーを作成する
管理対象Bean (MBean)は、リソースの管理データおよび操作を公開するための標準です。アプリケーション開発者は、MBean (カスタムMBean)を作成しアプリケーションをモニターおよび管理することによって、アプリケーションの運用および管理コストを大幅に減らすことができます。『Oracle WebLogic Server JMXによる管理可能アプリケーションの開発』を参照してください。
カスタムMBeanをWebLogic Server MBeanサーバーに登録する場合、MBeanに対して誰がアクセスできるのかを定義するXACMLドキュメントを作成できます。「前提条件」に記載した前提条件に加えて、MBeanのオブジェクト名にはType=valueキー・プロパティが含まれている必要があります。
カスタムMBeanに対するロールおよびポリシーを作成するための主なステップは次のとおりです。
カスタムMBeanのリソースIDを決定する
カスタムMBeanをWebLogic MBeanサーバーに登録すると、WebLogicセキュリティ・サービスによって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表現を確認するために、認可プロバイダとロール・マッピング・プロバイダからデータをエクスポートできます。
ノート:
ロールおよびポリシーの「ラウンドトリップ」編集を行ってはいけません。つまり、ロールおよびポリシーをエクスポートして、XACMLドキュメントを変更し、変更したドキュメントをインポートしないでください。エクスポートしたファイルを編集すると、WebLogic Server構成が使用できなくなる可能性があります。エクスポートしたファイルの編集はサポートされていません。
セキュリティ・データのエクスポート方法については、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのセキュリティ・プロバイダからのデータのエクスポートに関する項を参照してください。