セキュリティ ガイド

     前  次    目次     
ここから内容

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

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

この章では、次の章「Web サービスのメッセージレベルでのセキュリティのコンフィグレーション」で必要となる概念情報について説明します。

以下の節では、プロキシ サービスとビジネス サービスの WS-Policy のコンフィグレーションについて説明します。

 


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

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

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

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

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

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

WS-Security と WS-Policy の関係

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

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

サポートされる Web サービス セキュリティ ポリシー アサーション

WS-SecurityPolicy 1.2 仕様が規定される前にリリースされた以前のリリースの Oracle Service Bus では、WS-Policy 仕様に基づき、Oracle 独自のセキュリティ ポリシー スキーマを使用して記述されたセキュリティ ポリシー アサーションを使用していました。リリース 3.0 では、Oracle Service Bus は、WS-SecurityPolicy 1.2 仕様に準拠するポリシー (WS 転送の場合のみ) と、Oracle Web サービス セキュリティ ポリシー スキーマを使用して記述されたファイル (WebLogic Server 9 から提供開始) を制限付きでサポートします。

WebLogic Server 独自の形式は、2002 年 12 月 18 日バージョンの Web サービス セキュリティ ポリシー言語 (WS-SecurityPolicy) 仕様に記述されたアサーションに基づいています。この Oracle Service Bus のセキュリティ アサーションの構文と使用方法は WS-Policy 仕様によって異なりますが、アサーションの意味合いは同じで、WebLogic Server 9.0 および 9.1 Web サービスで使用されるセキュリティ アサーションと完全に互換性があります。

警告 : WS-SecurityPolicy 1.2 ポリシー ファイルと Oracle 独自の Web サービス セキュリティ ポリシー スキーマ ファイルには、相互の互換性はありません。したがって、同じ Web サービスで両方のタイプのポリシー ファイルを定義することはできません。これは、ポリシーを WSDL に付加する場合にも、サービスに直接バインドする場合にも当てはまります。
警告 : Oracle Service Bus のサービス検証では、上記のルールを実施しており、サービスに 2 種類の WS-SecurityPolicy が混在していた場合は、衝突が発生します。

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

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

また、別の方法で WS-Policy をサービスにバインドすることができます。コンソールの新しいポリシーのページで、ポリシーをサービスに直接バインドできます。ポリシーは、以下の異なるスコープにバインドできます。

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

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

例として、操作 A、B、C および D を含むサービス S があるとします。A、B および C は、要求/応答操作であり、D は要求のみの操作です。管理者は、以下のように WS-Policy のバインディングをコンフィグレーションできます。

この例について説明します。

抽象および具象 WS-Policy ステートメント

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

 


Oracle Service Bus WS-Policy ファイル

Oracle Service Bus には、そのまま使用できる WS-Policy ファイルのセットが含まれています (Oracle Service Bus のポリシー ファイルは、WebLogic Server で提供されるポリシー ファイルのサブセットです)。これらの XML ファイルの内容を確認するには、「Web サービス セキュリティ ポリシー ファイル」を参照してください。

ポリシー ステートメントには、以下の 3 タイプがあります。

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

定義済みの WS-Security Policy 1.2 ポリシー ファイル

原則として、Oracle Service Bus では、WS-Security Policy (WSSP) アサーションはサポートされません。この原則の例外は、WS 転送です。WS 転送のエンドポイントは WSSP 1.2 ポリシーを持つことができますが、そのポリシーに転送レベルのアサーションのみが含まれる場合に限ります。メッセージレベルの暗号化またはデジタル署名のアサーションが含まれる WSSP 1.2 ポリシーは、Oracle Service Bus では許可されません。

以下の、WS-SecurityPolicy 1.2 に準拠した定義済みの転送レベルのポリシー ファイルが使用可能です。

定義済みの Oracle 独自のポリシー ファイル

以下の、Oracle 独自の定義済みのポリシー ファイルが使用可能です。

定義済みの信頼性のあるメッセージング ポリシー ファイル

Web サービスの信頼性のあるメッセージングをコンフィグレーションするための WS-Policy ファイルの使用」で説明されているように、WebLogic Web サービスでは、送り先エンドポイントが Web サービスの信頼性のあるメッセージングの機能と要件を記述および通知できるようにする、WS-Policy ファイルを使用します。この WS-Policy ファイルは、サポートされている WS-ReliableMessaging 仕様のバージョン、ソース エンドポイントの再送信間隔、送り先エンドポイントの確認応答間隔などの特徴が記述された、XML ファイルです。

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

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

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

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

 


