ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Service Bus開発者ガイド
11gリリース1 (11.1.1.7)
B61435-08
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

51 Oracle Service Busプロキシ・サービスとビジネス・サービスでのWS-Policyの使用

この章では、Oracle Service BusでOracle WebLogic Serverのセキュリティ・ポリシー(WLS 9ポリシー)を使用する方法について説明します。


注意:

この章はWLS 9ポリシーのみに該当し、Oracle Web Services Manager (WSM)ポリシーは対象ではありません。WLSポリシーはこのリリースで非推奨となっており、Oracle Service Busの今後のリリースでは、WLS 9ポリシーはOracle WSMポリシーに置き換えられます。いずれの新しいサービスでもOracle WSMポリシーを使用し、現在使用しているすべてのWLS 9ポリシーをOracle WSMポリシーに置き換えることをお薦めします。


Webサービスであるプロキシ・サービスまたはビジネス・サービスのメッセージ・レベルのセキュリティ要件を指定するには、Webサービス・ポリシー(WS-Policy)フレームワークを使用します。

次の項では、プロキシ・サービスとビジネス・サービスのWS-Policyの構成について説明します。

51.1 Webサービス・ポリシーについて

Webサービス・ポリシー(WS-Policy)は、Webサービスの制約と要件を定義するための標準ベースのフレームワークです。それは、それぞれ1つまたは複数のアサーションを含む、ポリシーと呼ばれるXML文の集合で制約と要件を表します。

Oracle Service Busでは、WS-Policyアサーションを使用して、デジタル署名や暗号化に対するWebサービスの要件、および必要なセキュリティ・アルゴリズムや認証メカニズムを指定します。

WS-Policyフレームワークを使用すると、他の仕様で「ポリシー・アサーション」を宣言できます。ポリシー・アサーションは、<policy>要素内に示されるドメイン固有のXML要素です。ポリシー・アサーションの仕様は、このドメイン固有のアサーションの構文とセマンティクスを記述します。

WS-SecurityPolicyは、ドメイン固有のアサーション言語の一例です。WS-SecurityPolicy仕様は、WS-Policyフレームワークで使用する一連のセキュリティ・ポリシー・アサーションを定義しています。

WS-ReliableMessagingは、ドメイン固有のアサーション言語のもう1つの例であり、信頼性のあるメッセージング・ポリシーを宣言するためのアサーションを定義しています。

51.1.1 WS-SecurityとWS-Policyの関係

Webサービス・セキュリティ(WS-Security)は、Webサービス・ポリシー・フレームワーク(WS-Policy)と連動して機能します。次の用語の意味とこれらがどのように関係するのかを理解することが重要です。

  • Webサービス・セキュリティ(WS-Security)はOASIS標準の1つです。SOAPメッセージにメッセージ・レベルのセキュリティを組み込むための相互運用可能なメカニズムを定義しています。WS-Securityによって、メッセージ・レベルのセキュリティが「どのように」 SOAPメッセージに組み込まれるかが決まります。

    WS-Securityは、メッセージの整合性と機密性をサポートします。また、SOAPエンベロープにセキュリティ・トークンを含める拡張モデルや、SOAPエンベロープ内からセキュリティ・トークンを参照するモデルも定義しています。WS-Securityでは、SOAPメッセージのどの部分をデジタル署名または暗号化するかを指定できます。

  • Webサービス・ポリシー・フレームワーク(WS-Policy)は、Webサービスのポリシーを記述して通信するための汎用モデルとその構文を提供します。WS-Policyは、抽象XMLフレームワークです。WS-Policyの特徴は、ポリシー「アサーション」と呼ばれる子要素です。

  • WS-SecurityPolicyは、WS-Policyのセキュリティ面を指定するためのアサーションを定義します。WS-SecurityPolicyは、SOAPメッセージで「どの」メッセージ・レベルのセキュリティが必要かを決定します。

    ポリシーでは、セキュリティで保護する操作と、Webサービス・クライアントが適用する必要があるセキュリティ対策を決定できます。

