プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Serverロールおよびポリシーによるリソースの保護
12c (12.2.1.2.0)
E82878-02
目次へ移動
目次

前
次

7 XACMLドキュメントによるWebLogicリソースの保護

この章では、認可ポリシーおよびロールの割当てを記述するためのXML言語であるXACML (eXtensible Access Control Markup Language)を使用して、WebLogicリソースを保護する方法について説明します。XACMLドキュメントでロールおよびポリシーを作成し、WebLogic Scripting Tool (WLST)を使用してセキュリティ・レルムに追加できます。これは、WebLogic Server管理コンソールで作成できるロールまたはポリシーよりも複雑なロールまたはポリシーを作成する必要がある場合、または標準言語を使用する必要がある場合に便利です。また、レルムのロールとポリシーをXACMLドキュメントにエクスポートし、そのドキュメントを他のWebLogic Server レルムにインポートできます。

この章の内容は以下のとおりです。

注意:

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のコア仕様が実行されています。

7.1 前提条件

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用のセキュリティ・モデルの比較」を参照してください

7.2 レルムへのXACMLロールまたはポリシーの追加:主な手順

カスタムのロールおよびポリシーが記述されるXACMLドキュメントを作成し、WebLogic Scripting Toolを使用してセキュリティ・レルムにロールまたはポリシーを追加できます。

その主な手順を以下に示します。

  1. 保護するリソースの決定
  2. 保護するリソースのIDの取得
  3. XACMLドキュメントの作成
  4. WebLogic Scripting Toolを使用してレルムにロールまたはポリシーを追加する
  5. ロールまたはポリシーがレルムに存在するかどうかを確認する

7.2.1 警告: 不確定な結果によってすべてのユーザーがロックアウトされる可能性がある

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"/>

7.2.2 保護するリソースの決定

WebLogic Serverでは、リソースが階層にまとめられています。WebLogic Server管理コンソールまたはJava EEデプロイメント記述子(XACMLドキュメントではない)を使用してWebLogicリソースを保護する場合、階層の上位のリソースに作成されたポリシーは、同じ階層の下位に存在するリソースに対してデフォルトのポリシーとして機能します。下位階層のポリシーは、常に上位階層のポリシーをオーバーライドします。

XACMLドキュメントは、この階層による保護方式をエンコードできます。ただし、XACMLの階層モデルはWebLogic Serverとは少し異なります。「WebLogic ServerとXACMLのセキュリティ・モデルの比較」を参照してください

7.2.3 保護するリソースのIDの取得

リソースをデプロイまたは作成すると、ユニークで不変な識別子(ID)が作成されますが、XACMLドキュメントにはWebLogic Server IDを指定するリソース識別子が含まれる必要があります。

WebLogic Serverがリソースに割り当てるIDを見つけるには、次の手順に従います。

  1. 監査プロバイダを構成してレルムに対するセキュリティ監査を有効にします。

    Oracle WebLogic Server管理コンソール・オンライン・ヘルプ監査プロバイダの構成に関する項を参照してください。監査プロバイダによって保存されるログ・ファイルの場所は記録しておいてください(デフォルトでは、サーバーのlogsディレクトリに保存されます)。

  2. リソースをデプロイまたは作成します。
  3. 外部クライアントからリソースにリクエストを送信します。

    たとえば、Web Serviceクライアントを使用して、保護するWeb Serviceメソッドを呼び出します。これにより、監査プロバイダがリソースに関するメッセージを生成するイベントが引き起こされます。

    注意:

    Web Serviceクライアントが、XACMLドキュメントに指定されたロールとポリシーで保護されるWeblogicリソースへのアクセス権を得るには、前もって自らを認証する必要があります。

  4. 監査プロバイダのログ・ファイルを開き、トリガーしたイベントのエントリを見つけます。

    たとえば、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} 
    
  5. 監査レコードのリソース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>
      

    ルート・レベルのポリシーとリソースの階層の詳細は、「ポリシーを使用して複数のリソースの保護」を参照してください

7.2.4 XACMLドキュメントの作成

ロールの割当ておよび認可ポリシーを作成する場合、2つのXACMLドキュメント(ロールを記述するドキュメントとポリシーを記述するドキュメント)を作成します。一方のドキュメントをロール・マッピング・プロバイダのストアにロードし、もう一方のドキュメントを認可プロバイダのストアにロードします。

XACMLを使用してWebLogic Serverリソースを記述する方法については、「WebLogic ServerにおけるXACMLのリファレンス」を参照してください。

7.2.4.1 例: ロールの割当てを定義する

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=&lt;webservices&gt;, 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.4.2 例: 認可ポリシーを定義する

例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=&lt;webservices&gt;, 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>

7.2.5 WebLogic Scripting Toolを使用してレルムにロールまたはポリシーを追加する

WebLogic Scripting Tool (WLST)は、XACMLドキュメントをWebLogicセキュリティ・レルムにロードするのに使用できるコマンド・ライン・スクリプト・インタフェースです。

WLSTは対話モードまたはスクリプト・モードで使用できます。WLSTはオフライン・モードでは使用できません。認証プロバイダとロール・マッピング・プロバイダは、管理サーバーの実行時のみポリシー・ストアを更新できます。

