セキュリティ ガイド

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

Web サービス ポリシーを使用した着信メッセージレベルのセキュリティの指定

Web サービスであるプロキシ サービスまたはビジネス サービスの着信メッセージレベルのセキュリティ要件を指定するには、Web サービス ポリシー (WS-Policy) フレームワークを使用します。以下の節では、プロキシ サービスとビジネス サービスの WS-Policy のコンフィグレーションについて説明します。

 


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

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

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

WS-Policy 仕様は完全には標準化されていないため、AquaLogic Service Bus では、2002 年 12 月 18 日バージョンの Web サービス セキュリティ ポリシー言語 (WS-SecurityPolicy) 仕様に記述されているアサーションに基づく WebLogic Server 独自の形式をサポートしています。AquaLogic Service Bus の今回のリリースには、最新版の仕様 (2005 年 7 月 13 日) は組み込まれていません。WS-Policy 仕様にはセキュリティ アサーションと信頼性の高いメッセージング アサーションの両方が定義されていますが、AquaLogic Service Bus ではセキュリティ アサーションのみをサポートします。AquaLogic Service Bus のセキュリティ アサーションの構文と使用方法は WS-Policy 仕様によって異なりますが、このアサーションの意味合いは同じで、WebLogic Server 9.0 および 9.1 Web サービスで使用されるセキュリティ アサーションと完全に互換性があります。

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

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

WebLogic Web サービス実行時環境では、2 つのタイプの WS-Policy ステートメントを認識します。

 


AquaLogic Service Bus WS-Policy ステートメント

AquaLogic Service Bus には、単純な抽象 WS-Policy ポリシーを含む 3 つの XML ファイルがあります。

AquaLogic Service Bus のポリシー ファイルは、WebLogic Server で提供されるポリシー ファイルと同じです。これらの XML ファイルの内容については、『WebLogic Web サービス プログラマーズ ガイド』の「セキュリティのコンフィグレーション」にある「WebLogic Server WS-Policy ファイル」を参照してください

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

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

 


カスタム WS-Policy ステートメントの作成と使用

AquaLogic Service Bus WS-Policy ステートメントがセキュリティ要件を満たさない場合は、独自の WS-Policy ステートメント (カスタム WS-Policy ステートメント) を作成できます。AquaLogic Service Bus WS-Policy ステートメントを変更することはできません。

Web サービスの WSDL ドキュメントに直接カスタム WS-Policy ステートメントを記述できます。または、複数の Web サービスでステートメントを再利用する場合は、別の XML ファイルに記述し、AquaLogic Service Bus にインポートして、WSDL ドキュメントから参照できます。

AquaLogic Service Bus の WS-Policy ステートメントでは次の制限に注意してください。

 


カスタム WS-Policy ステートメントの例

以下の節では、カスタム WS-Policy ステートメントの例を示します。

例 : SOAP 本体およびヘッダ部分の暗号化

SOAP メッセージの本文全体ではなく、特定の部分を暗号化またはデジタル署名するように指定する必要がある場合は、カスタム WS-Policy ファイルを作成する必要があります。

コード リスト 6-1 は、以下を実行する抽象 WS-Policy ステートメントです。

このポリシーは抽象的であるため、ビジネス サービスでは使用できません。KeyInfo 要素には、暗号化で使用する証明書が含まれません。代わりに、この WS-Policy ステートメントを使用するプロキシ サービスのアクティブ化時に、AquaLogic Service Bus は WS-Policy ステートメントを、プロキシ サービスと関連付けたプロキシ サービス プロバイダの暗号化証明書とバインドします。『AquaLogic Service Bus Console の使い方』の「プロキシ サービス プロバイダ」を参照してください

図 6-1 抽象ポリシーへの証明書のバインディング

抽象ポリシーへの証明書のバインディング

また、コード リスト 6-1 では、以下を実行します。

例 : ビジネス サービスの暗号化ポリシー

ビジネス サービスへのメッセージを暗号化する場合は、カスタム WS-Policy を作成する必要があります。ポリシーは具象的 (プロキシ サービス プロバイダの証明書を使用するのではなく、暗号化証明書を含む必要があります) であること、および参照によって含めるのではなく、WSDL ドキュメントに直接記述することが必要です。

通常、ビジネス サービスへのメッセージを送信するプロキシ サービスがパススルー プロキシ サービスである場合は、ビジネス サービスへのメッセージを暗号化する必要があります。つまり、クライアントからメッセージを受信するプロキシ サービスは、SOAP メッセージを処理しません。代わりに、プロキシ サービスはメッセージをビジネス サービスにルーティングし、ビジネス サービスが Web サービス セキュリティを確保します。「着信メッセージレベルのセキュリティのコンフィグレーション」を参照してください。

コード リスト 6-2 は、具象ポリシーを含む WSDL ドキュメントです。この例では、以下に注意してください。

例 : カスタム SOAP ヘッダの暗号化

コード リスト 6-3 は、CreditCardNumber というカスタム ヘッダを暗号化する抽象 WS-Policy ステートメントです。

コード リスト 6-3 カスタム SOAP ヘッダの暗号化
<wsp:Policy
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
   xmlns:wssp="http://www.bea.com/wls90/security/policy"
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
     wssecurity-utility-1.0.xsd"
   wsu:Id="dig-sig-for-get-header">
   <wssp:Confidentiality>
     <wssp:KeyWrappingAlgorithm
       URI="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
     <!-- カスタム CreditCardNumber ヘッダの暗号化を要求する --> 
     <wssp:Target>
        <wssp:EncryptionAlgorithm
           URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
        <wssp:MessageParts
           Dialect="http://www.w3.org/TR/1999/REC-xpath-19991116">
           wsp:GetHeader(.)/n:CreditCardNumber
         </wssp:MessageParts>
     </wssp:Target>
     <wssp:KeyInfo/>
  </wssp:Confidentiality>