プロキシ・サービスまたはビジネス・サービスのWS-Policyを構成するときに、WS-Policyに1つまたは複数のセキュリティ・ポリシー・アサーションが含まれている場合、プロキシ・サービスまたはビジネス・サービスは、WS-Securityが有効になっていると見なされます。

51.1.2 WS-Policyはサービスに直接バインド可能

Oracle Service Busの以前のリリースと同様に、WS-PolicyポリシーはWSDLドキュメントに直接含めることも、または参照によって含めることも可能です。WSDLドキュメントは、WS-Policyポリシーを含むか参照する他のWSDLドキュメントをインポートできます。これらのポリシーを含むXMLファイルは、複数のプロキシ・サービスまたはビジネス・サービスから使用できます。

また、WS-Policyをサービスにバインドする別の方法があります。「ポリシー」ページを使用すると、ポリシーをサービスに直接バインドすることができます。ポリシーは、異なるスコープにバインド可能です。

  • サービス全体

  • サービスの操作

  • サービスの操作のリクエスト・メッセージ

  • サービスの操作のレスポンス・メッセージ

ポリシーをサービス全体にバインドすると、ポリシーはサービスのすべての操作と、すべての操作のリクエストおよびレスポンス・メッセージすべてに適用されます。ポリシーを操作にバインドすると、ポリシーはその操作のリクエストおよびレスポンス・メッセージに適用されます。

いずれのスコープにも、任意の数のポリシーをバインドできます。

例として、操作A、B、CおよびDを含むサービスSがあるとします。A、BおよびCは、リクエスト/レスポンス操作であり、Dはリクエストのみの操作です。管理者は、次のようにWS-Policyのバインディングを構成できます。

  • ポリシーXをサービスS全体にバインド

  • ポリシーYおよびZを操作Aに

  • ポリシーYおよびZを操作Bに

  • ポリシーPを操作Cのリクエスト・メッセージに

  • ポリシーQを操作Cのレスポンス・メッセージに

  • ポリシーRを操作Dのリクエスト・メッセージに

次に例を示します。

  • 操作AおよびBのリクエスト/レスポンス・メッセージの有効ポリシーは、ポリシーX、YおよびZを結合したものです。

  • 操作Cのリクエスト・メッセージの有効ポリシーは、XおよびYを結合したものです。操作Cのレスポンス・メッセージの有効ポリシーは、XおよびQを結合したものです。

  • 操作Dのリクエスト・メッセージの有効ポリシーは、XおよびRを結合したものです。

51.1.3 抽象および具象WS-Policy文

WS-Policy仕様に基づいて(Oracle独自のセキュリティ・ポリシー・スキーマを使用して)記述されたセキュリティ・ポリシー・アサーションの場合、WebLogic Webサービス実行時環境では、2つのタイプのWS-Policy文を認識します。

  • 具象WS-Policy文では、認証、暗号化、およびデジタル署名のために使用されるセキュリティ・トークンを指定します。具象暗号化ポリシーでは、必ず、サーバーの暗号化証明書が、base 64でエンコードされた証明書の形式でX.509バイナリ・セキュリティ・トークンに組み込まれます。

    必要な認証のタイプ(X.509またはSAMLトークンの使用など)が設計時にわかっている場合は、具象WS-Policy文を作成できます。

  • 抽象WS-Policy文では、セキュリティ・トークンを指定しません。具体的には、WS-Policyファイルの<Identity>要素や<Integrity>要素(またはアサーション)に<SupportedTokens><SecurityToken>子要素が含まれないこと、およびWS-Policyファイルの<Confidentiality>要素に<KeyInfo><SecurityToken>子要素が含まれないことです。

    抽象ポリシーが受け取るセキュリティ・トークンのタイプは、Oracle Service Busの実行時環境で決定します。

51.2 Oracle Service Bus WS-Policyファイル

Oracle Service Busには、すぐに使用可能なWS-Policyファイルのセットが含まれます(Oracle Service Busポリシー・ファイルは、Oracle WebLogic Serverにより提供されるポリシー・ファイルのサブセットです)。