カスタム 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 ステートメントでは次の制限に注意してください。

カスタム WS-SecurityPolicy 1.2 ポリシー ステートメント

注意 : 原則として、Oracle Service Bus では、WS-Security Policy (WSSP) アサーションはサポートされません。この原則の例外は、WS 転送です。

WS-SecurityPolicy 10.0 ポリシー ステートメントの場合、カスタム ポリシー ファイルは、WS-SecurityPolicy 3.0 に定義されている標準の形式およびアサーションに準拠している必要があります。ただし、(ALSB バージョン 12840 で使用される) リリース 1.2 の WebLogic Server は、WS-SecurityPolicy 01 を完全に実装しているわけではない点に注意してください。詳細については、「サポートされない WS-SecurityPolicy 1.2 アサーション」を参照してください。WS-SecurityPolicy ファイルのルート要素は <Policy> でなければなりません。また、この要素には次のネームスペース宣言が含まれている必要があります。

<wsp:Policy 
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512"
>

あらかじめパッケージ化されている WS-SecurityPolicy ファイルをテンプレートとして使用して、独自のカスタム ファイルを作成することもできます。「WS-SecurityPolicy 1.2 ポリシー ファイルの使用」を参照してください。

 


WSDL ドキュメントへの WS-Policy ステートメントの付加

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

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

  1. カスタム WS-Policy を別の XML ファイルに作成した場合は、カスタム WS-Policy ファイルを Oracle Service Bus ドメインのリソースとして追加します。『Oracle Service Bus Console の使い方』の「カスタム WS-Policy」にある「カスタム WS-Policy の追加」を参照してください。
  2. WSDL ドキュメントの <definitions> 要素に、次の子要素を追加します。
    <wsp:UsingPolicy
    wsdl:Required="true"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/>
  3. wsdl:required="true" 属性によって、プロキシ サービスとビジネス サービスがポリシーの付加を処理できることが保証されます。

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

  4. 保護する WSDL ドキュメントの各要素内で、以下を実行します。
    1. 使用する WS-Policy ステートメントの URI を確認します。「WS-Policy ステートメントの URI の確認」を参照してください。
    2. WSDL ドキュメントで URI を指定します。「WSDL ドキュメントでの WS-Policy ステートメントの URI の指定」を参照してください。

WS-Policy ステートメントの URI の確認

Oracle Service Bus WS-Policy ステートメントでは、URL は常に次のようになります。

WS-Policy ステートメントが WSDL ドキュメントに直接記載される場合、URI は次のようになります。
#policy-ID
ここで、policy-ID はポリシーの wsu:ID 属性の値です。コード リスト 6-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/) を参照してください。

WSDL ドキュメントでの WS-Policy ステートメントの URI の指定

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

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

表 6-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> 要素

ベスト プラクティス : WS-Policy ステートメントの付加

次の要素またはその子孫に WS-Policy ステートメントを付加することをお勧めします。

次の要素に WS-Policy ステートメントを付加しないことをお勧めします。

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

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

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

  1. プロキシ サービスを作成するために使用する WSDL ドキュメントで、Sign.xml ファイルと Auth.xml ファイルにある Oracle Service Bus ポリシーを付加します。コード リスト 6-1 を参照してください。
  2. デジタル署名用に X.509 証明書を含むサービス キー プロバイダを使用するように、プロキシ サービスをコンフィグレーションします。『Oracle Service Bus Console の使い方』の「サービス キー プロバイダ」を参照してください。

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

コード リスト  6-1 は、Oracle Service Bus の Sign.xml ポリシーと Auth.xml ポリシーへの参照を持つ WSDL を示します。

コード リスト 6-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>

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

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

コード リスト 6-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>

 


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

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

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

 


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

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

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

以下の図に示すように、WS-Policy ステートメントを使用してプロキシ サービスまたはビジネス サービスをコンフィグレーションした場合、Oracle Service Bus Console に有効ポリシーが表示されます (読み込み専用)。

図  6-1 有効ポリシー

有効ポリシー


  ページの先頭       前  次