Oracle® Fusion Middleware Oracle WebLogic Serverロールおよびポリシーによるリソースの保護 12c リリース1 (12.1.1) B65912-02 |
|
前 |
次 |
この章では、認可ポリシーおよびロールの割当てを記述するためのXML言語であるXACML (eXtensible Access Control Markup Language)を使用して、WebLogicリソースを保護する方法について説明します。XACMLドキュメントでロールおよびポリシーを作成し、WebLogic Scripting Tool (WLST)を使用してセキュリティ・レルムに追加できます。これは、管理コンソールで作成できるロールまたはポリシーよりも複雑なロールまたはポリシーを作成する必要がある場合、または標準言語を使用する必要がある場合に便利です。また、レルムのロールとポリシーをXACMLドキュメントにエクスポートし、そのドキュメントを他のWebLogic Serverレルムにインポートできます。
この章の内容は以下のとおりです。
XACMLドキュメントへのロールおよびポリシーのエクスポート
警告: 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ドキュメントを作成し、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では、リソースが階層にまとめられています。管理コンソールまたはJava EEデプロイメント記述子(XACMLドキュメントではない)を使用してWebLogicリソースを保護する場合、階層の上位のリソースに作成されたポリシーは、同じ階層の下位に存在するリソースに対してデフォルトのポリシーとして機能します。下位階層のポリシーは、常に上位階層のポリシーをオーバーライドします。
XACMLドキュメントは、この階層による保護方式をエンコードできます。ただし、XACMLの階層モデルはWebLogic Serverとは少し異なります。「WebLogic ServerとXACMLのセキュリティ・モデルの比較」を参照してください。
リソースをデプロイまたは作成すると、ユニークで不変な識別子(ID)が作成されますが、XACMLドキュメントにはWebLogic Server IDを指定するリソース識別子が含まれる必要があります。
WebLogic Serverがリソースに割り当てるIDを見つけるには、次の手順に従います。
監査プロバイダを構成してレルムに対するセキュリティ監査を有効にします。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプの監査プロバイダの構成に関する項を参照してください。監査プロバイダによって保存されるログ・ファイルの場所は記録しておいてください(デフォルトでは、サーバーのlogs
ディレクトリに保存されます)。
リソースをデプロイまたは作成します。
外部クライアントからリソースにリクエストを送信します。
たとえば、Web Serviceクライアントを使用して、保護するWeb Serviceメソッドを呼び出します。これにより、監査プロバイダがリソースに関するメッセージを生成するイベントが引き起こされます。
注意: Web Serviceクライアントが、XACMLドキュメントに指定されたロールとポリシーで保護されるWeblogicリソースへのアクセス権を得るには、前もって自らを認証する必要があります。 |
監査プロバイダのログ・ファイルを開き、トリガーしたイベントのエントリを見つけます。
たとえば、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リソースを記述する方法については、付録A「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 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 (WLST)は、XACMLドキュメントをWebLogicセキュリティ・レルムにロードするのに使用できるコマンド・ライン・スクリプト・インタフェースです。
WLSTは対話モードまたはスクリプト・モードで使用できます。WLSTはオフライン・モードでは使用できません。認証プロバイダとロール・マッピング・プロバイダは、管理サーバーの実行時のみポリシー・ストアを更新できます。
スクリプト・モードの使用の詳細は、『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 WebLogic Server MBeanリファレンスのXACMLAuthorizerMBean
を参照してください。
WebLogic Server管理コンソールでは、XACMLドキュメントから追加するロールおよびポリシーが表示されません。
そのかわり、ロールおよびポリシーがレルムに追加されたかどうかを確認するには、「XACMLドキュメントへのロールおよびポリシーのエクスポート」を参照してください。
管理対象Bean (MBean)は、リソースの管理データおよび操作を公開するための標準です。アプリケーション開発者は、MBean (カスタムMBean)を作成しアプリケーションをモニターおよび管理することによって、アプリケーションの運用および管理コストを大幅に減らすことができます。『Oracle WebLogic Server JMXによる管理可能なアプリケーションの開発』を参照してください。
カスタムMBeanをWebLogic Server MBeanサーバーに登録する場合、MBeanに対して誰がアクセスできるのかを定義するXACMLドキュメントを作成できます。「前提条件」に記載した前提条件に加えて、MBeanのオブジェクト名には「Type=
value
」キー・プロパティが含まれている必要があります。
カスタムMBeanに対するロールおよびポリシーを作成するための主な手順は次のとおりです。
カスタム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ドキュメントを変更し、変更したドキュメントをインポートしないでください。エクスポートしたファイルを編集すると、WebLogic Server構成が使用できなくなる可能性があります。エクスポートしたファイルの編集はサポートされていません。 |
セキュリティ・データのエクスポート方法については、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのセキュリティ・プロバイダからのデータのエクスポートに関する項を参照してください。