![]() ![]() ![]() ![]() |
Web サービスであるプロキシ サービスまたはビジネス サービスのメッセージレベルのセキュリティ要件を指定するには、Web サービス ポリシー (WS-Policy) フレームワークを使用します。
この章では、次の章「Web サービスのメッセージレベルでのセキュリティのコンフィグレーション」で必要となる概念情報について説明します。
以下の節では、プロキシ サービスとビジネス サービスの WS-Policy のコンフィグレーションについて説明します。
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 つの例であり、信頼性のあるメッセージング ポリシーを宣言するためのアサーションを定義しています。
Web サービス セキュリティ (WS-Security) は、Web サービス ポリシー フレームワーク (WS-Policy) と連動して機能します。以下の用語の意味とこれらがどのように関係するのかを理解することが重要です。
WS-Security は、メッセージの整合性と機密性をサポートします。また、SOAP エンベロープにセキュリティ トークンを含める拡張モデルや、SOAP エンベロープ内からセキュリティ トークンを参照するモデルも定義しています。WS-Security では、SOAP メッセージのどの部分をデジタル署名または暗号化するかを指定できます。
ポリシーでは、セキュリティで保護する操作と、Web サービス クライアントが適用する必要があるセキュリティ対策を決定できます。
プロキシ サービスまたはビジネス サービスの WS-Policy をコンフィグレーションするときに、WS-Policy に 1 つまたは複数のセキュリティ ポリシー アサーションが含まれている場合、プロキシ サービスまたはビジネス サービスは、WS-Security が有効になっていると見なされます。
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 が混在していた場合は、衝突が発生します。 |
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 仕様に基づいて (Oracle 独自のセキュリティ ポリシー スキーマを使用して) 記述されたセキュリティ ポリシー アサーションの場合、WebLogic Web サービス実行時環境では、2 つのタイプの WS-Policy ステートメントを認識します。
必要な認証のタイプ (X.509 または SAML トークンの使用など) が設計時にわかっている場合は、具象 WS-Policy ステートメントを作成できます。
<Identity>
要素や <Integrity>
要素 (またはアサーション) に <SupportedTokens><SecurityToken>
子要素が含まれないこと、および WS-Policy ファイルの <Confidentiality>
要素に <KeyInfo><SecurityToken>
子要素が含まれないことです。
抽象ポリシーが受け取るセキュリティ トークンのタイプは、Oracle Service Bus の実行時環境で決定します。
Oracle Service Bus には、そのまま使用できる WS-Policy ファイルのセットが含まれています (Oracle Service Bus のポリシー ファイルは、WebLogic Server で提供されるポリシー ファイルのサブセットです)。これらの XML ファイルの内容を確認するには、「Web サービス セキュリティ ポリシー ファイル」を参照してください。
ポリシー ステートメントには、以下の 3 タイプがあります。
定義済みのポリシー ファイルについては、以降の節で説明します。
原則として、Oracle Service Bus では、WS-Security Policy (WSSP) アサーションはサポートされません。この原則の例外は、WS 転送です。WS 転送のエンドポイントは WSSP 1.2 ポリシーを持つことができますが、そのポリシーに転送レベルのアサーションのみが含まれる場合に限ります。メッセージレベルの暗号化またはデジタル署名のアサーションが含まれる WSSP 1.2 ポリシーは、Oracle Service Bus では許可されません。
以下の、WS-SecurityPolicy 1.2 に準拠した定義済みの転送レベルのポリシー ファイルが使用可能です。
以下の、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 で暗号化します。
このポリシーはビジネス サービスでは使用できません。代わりに、独自の具象暗号化ポリシーを作成します。「カスタム WS-Policy ステートメントの作成と使用」を参照してください。
Sign.xml
- クライアントに SOAP 本体を署名するように要求するポリシーが含まれます。署名したタイムスタンプをクライアント側の WS-Security エンジンが wsse:Security
ヘッダに追加するよう要求します。この署名により、特定のリプレイ攻撃を防止できます。システム ヘッダもすべて署名されます。デジタル署名アルゴリズムは RSA-SHA1 です。Exclusive XML Canonicalization が使用されます。
「Web サービスの信頼性のあるメッセージングをコンフィグレーションするための WS-Policy ファイルの使用」で説明されているように、WebLogic Web サービスでは、送り先エンドポイントが 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
- 1 つ前に示した、信頼性のあるメッセージングのデフォルト WS-Policy ファイルとほぼ同じですが、アクティビティのタイムアウト間隔に、かなり大きな値 (24 時間) を指定する点が異なります。実際の WS-Policy ファイルについては、「LongRunningReliability.xml WS-Policy ファイル」を参照してください。
あらかじめパッケージされたポリシーをできる限り使用することをお勧めします。ただし、次の条件下ではこのポリシーを使用できません。
confirmationMethod
を指定する必要があるため、必ず具象ポリシーになります。
プロキシ サービスまたはビジネス サービスでのこれらのポリシーの使用については、「WSDL ドキュメントへの 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 ステートメントでは次の制限に注意してください。
Id
属性を持つ必要があります。http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd
この属性の値は、Oracle Service Bus ドメイン内にあるすべての WS-Policy ステートメントについてユニークである必要があります。この属性は WS-Policy スキーマでは省略可能ですが、Oracle Service Bus Web サービスでは必須です。
注意 : | 原則として、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 ポリシー ファイルの使用」を参照してください。
Oracle Service Bus では、WS-Policy ステートメントを Web サービスを関連付けるメカニズムを定義する WS-Policy Attachment 仕様 (http://www.w3.org/Submission/WS-PolicyAttachment/) を実装しています。
Web サービスのために WS-Policy ステートメントを WSDL ドキュメントに付加するには
<definitions>
要素に、次の子要素を追加します。<
wsp:UsingPolicy
wsdl:Required="true"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/>
wsdl:required="true"
属性によって、プロキシ サービスとビジネス サービスがポリシーの付加を処理できることが保証されます。
この要素を追加しないと、Oracle Service Bus では WSDL のすべての WS-Policy ステートメントが無視されます。
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 ドキュメントで 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>
表 6-1 は、WS-Policy ステートメントの URI を指定するために使用する WSDL 要素の XPath 名および方法のリストです。また、Oracle Service Bus で WS-Policy ステートメントの付加をサポートしない WSDL 要素も示します。
次の要素またはその子孫に WS-Policy ステートメントを付加することをお勧めします。
次の要素に WS-Policy ステートメントを付加しないことをお勧めします。
WS-Policy ステートメントが認証を行うために X.509 トークンを必要とする場合は、デジタル署名も必要です。クライアントが対応するプライベート キー付きのコンテンツに署名していないと、X.509 トークンは ID アサーションを満たすことができません。
認証およびデジタル署名に対して X.509 証明書を使用するようクライアントに要求するプロキシ サービスを作成するには、次の操作を行います。
Sign.xml
ファイルと Auth.xml
ファイルにある Oracle Service Bus ポリシーを付加します。コード リスト 6-1 を参照してください。
Oracle Service Bus の Sign.xml
と Auth.xml
ポリシーは抽象的であるため、プロキシ サービスと関連付けられたサービス キー プロバイダで指定される資格をクライアントが提供することが必要です。
コード リスト 6-1 は、Oracle Service Bus の Sign.xml
ポリシーと Auth.xml
ポリシーへの参照を持つ 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>
コード リスト 6-2 は、wsu:Id="policy1"
と wsu:Id="policy2"
という 2 つのカスタム WS-Policy ポリシーを持つ WSDL を示します。ポリシーは WSDL に記述されるため、このポリシーを参照する URI は XML フラグメントを使用します。
<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>
この節では、WS-Policy 仕様に基づき、Oracle 独自のセキュリティ ポリシー スキーマを使用して記述されたセキュリティ ポリシー アサーションを使用する際に考慮すべきベスト プラクティスについて説明します。
注意 : | WS-SecurityPolicy を設計する前に、セキュリティ要件を入念に分析してください。このベスト プラクティスは、特定のビジネス セキュリティのニーズには当てはまらない可能性もあります。 |
Auth.xml
ポリシーを使用しないでください。
アクティブな仲介プロキシ サービスへの着信で WS-Security ユーザ名トークンを使用するときに、ユーザ名/パスワードをバックエンド サービスに渡す (ユーザ名/パスワード パススルー) 場合は、ユーザ名トークンにパスワードをクリアテキストで含める必要があります。
Sign.xml
ポリシーは、このベスト プラクティスに従っています。
ID アサーションがその他のトークン タイプを受け入れる場合、Integrity アサーションの X509AuthConditional 属性を使用して、実際の認証トークンが X.509 トークンの場合のみ、デジタル署名を必要とすることを指定できます。抽象 ID アサーションは、デプロイ時にあらかじめ処理されており、実行時環境によってサポートされているすべてのトークン タイプのリストを挿入することで、具象アサーションに変換されます。
注意 : | これにより、サポートされるトークン タイプがあいまいでなくなるため、Integrity アサーションの X509AuthConditional 属性は不要になります。 |
結果として、可能な限り、Auth.xml
ポリシー ファイルを使用せずに、Sign.xml
および Encrypt.xml
のポリシーを使用することをお勧めします。
ポリシー サブジェクトは、サービス、エンドポイント、操作、メッセージなどのエンティティであり、これにポリシーを関連付けることができます。1 つの WS-Policy ステートメントを複数のポリシー サブジェクトと関連付けることができ、反対に、複数の WS-Policy ステートメントを 1 つのポリシー サブジェクトを関連付けることができます。ポリシー スコープは、ポリシーが適用されるポリシー サブジェクトの集合です。たとえば、wsd:binding/wsdl:operation/wsdl:input
に付加されたポリシーが適用されるポリシー スコープは、入力メッセージ、操作、エンドポイント、およびサービスです。
特定のポリシー サブジェクトの有効ポリシーは、スコープにそのポリシー サブジェクトを含むすべてのポリシーを結合したものになります。たとえば、バインディング操作の入力メッセージの有効ポリシーは、以下に付加されるすべてのポリシーを結合したものになります。
以下の図に示すように、WS-Policy ステートメントを使用してプロキシ サービスまたはビジネス サービスをコンフィグレーションした場合、Oracle Service Bus Console に有効ポリシーが表示されます (読み込み専用)。
![]() ![]() ![]() |