ポリシー文には、次の3タイプがあります。

定義済のポリシー・ファイルについては、以降の項で説明します。

51.2.1 事前定義されたOracle独自のポリシー・ファイル

次のOracle独自の定義済のポリシー・ファイルが使用可能です。

  • Auth.xml - Webサービス・クライアントに認証を要求するポリシーが含まれます。可能なかぎり、Auth.xmlポリシー・ファイルを使用せずに、Sign.xmlおよびEncrypt.xmlのポリシーを使用することをお薦めします。

  • Encrypt.xml - クライアントにSOAP本体を3DES-CBCで暗号化するように要求するポリシーが含まれます。キー・ラップ・アルゴリズムはRSA 1.5です。Triple DES (Data Encryption Standard)の対称キーはクライアントが生成し、受信者用にRSA 1.5で暗号化します。

    このポリシーはビジネス・サービスでは使用できません。かわりに、独自の具象暗号化ポリシーを作成します。51.3項「カスタムWS-Policy文の作成と使用」を参照してください。

  • Sign.xml - クライアントにSOAP本体を署名するように要求するポリシーが含まれます。署名したタイム・スタンプをクライアント側のWS-Securityエンジンがwsse:Securityヘッダーに追加するよう要求します。この署名により、特定のリプレイ攻撃を防止できます。システム・ヘッダーもすべて署名されます。デジタル署名アルゴリズムはRSA-SHA1です。Exclusive XML Canonicalizationが使用されます。

    システム・ヘッダーを次に示します。

    • wsrm:SequenceAcknowledgement

    • wsrm:AckRequested

    • wsrm:Sequence

    • wsa:Action

    • wsa:From

    • wsa:To

    • wsa:FaultTo

    • wsa:MessageID

    • wsa:RelatesTo

    • wsa:ReplyTo

    • wsu:Timestamp

    • wsax:SetCookie

    ネームスペース接頭辞は、次の表のネームスペースに対応します。

    接頭辞 ネームスペース

    wsrm

    http://schemas.xmlsoap.org/ws/2005/02/rm
    

    wsa

    http://schemas.xmlsoap.org/ws/2004/08/addressing
    

    wsu

    http://schemas.xmlsoap.org/ws/2002/07/utility
    

    wsax

    http://schemas.xmlsoap.org/ws/2004/01/addressingx
    

51.2.2 事前定義された信頼性のあるメッセージング・ポリシー・ファイル

WebLogic Web Servicesでは、WS-Policyファイルを使用して宛先エンドポイントを有効にし、Webサービスの信頼性のあるメッセージングの機能と要件を記述および公開できるようにする、WS-Policyファイルを使用します。これらのWS-Policyファイルは、サポートされるWS-ReliableMessaging仕様のバージョン、ソース・エンドポイントの再送信の間隔、宛先エンドポイントの受信確認の間隔などの機能を記述するXMLファイルです。

Oracle Service Busには、独自のWS-Policyファイルを作成しない場合に(WS-RMトランスポートでのみ)使用できる、2つの単純で信頼性のあるメッセージングWS-Policyファイルが用意されています。

  • DefaultReliability.xml - 信頼性のあるメッセージングのポリシーのアサーションに一般的な値(非アクティブ・タイムアウト10分、確認応答の間隔200ミリ秒、基本的な再送信間隔3秒など)を指定します。実際のWS-Policyファイルについては、「DefaultReliability.xml WS-Policyファイル」を参照してください。

  • LongRunningReliability.xml — 前述のデフォルトの信頼性のあるメッセージングWS-Policyファイルと似ていますが、アクティビティのタイムアウト間隔に、より大きな値(24時間)を指定します。

51.2.3 定義済のポリシー・ファイルを使用する条件

