ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server ロールおよびポリシーによるリソースの保護
11g リリース 1 (10.3.1)
B55556-01
 

目次
目次

戻る
戻る
次へ
次へ

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

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 ドキュメントを使用して WebLogic Server リソースを保護する場合、次の前提条件に留意してください。

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

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

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

  1. 保護するリソースの決定

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

  3. XACML ドキュメントの作成

  4. WebLogic Scripting Tool を使用してレルムにロールまたはポリシーの追加

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

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

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 の取得

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

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

  1. 監査プロバイダをコンフィグレーションしてレルムに対するセキュリティ監査を有効にします。

    『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「監査プロバイダのコンフィグレーション」を参照してください。監査プロバイダによって保存されるログ ファイルの場所は記録しておいてください (デフォルトでは、サーバの logs ディレクトリに保存されます)。

  2. リソースをデプロイまたは作成します。

  3. 外部クライアントからリソースにリクエストを送信します。

    たとえば、Web サービス クライアントを使用して、保護する Web サービス メソッドを呼び出します。

    これにより、監査プロバイダがリソースへのメッセージを生成するイベントがトリガされます。

  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>
      

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

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 属性には 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=&lt;webservices&gt;, 
            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=&lt;webservices&gt;, 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 を使用してレルムにロールまたはポリシーの追加

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

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

スクリプト モードの使用の詳細については、『Oracle Fusion Middleware Oracle WebLogic Scripting Tool』の「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 Fusion Middleware Oracle WebLogic Server MBean リファレンス』の「XACMLAuthorizerMBean」を参照してください。

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

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

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

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

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

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

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

  1. カスタム MBean のリソース ID を決定する

  2. XACML ドキュメントの作成

  3. WebLogic Scripting Tool を使用してレルムにロールまたはポリシーの追加

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

カスタム MBean のリソース ID を決定する

カスタム 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 表現を確認するために、認可プロバイダとロール マッピング プロバイダからデータをエクスポートできます。


警告 :

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

セキュリティ データのエクスポート方法については、『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「セキュリティ プロバイダからのデータのエクスポート」を参照してください。