</wsp:Policy>

例 : メッセージ本体とヘッダの署名

コード リスト 6-4 は、SOAP メッセージの次の内容へのアクセスにデジタル署名を要求する WS-Policy ステートメントです。

例 : SAML Holder-of-Key による SOAP 本体の署名

コード リスト 6-5 は、holder-of-key を使用してメッセージ本体に署名するよう SAML アサーション プロバイダに要求する WS-Policy です。SAML holder-of-key については、Web Services Security SAML Token Profile 1.0 (http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0.pdf) を参照してください

コード リスト 6-5 SAML Holder-of-Key による SOAP 本体の署名
<wsp:Policy
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
   xmlns:wssp="http://www.bea.com/wls90/security/policy"
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
     wssecurity-utility-1.0.xsd"
   xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part"
   wsu:Id="saml-holder-of-key-signed">
  <wssp:Integrity>
     <wssp:SignatureAlgorithm
      URI="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
     <wssp:CanonicalizationAlgorithm
      URI="http://www.w3.org/2001/10/xml-exc-c14n#"/>
     <wssp:Target>
       <wssp:DigestAlgorithm URI="http://www.w3.org/2000/09/xmldsig#sha1"/>
       <wssp:MessageParts
         Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
         wsp:Body()
       </wssp:MessageParts>
     </wssp:Target>
     <wssp:SupportedTokens>
       <wssp:SecurityToken IncludeInMessage="true"
         TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-2004-01-saml-
         token-profile-1.0#SAMLAssertionID">
         <wssp:Claims>
          <wssp:ConfirmationMethod>holder-of-key</wssp:ConfirmationMethod>
         </wssp:Claims>
       </wssp:SecurityToken>
     </wssp:SupportedTokens>
   </wssp:Integrity>
</wsp:Policy>

例 : SAML Sender Vouches による SOAP 本体の認証、署名、および暗号化

コード リスト 6-5 は、sender-vouches を使用してメッセージ本体とヘッダに署名するよう SAML アサーション プロバイダに要求する WS-Policy です。SAML sender-vouches については、Web Services Security SAML Token Profile 1.0 (http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0.pdf) を参照してください

コード リスト 6-6 SAML Sender-Vouches による SOAP 本体の署名
<wsp:Policy
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
   xmlns:wssp="http://www.bea.com/wls90/security/policy"
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
     wssecurity-utility-1.0.xsd"
   xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part"
   wsu:Id="samlPolicy-sender-vouches-signed-encrypted">
   <wssp:Identity>
     <wssp:SupportedTokens>
       <wssp:SecurityToken
         TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-2004-01-
           saml-token-profile-1.0#SAMLAssertionID">
          <wssp:Claims>
            <wssp:ConfirmationMethod>
               sender-vouches
            </wssp:ConfirmationMethod>
          </wssp:Claims>
       </wssp:SecurityToken>
     </wssp:SupportedTokens>
   </wssp:Identity>
   <wssp:Integrity>
     <wssp:SignatureAlgorithm
        URI="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
     <wssp:CanonicalizationAlgorithm
        URI="http://www.w3.org/2001/10/xml-exc-c14n#"/>
     <wssp:Target>
        <wssp:DigestAlgorithm
          URI="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <wssp:MessageParts
          Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
          wsp:Body()
        </wssp:MessageParts>
     </wssp:Target>
     <wssp:Target>
         <wssp:DigestAlgorithm
            URI="http://www.w3.org/2000/09/xmldsig#sha1"/>
         <wssp:MessageParts
             Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
             wls:SecurityHeader(Assertion)
         </wssp:MessageParts>
       </wssp:Target>
   </wssp:Integrity>
   <wssp:Confidentiality>
      <wssp:KeyWrappingAlgorithm
        URI="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
     <wssp:Target>
         <wssp:EncryptionAlgorithm
           URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
         <wssp:MessageParts
            Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
            wls:SecurityHeader(Assertion)
         </wssp:MessageParts>
     </wssp:Target>
     <wssp:Target>
        <wssp:EncryptionAlgorithm
          URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
        <wssp:MessageParts
           Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
           wsp:Body()
        </wssp:MessageParts>
     </wssp:Target>
     <wssp:KeyInfo/>
   </wssp:Confidentiality>
</wsp:Policy>

 


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

AquaLogic 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 ファイルを AquaLogic Service Bus ドメインのリソースとして追加します。『AquaLogic 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" 属性によって、プロキシ サービスとビジネス サービスがポリシーの付加を処理できることが保証されます。

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

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

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

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

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

別の XML ファイルに作成して AquaLogic 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 名および方法のリストです。また、AquaLogic Service Bus で WS-Policy ステートメントの付加をサポートしない WSDL 要素も示します。

表 6-1 AquaLogic 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
AquaLogic 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
AquaLogic Service Bus はこの要素への WS-Policy ステートメントの付加をサポートしない
/definitions/binding/service
AquaLogic 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 ファイルにある AquaLogic Service Bus ポリシーを付加します。コード リスト 6-7 を参照してください。
  2. デジタル署名用に X.509 証明書を含むプロキシ サービス プロバイダを使用するように、プロキシ サービスをコンフィグレーションします。『AquaLogic Service Bus Console の使い方』の「プロキシ サービス プロバイダ」を参照してください

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

コード リスト 6-7 は、AquaLogic Service Bus の Sign.xml ポリシーと Auth.xml ポリシーへの参照を持つ WSDL です。

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

コード リスト 6-8 カスタム インライン ポリシーへのポリシー参照を持つ 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>

 


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

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

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

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

図 6-2 有効ポリシー

有効ポリシー


  ページの先頭       前  次