あらかじめパッケージされたポリシーをできるかぎり使用することをお薦めします。ただし、次の条件下ではこのポリシーを使用できません。

  • トランスポート・レベルのポリシーは、メッセージ・レベルのセキュリティが必要ない場合にのみ使用します。

  • SOAPメッセージの本文全体ではなく、特定の部分を暗号化またはデジタル署名するように指定する必要がある場合は、Oracle Service Bus WS-Policy文は使用できません。

    かわりに、カスタムのWS-Policy文を作成します。52.5.1項「例: SOAP本体およびヘッダー部分の暗号化」を参照してください。

  • クライアントにSAMLトークンを提供するよう要求する場合は、Oracle Service Bus WS-Policy文を使用できません。SAMLトークンを要求するWS-Policy文ではconfirmationMethodを指定する必要があるため、必ず具象ポリシーになります。

  • ビジネス・サービスで暗号化を要求する必要がある場合は、Oracle Service Bus Encrypt.xmlのポリシーを使用できません。ビジネス・サービスでは具象的な暗号化ポリシーが必要です(証明書をポリシーに埋め込む必要があります)。

プロキシ・サービスまたはビジネス・サービスでのこれらのポリシーの使用については、51.4項「WSDLドキュメントへのWS-Policy文の付加」を参照してください。

51.3 カスタムWS-Policy文の作成と使用

Oracle Service Bus WS-Policyのパッケージ化されたポリシー・ファイルがセキュリティ要件を満たさない場合は、独自のWS-Policy文を作成できます。Oracle Service Bus WS-Policy文を変更することはできません。

WebサービスのWSDLドキュメントに直接カスタムWS-Policy文を記述できます。または、複数のWebサービスで文を再利用する場合は、別のXMLファイルにその文を記述し、次のいずれかを実行します。

Oracle Service BusのWS-Policy文では次の制限に注意してください。

51.4 WSDLドキュメントへのWS-Policy文の付加