スクリプト・モードの使用の詳細は、のWebLogic Scripting Toolの使用を参照してください。

WLSTの対話モードを使用するための手順を以下に示します。

  1. 構成するレルムを含むWebLogic Serverインスタンスを起動します。

  2. コマンド・プロンプトを開き、WLSTを実行するための環境を設定します。

    環境を設定する方法の1つを以下に示します。

    1. ドメインのルート・ディレクトリに移動します。

    2. setWLSenvスクリプトを呼び出します(このスクリプトはドメインの作成時にドメイン構成ウィザードで作成します)。

  3. XACMLドキュメントを含むディレクトリに移動します。

  4. WLSTを起動してlocalhost:7001でリスニングしているWebLogic Serverインスタンスに接続するために、次のコマンドを入力します。

    1. java weblogic.WLST

      このコマンドでWLSTプロンプトが返されます。

    2. connect('username','password','localhost:7001')

      ただし、usernamepasswordは管理ユーザーの資格証明です。

  5. XACMLドキュメントをJava Stringオブジェクトにロードするために、次のコマンドを入力します。

    1. xacmlFile = open('myfile','r')

      ただし、myfileはXACMLドキュメントの名前です。

    2. xacmlDoc = xacmlFile.read()

    3. (オプション)ドキュメントがStringにロードされたかどうかを確認するには、次のコマンドを入力します。

      print(xacmlDoc)
      

      標準出力にxacmlDoc変数の値が出力されます。

  6. ロールの割当てをWebLogic XACMLロール・マッピング・プロバイダにロードするために、次のコマンドを入力します。

    1. cd ('SecurityConfiguration/mydomain/Realms/myrealm/RoleMappers/XACMLRoleMapper')

      ここで

      mydomainはWebLogic Serverドメインの名前です。

      myrealmはセキュリティ・レルムの名前です

    2. cmo.addPolicy(xacmlDoc) (XACMLドキュメントにPolicyが含まれている場合)、cmo.addPolicySet(xacmlDoc) (XACMLドキュメントにPolicySetが含まれている場合)。

  7. 認可ポリシーをWebLogic XACML認可プロバイダにロードするために、手順5を繰り返してXACMLポリシー・ドキュメントをロードし、次のコマンドを入力します。

    1. cd ('SecurityConfiguration/mydomain/Realms/myrealm/Authorizers/XACMLAuthorizer')

      ここで

      mydomainはWebLogic Serverドメインの名前です。

      myrealmはセキュリティ・レルムの名前です

    2. cmo.addPolicy(xacmlDoc) (XACMLドキュメントにPolicyが含まれている場合)、cmo.addPolicySet(xacmlDoc) (XACMLドキュメントにPolicySetが含まれている場合)。

ポリシーの追加、変更または削除に使用できる操作の詳細なリストは、Oracle WebLogic Server MBeanリファレンスXACMLAuthorizerMBeanを参照してください。

7.2.6 ロールまたはポリシーがレルムに存在するかどうかを確認する

WebLogic Server管理コンソールでは、XACMLドキュメントから追加するロールおよびポリシーが表示されません。

そのかわり、ロールおよびポリシーがレルムに追加されたかどうかを確認するには、「XACMLドキュメントへのロールおよびポリシーのエクスポート」を参照してください

7.3 カスタムMBeanのロールまたはポリシーを作成する

管理対象Bean (MBean)は、リソースの管理データおよび操作を公開するための標準です。アプリケーション開発者は、MBean (カスタムMBean)を作成しアプリケーションをモニターおよび管理することによって、アプリケーションの運用および管理コストを大幅に減らすことができます。『Oracle WebLogic Server JMXによる管理可能アプリケーションの開発』を参照してください。

カスタムMBeanをWebLogic Server MBeanサーバーに登録する場合、MBeanに対して誰がアクセスできるのかを定義するXACMLドキュメントを作成できます。「前提条件」に記載した前提条件に加えて、MBeanのオブジェクト名にはType=valueキー・プロパティが含まれている必要があります。

カスタムMBeanに対するロールおよびポリシーを作成するための主な手順は次のとおりです。

  1. カスタムMBeanのリソースIDを決定する
  2. XACMLドキュメントの作成
  3. WebLogic Scripting Toolを使用してレルムにロールまたはポリシーを追加する
  4. ロールまたはポリシーがレルムに存在するかどうかを確認する

7.3.1 カスタム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=

7.4 XACMLドキュメントへのロールおよびポリシーのエクスポート

セキュリティ・レルムに存在するすべてのロールおよびポリシーのXACML表現を確認するために、認可プロバイダとロール・マッピング・プロバイダからデータをエクスポートできます。

注意:

ロールおよびポリシーの「ラウンドトリップ」編集を行ってはいけません。つまり、ロールおよびポリシーをエクスポートして、XACMLドキュメントを変更し、変更したドキュメントをインポートしないでください。エクスポートしたファイルを編集すると、WebLogic Server構成が使用できなくなる可能性があります。エクスポートしたファイルの編集はサポートされていません。

セキュリティ・データのエクスポート方法については、Oracle WebLogic Server管理コンソール・オンライン・ヘルプセキュリティ・プロバイダからのデータのエクスポートに関する項を参照してください。