ロールおよびポリシーによる WebLogic リソースの保護

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

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

XACML (eXtensible Access Control Markup Language) は、認可ポリシーおよびロールの割り当てを記述するための XML 言語です。WebLogic Server の XACML 認可プロバイダおよび WebLogic Server XACML ロール マッピング プロバイダには、XACML 2.0 のコア仕様が実装されています (XACML 2.0 のコア仕様を参照)。

WebLogic Server Administration Console で作成できるものよりも複雑なセキュリティ ロールまたはポリシーを作成する必要がある場合、または、セキュリティ ロールおよびポリシーを標準の言語で表現する必要がある場合は、ロールおよびポリシーを XACML ドキュメントで作成し、WebLogic Scripting Tool を使用してセキュリティ レルムに追加することができます。また、レルムのロールとポリシーを XACML ドキュメントにエクスポートし、そのドキュメントを他の WebLogic Server レルムにインポートできます。たとえば、開発環境のレルムからロールとポリシーをエクスポートし、プロダクション環境のレルムにインポートできます。

次の節では、XACML ドキュメントを使用して WebLogic Server リソースを保護する方法を説明します。

警告 : XACML ドキュメントをセキュリティ レルムにロードする前に、必ずバックアップを作成してください。属性の記述に誤字などのエラーがあると、XACML プロバイダはレルムのロールとポリシーを不確定な要素として評価し、その結果、すべてのユーザ (管理者も含む) がドメインからロックされてしまう場合があります。詳細については、「警告 : 不確定な結果によってすべてのユーザがロックアウトされる可能性がある」を参照してください。

 


前提条件

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

 


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

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

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

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

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

XACML 仕様では、決定エンジンが決定点を処理できない場合、不確定な結果が返されます。決定点とそれに関連付けられた決定点に対して使用する結合アルゴリズムによっては、不確定な結果が決定の最上位に伝播し、プロバイダがすべての要求へのアクセスを拒否する可能性があります。

たとえば、次の属性には MustBePresent='true' が指定され、スペルの間違い (ancestor ではなく ancester) が含まれています。この場合、不確定として評価されて、セキュリティ プロバイダはアクセスを拒否します。

<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 または J2EE デプロイメント記述子 (XACML ドキュメントではない) を使用して WebLogic リソースを保護する場合、階層の上位のリソースに作成されたポリシーは、同じ階層の下位に存在するリソースに対してデフォルトのポリシーとして機能します。下位階層のポリシーは、常に上位階層のポリシーをオーバーライドします。

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

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

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

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

  1. 監査プロバイダをコンフィグレーションしてレルムに対するセキュリティ監査を有効にします。
  2. Administration Console オンライン ヘルプの「監査プロバイダのコンフィグレーション」を参照してください。監査プロバイダによって保存されるログ ファイルの場所は記録しておいてください (デフォルトでは、サーバの logs ディレクトリに保存されます)。

  3. リソースをデプロイまたは作成します。
  4. 外部クライアントからリソースにリクエストを送信します。
  5. たとえば、Web サービス クライアントを使用して、保護する Web サービス メソッドを呼び出します。

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

  6. 監査プロバイダのログ ファイルを開き、トリガしたイベントのエントリを見つけます。
  7. たとえば、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}

  8. 監査レコードのリソース ID を編集して、保護するリソースを指定します。
  9. 監査ログの 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 サービスを含むアプリケーションの ID は次のとおりです。
      type=<application>,
      application=webservicesJwsSimpleEar
    • アプリケーションのリソース ID では、type=<application> を指定します。

    • Web サービス全体に対するルート レベルのポリシーの作成に使用する Web サービス タイプの ID は次のとおりです。
      type=<webservices>
    • ルート レベルのポリシーとリソースの階層の詳細については、「ポリシーを使用して複数のリソースを保護する」を参照してください。

XACML ドキュメントを作成する

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

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

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

XACML ドキュメントのロールの割り当てを記述するための構文は、RBAC プロファイル仕様に明記されています (WebLogic Server では、この仕様のサブセットのみをサポートしています)。

この構文では以下の要素が必要です。

コード リスト 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 はオフライン モードでは使用できません。認証プロバイダとロール マッピング プロバイダは、管理サーバの実行時のみポリシー ストアを更新できます。

スクリプト モードの使用の詳細については、『WebLogic Scripting Tool ガイド』の「WebLogic Scripting Tool の使用」を参照してください。

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

  1. コンフィグレーションするレルムを含む WebLogic Server インスタンスを起動します。
  2. コマンド プロンプトを開き、WLST を実行するための環境を設定します。
  3. 環境を設定する方法の 1 つを以下に示します。

    1. ドメインのルート ディレクトリに移動します。
    2. setWLSenv スクリプトを呼び出します (このスクリプトはドメインの作成時にドメイン コンフィグレーション ウィザードで作成します)。
  4. XACML ドキュメントを含むディレクトリに移動します。
  5. WLST を起動して localhost:7001 でリスンしている WebLogic Server インスタンスに接続するために、次のコマンドを入力します。
    1. java weblogic.WLST
    2. このコマンドで WLST プロンプトが返されます。

    3. connect(`username','password','localhost:7001')
    4. ただし、usernamepassword は管理ユーザの資格です。

  6. XACML ドキュメントを Java String オブジェクトにロードするために、次のコマンドを入力します。
    1. xacmlFile = open(`myfile','r')
    2. ただし、myfile は、XACML ドキュメントの名前です。

    3. xacmlDoc = xacmlFile.read()
    4. (省略可能) ドキュメントが String にロードされたかどうかを確認するには、次のコマンドを入力します。
      print(xacmlDoc)
    5. 標準出力に xacmlDoc 変数の値が出力されます。

  7. ロールの割り当てを WebLogic XACML ロール マッピング プロバイダにロードするために、次のコマンドを入力します。
    1. cd (`SecurityConfiguration/mydomain/Realms/myrealm/
      RoleMappers/XACMLRoleMapper')
    2. ただし、
      mydomain は WebLogic Server ドメインの名前です。
      myrealm はドメインのセキュリティ レルムの名前です。

    3. cmo.addPolicy(xacmlDoc) (XACML ドキュメントに Policy が含まれている場合)、cmo.addPolicySet(xacmlDoc) (XACML ドキュメントに PolicySet が含まれている場合)。
  8. 認可ポリシーを WebLogic XACML 認可プロバイダにロードするために、手順 5 を繰り返して XACML ポリシー ドキュメントをロードし、次のコマンドを入力します。
    1. cd (`SecurityConfiguration/mydomain/Realms/myrealm/
      Authorizers/XACMLAuthorizer')
    2. ただし、
      mydomain は WebLogic Server ドメインの名前です。
      myrealm はドメインのセキュリティ レルムの名前です。

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

ポリシーを追加、変更、または削除するのに使用できるオペレーションの詳細なリストについては、『WebLogic Server MBean リファレンス』の「XACMLAuthorizerMBean」を参照してください。

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

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

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

 


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

管理対象 Bean (MBean) は、リソースの管理データおよびオペレーションを公開するための標準です。アプリケーション開発者は、MBean (カスタム MBean) を作成しアプリケーションをモニタおよび管理することによって、アプリケーションの運用および管理コストを大幅に減らすことができます。詳細については、『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

各要素の説明は次のとおりです。

たとえば、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 コンフィグレーションが使用できなくなる可能性があります。エクスポートしたファイルの編集はサポートされていません。

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


  ページの先頭       前  次