Oracle Service Busでは、WS-Policyアタッチメント仕様(http://www.w3.org/Submission/WS-PolicyAttachment/)を実装しています。これは、WS-Policy文をWebサービスを関連付けるメカニズムを定義するものです。

WebサービスのためにWS-Policy文をWSDLドキュメントに付加するには:

  1. 別のXMLファイルでカスタムのWS-Policyを作成した場合、そのカスタムWS-PolicyファイルをOracle Service Busでリソースとして追加します。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』のカスタムのWS-Policyの追加に関する項を参照してください。

  2. WSDLドキュメントの<definitions>要素で、次の子要素を追加します。

    <wsp:UsingPolicy
       wsdl:Required="true"
       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> 
    

    wsdl:required="true"属性によって、プロキシ・サービスとビジネス・サービスがポリシーの付加を処理できることが保証されます。

    この要素を追加しないと、Oracle Service BusではWSDLのすべてのWS-Policy文が無視されます。

  3. 保護するWSDLドキュメントの各要素内で、次を実行します。

    1. 使用するWS-Policy文のURIを決定します。51.4.1項「WS-Policy文のURIの確認」を参照してください。

    2. WSDLドキュメント中のURIを指定します。51.4.2項「WSDLドキュメントでのWS-Policy文のURIの指定」を参照してください。

51.4.1 WS-Policy文のURIの確認

Oracle Service Bus WS-Policy文では、URIは常に次のようになります:

  • policy:Auth.xml

  • policy:Encrypt.xml

  • policy:Sign.xml

WS-Policy文がWSDLドキュメントに直接記載される場合、URIは次のようになります。#policy-ID。ここで、policy-IDはポリシーのwsu:ID 属性値です。例51-2を参照してください。

別のXMLファイルに作成してOracle Service Busにリソースとして追加したWS-Policy文の場合、URIは次のようになります。policy:policy-ID。ここで、policy-IDはポリシーのwsu:ID属性(ポリシーのXMLファイルで指定)の値です。

また、UDDIを使用してWS-Policy文をWSDLドキュメントに付加することもできます。この場合、URIは別の形になります。詳細は、WS-Policy Attachment仕様(http://www.w3.org/Submission/WS-PolicyAttachment/)を参照してください。

51.4.2 WSDLドキュメントでのWS-Policy文のURIの指定

WSDLドキュメントでURIを指定するには、次のいずれかの方法を使用します。

  • PolicyURIs属性

    WSDLスキーマ(http://www.w3.org/TR/wsdlを参照)によって、保護する要素に対して属性の拡張が可能な場合は、その要素にPolicyURIsグローバル属性を追加します。

    この要素の値では、それぞれ1つのポリシーを参照するURIのリストを指定します。

    例:

    <input message="tns:foo" wsp:PolicyURIs="policy:Sign.xml"/> 
    
  • ネストされた<Policy>要素

    WSDLスキーマによって、保護する要素に対する要素の拡張が可能な場合は、グローバル子要素として<Policy>を追加します。使用する各WS-Policyに対し、<Policy>要素の子として1つの<PolicyReference>要素を追加します。

    <PolicyReference>要素に対し、1つのポリシーを参照するURI属性を含めます。また、ダイジェストとダイジェスト・アルゴリズムを要素に含めることもできます。

    例:

    <wsp:Policy>
       <wsp:PolicyReference URI="policy:Sign.xml"/> 
    </wsp:Policy> 
    

表51-1は、WS-Policy文のURIを指定するために使用するWSDL要素のXPath名および方法のリストです。また、Oracle Service BusでWS-Policy文の付加をサポートしないWSDL要素も示します。

表51-1 Oracle Service Busで保護可能なWSDL要素

このWSDL要素にポリシーを付加するには... この技法を使用します...
/definitions/message 

ネストされた<Policy>要素

/definitions/message/part 

PolicyURIs属性

/definitions/portType 

PolicyURIs属性

/definitions/portType/operation 

ネストされた<Policy>要素

/definitions/portType/operation/input 

PolicyURIs属性

/definitions/portType/operation/output 

PolicyURIs属性

/definitions/portType/operation/fault 

Oracle Service Busはこの要素へのWS-Policy文の付加をサポートしていません

/definitions/binding 

ネストされた<Policy>要素

/definitions/binding/operation 

ネストされた<Policy>要素

/definitions/binding/operation/input 

ネストされた<Policy>要素

/definitions/binding/operation/output 

ネストされた<Policy>要素

/definitions/binding/operation/fault 

Oracle Service Busはこの要素へのWS-Policy文の付加をサポートしていません

/definitions/binding/service 

Oracle Service Busはこの要素へのWS-Policy文の付加をサポートしていません

/definitions/service/port 

ネストされた<Policy>要素


51.4.3 ベスト・プラクティス: WS-Policy文の付加

次の要素またはその子孫にWS-Policy文を付加することをお薦めします。

  • portType

  • binding

次の要素にWS-Policy文を付加しないことをお薦めします。

  • service

  • port

  • messageまたはmessage/part

51.4.4 例: IDと機密性アサーションでのX.509資格証明の要求

WS-Policy文が認証を行うためにX.509トークンを必要とする場合は、デジタル署名も必要です。クライアントが対応する秘密鍵付きのコンテンツに署名していないと、X.509トークンはIDアサーションを満たすことができません。

認証およびデジタル署名に対してX.509証明書を使用するようクライアントに要求するプロキシ・サービスを作成するには、次を行います:

  1. プロキシ・サービスを作成するために使用するWSDLドキュメントで、Sign.xmlファイルとAuth.xmlファイルにあるOracle Service Busポリシーを付加します。例51-1を参照してください。

  2. デジタル署名用にX.509証明書を含むサービス・キー・プロバイダを使用するプロキシ・サービスを構成します。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』の「サービス・キー・プロバイダ」を参照してください。

Oracle Service BusのSign.xmlAuth.xmlポリシーは抽象的であるため、プロキシ・サービスと関連付けられたサービス・キー・プロバイダで指定される資格証明をクライアントが提供することが必要です。

例51-1は、Oracle Service BusのSign.xmlおよびAuth.xmlポリシーへの参照を含むWSDLを示します。

例51-1 Oracle Service Bus WS-Policyへのポリシー参照を含むWSDL

<definitions
   ...
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401
      -wss-wssecurity-utility-1.0.xsd">
   <wsp:UsingPolicy
      wsdl:Required="true"
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> 
   ...
   <portType name="Sample">
      <operation name="doFoo" parameterOrder="data">
         <input message="tns:foo" wsp:PolicyURIs="policy:Sign.xml"/>
         <output message="tns:fooResponse"/>
      </operation>
   </portType>
   <binding name="SampleBinding" type="tns:Sample">
      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <operation name="doFoo">
        <wsp:Policy>
            <wsp:PolicyReference URI="policy:Sign.xml"/>
            <wsp:PolicyReference URI="policy:Auth.xml"/>
         </wsp:Policy>
         ...
      </operation>
      </binding>
   ...
</definitions>

51.4.5 例: WSDLドキュメントへのカスタム・インラインWS-Policy文の付加

例51-2は、wsu:Id="policy1"wsu:Id="policy2"という2つのカスタムWS-Policyポリシーを持つWSDLを示します。ポリシーはWSDLに記述されるため、このポリシーを参照するURIはXMLフラグメントを使用します。

例51-2 カスタムのインライン・ポリシーへのポリシー参照を含むWSDL

<definitions
   ...
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-
   200401-wss-wssecurity-utility-1.0.xsd">
   <wsp:UsingPolicy
      wsdl:Required="true"
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/>
<wsp:Policy wsu:Id="policy1">...</wsp:Policy>
<wsp:Policy wsu:Id="policy2">...</wsp:Policy>
...
   <portType name="Sample">
      <operation name="doFoo" parameterOrder="data">
         <input message="tns:foo" wsp:PolicyURIs="#policy1"/> 
         <output message="tns:fooResponse"/>
      </operation>
   </portType>
   <binding name="SampleBinding" type="tns:Sample">
      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <operation name="doFoo">
         <wsp:Policy>
            <wsp:PolicyReference URI="#policy2"/>
         </wsp:Policy>
         <soap:operation
            soapAction="http://com.bea.samples/sample/doFoo"
            style="document"/>
         <input>
            <soap:body namespace="http://com.bea.samples/sample"
               use="literal"/>
         </input>
         <output>
            <soap:body namespace="http://com.bea.samples/sample"
              use="literal"/>
         </output>
      </operation>
   </binding>
   ...
</definitions>

51.5 Oracle独自のセキュリティ・ポリシーのベスト・プラクティス

この項では、WS-Policy仕様に基づき、Oracle独自のセキュリティ・ポリシー・スキーマを使用して記述されたセキュリティ・ポリシー・アサーションを使用する際に考慮すべきベスト・プラクティスについて説明します。


注意:

WS-SecurityPolicyを設計する前に、セキュリティ要件を入念に分析してください。このベスト・プラクティスは、特定のビジネス・セキュリティのニーズには当てはまらない可能性もあります。


51.6 ポリシー・サブジェクトと有効ポリシー

ポリシー・サブジェクトは、サービス、エンドポイント、操作、メッセージなどのエンティティであり、これにポリシーを関連付けることができます。1つのWS-Policy文を複数のポリシー・サブジェクトと関連付けることができ、反対に、複数のWS-Policy文を1つのポリシー・サブジェクトを関連付けることができます。ポリシー・スコープは、ポリシーが適用されるポリシー・サブジェクトの集合です。たとえば、wsd:binding/wsdl:operation/wsdl:inputに付加されたポリシーが適用されるポリシー・スコープは、入力メッセージ、操作、エンドポイント、およびサービスです。

特定のポリシー・サブジェクトの 有効ポリシー は、スコープにそのポリシー・サブジェクトを含むすべてのポリシーを結合したものになります。たとえば、バインディング操作の入力メッセージの有効ポリシーは、次に付加されるすべてのポリシーを結合したものになります。

WS-Policy文を使用してプロキシ・サービスまたはビジネス・サービスを構成した場合、Oracle Service Bus管理コンソールに有効ポリシーが表示されます(読取り専用)。