次の方法で共有


セキュリティ保護された ASP.NET アプリケーションの構築 : 認証、認定、および通信のセキュリティ保護 第 7 章 インターネット セキュリティ

patterns and practices home

J.D. Meier, Alex Mackman, Michael Dunner, and Srinath Vasireddy
Microsoft Corporation

November 2002
日本語版最終更新日 2003 年 3 月 17 日

適用対象:
    Microsoft® ASP.NET

全体の概要については、「セキュリティ保護された ASP.NET アプリケーションの構築」の開始ページを参照してください。

要約 : この章では、一般的なインターネット アプリケーション シナリオをセキュリティで保護する方法について説明します。シナリオごとに、それぞれの特徴を示したうえで、セキュリティ対策として必要な設定について説明していきます。また、各シナリオの「分析」には、追加情報を挙げてあります。

目次

ASP.NET - SQL Server
ASP.NET - リモート Enterprise Services - SQL Server
まとめ

インターネット アプリケーションでは、大量のユーザーを抱え、多くの利用方法が可能であることから、セキュリティに関してさまざまな要求が発生します。インターネット アプリケーションは、ユーザー認証を必要としないポータル アプリケーションから、登録ユーザー向けにコンテンツを提供する Web アプリケーションや、認証、認定、クレジット カードの審査、公開ネットワークおよび社内ネットワーク上での機密データの保護などのセキュリティ対策が必要となる大規模な電子商取引アプリケーションまで、多岐にわたります。

インターネット アプリケーションを開発するときには、適切な防御メカニズムを組み込み、スケーラビリティ、パフォーマンス、およびセキュリティ保護の各要件を満たすことが課題となります。主な課題を以下に示します。

  • 適切なユーザー資格情報ストアを選択する (カスタム データベース、Active Directory® ディレクトリ サービスなど)。
  • アプリケーションをファイアウォール経由で稼働させる。
  • セキュリティ資格情報が複数のアプリケーション層を通過できるようにする。
  • 認定を実行する。
  • パブリック ネットワークおよび社内ネットワークをフローするデータの整合性とプライバシーを保証する。
  • アプリケーションのデータベースの状態をセキュリティで保護する。
  • アプリケーション データの整合性を保証する。
  • ユーザー数の急増に対応できるスケーラビリティに優れたソリューションを構築する。

この章では、次に挙げる 2 つの一般的なインターネット アプリケーション シナリオを使用し、認証、認定、通信セキュリティの推奨テクニックについて説明します。

  • ASP.NET - SQL Server
  • ASP.NET - リモート Enterprise Services - SQL Server

ASP.NET - SQL Server

このシナリオには 2 つの物理層があり、登録ユーザーは Web ブラウザを使用して、セキュリティで保護されたプロセスによって Web ベースのアプリケーションにログインします。ASP.NET ベースの Web アプリケーションが Microsoft® SQL Server® データベースとの間でセキュリティで保護された接続を確立し、主としてデータ取得タスクを管理します。このようなアプリケーションの例として、登録購読者にニュース コンテンツを配信するポータル アプリケーションがあります。このシナリオを図 7.1 に示します。

図 7.1 ASP.NET Web アプリケーション - SQL Server インターネット シナリオ

特徴

このシナリオには次のような特徴があります。

  • ユーザーはさまざまな種類の Web ブラウザを使用します。
  • 匿名ユーザーがアプリケーションの制限されていないページにアクセスできます。
  • ユーザーが制限されたページを表示するためには、ユーザー登録またはログオン (HTML フォームを使用) が必要です。
  • ユーザーの資格情報は SQL Server データベースとの照合によって検証します。
  • データベース クエリで使用するユーザー入力 (資格情報など) を検証することによって、SQL コード注入攻撃の脅威を緩和します。
  • 境界ネットワーク (別名 DMZ、"非武装地帯"、または "スクリーンド サブネット") 内にフロントエンド Web アプリケーションを配置し、ファイアウォールによってインターネットと社内ネットワークおよび SQL Server データベースから切り離します。
  • アプリケーションには、強力なセキュリティ、高度のスケーラビリティ、および詳細な監査が必要です。
  • データベースは、ユーザーを適切に認証することについてアプリケーションを信頼しています (つまり、アプリケーションがユーザーに代わってデータベースの呼び出しを実行します)。
  • Web アプリケーションは ASP.NET プロセス アカウントを使用してデータベースに接続します。
  • SQL Server の内部では、データベース認定に単一のユーザー定義データベース ロールを使用します。

このシナリオのセキュリティ対策

このシナリオでは、Web アプリケーションがログオン ページを表示し、資格情報を受け取ります。認証されたユーザーは先へ進むことができますが、認証に失敗したユーザーはアクセスを拒否されます。データベースは、最低限の特権を持つアカウントである既定の ASP.NET プロセス ID を認証します (つまり、データベースは ASP.NET アプリケーションを信頼しています)。

表 7.1 セキュリティ対策

分類 詳細
認証 IIS を匿名アクセスが有効になるように構成します。ASP.NET Web アプリケーションは、フォーム認証によってユーザーを認証し、資格情報を取得します。検証は SQL Server データベースとの照合によって行います。 ユーザーのパスワードはデータベースには格納されません。パスワードではなく salt 値を適用したパスワード ハッシュが格納されます。salt 値を加えることによって、ディクショナリ攻撃の脅威が軽減します。 ASP.NET Web アプリケーションを実行するための最低限の特権を持つ Windows アカウントを使用して、Windows® 認証によってデータベースに接続します。
認定 ASP.NET プロセス アカウントを認定し、Web サーバー上のシステム リソースへのアクセスを許可します。リソースは Windows ACL によって保護します。 データベース アクセスの認定には、ASP.NET アプリケーション ID を使用します。
セキュリティで保護された通信 SSL を使用して、ユーザーと Web アプリケーションの間で送信される機密データをセキュリティで保護します。 IPSec を使用して、Web サーバーとデータベース サーバーの間で送信される機密データをセキュリティで保護します。

結果

このシナリオの推奨セキュリティ構成を図 7.2 に示します。

図 7.2 ASP.NET - SQL Server インターネット シナリオの推奨セキュリティ構成

セキュリティ構成の設定

作業を始める前に、以下のドキュメントを参照してください。

Web サーバーの構成

IIS の構成
手順 詳細情報
Web アプリケーションの仮想ルート ディレクトリで匿名アクセスを有効にします。 IIS 認証を使用するには、IIS MMC スナップインを使用します。アプリケーションの仮想ディレクトリを右クリックして [プロパティ] を選択します。
[ディレクトリ セキュリティ] タブをクリックし、[匿名アクセスおよび認証コントロール] の [編集] をクリックします。
ASP.NET の構成
手順 詳細情報
ASPNET アカウント (ASP.NET を実行するために使用するアカウント) のパスワードを既知の方法による強力なパスワードに変更します。 これにより、同じユーザー名とパスワードを持つ複製されたローカル アカウントをデータベース サーバーに作成できます。この作業が必要なのは、ASPNET アカウントが Windows 認証を使用して接続するときに、データベース サーバーからのネットワーク認証チャレンジに応答できるようにするためです。

もう 1 つの方法として、最低限の特権を持つドメイン アカウントを使用することもできます (ファイアウォールを通過する Windows 認証が可能な場合)。
詳細については、「第 8 章 ASP.NET セキュリティ」の「ASP.NET のプロセス ID」を参照してください。

%windir%\Microsoft.NET\Framework\v1.0.3705\CONFIG にある Machine.config を開きます。

<!-- userName="machine" password="AutoGenerate" -->

変更後

<!-- userName="machine" 
     password="YourStrongPassword" -->
ASP.NET Web アプリケーションをフォーム認証として構成します (SSL を使用)。 アプリケーションの仮想ディレクトリ ルートにある Web.config を開きます。
<authentication mode="Forms" >
  <forms name="MyAppFormsAuth" 
         loginUrl="login.aspx" 
         protection="All"
         timeout="20" 
         path="/" >
  </forms>
</authentication>

SQL Server に対するフォーム認証の詳細については、このガイドの「パート IV : 参照」の「SQL Server 2000 でフォーム認証を使用する方法」を参照してください。

SQL Server の構成

手順 詳細情報
SQL Server コンピュータ上に、ASP.NET プロセス アカウントと一致する Windows アカウントを作成します。 ユーザー名とパスワードは、カスタム ASP.NET アプリケーション アカウントと一致しているか、規定のアカウントを使用する場合は ASPNET であることが必要です。
SQL Server を Windows 認証として構成します。  
カスタム ASP.NET アプリケーション アカウントの SQL Server ログインを作成します。 これにより、SQL Server へのアクセス権を付与します。
新しいデータベース ユーザーを作成し、そのユーザーにログイン名をマップします。 これにより、指定したデータベースへのアクセス権を付与します。
データベース内に新しいユーザー定義のデータベース ロールを作成し、そのロールにデータベース ユーザーを割り当てます。  
このデータベース ロールのデータベース アクセス許可を設定します。 最低限のアクセス許可を割り当てます。
詳細については、「第 12 章 データ アクセス セキュリティ」を参照してください。

セキュリティで保護された通信の構成

手順 詳細情報
Web サイトを SSL に対応するように構成します。 このガイドの「パート IV : 参照」の「Web サーバー上で SSL を設定する方法」を参照してください。
アプリケーション サーバーとデータベース サーバーの間に IPSec を構成します。 このガイドの「パート IV : 参照」の「2 つのサーバー間の通信を IPSec で保護する方法」を参照してください。

分析

  • このシナリオでは、ユーザーが Windows アカウントを持っていないため、フォーム認証が最適です。ユーザーの資格情報はフォーム ログイン ページで取得します。アプリケーション コードで資格情報の検証を実行する必要があります。データ ストアは、どのような種類のものでも使用できます。最も一般的なソリューションでは SQL Server データベースを使用しますが、Active Directory を資格情報ストアとして使用することも可能です。

  • フォーム認証では、最初のログオンで入力される資格情報を SSL で保護する必要があります。フォーム認証チケットも保護する必要があります。このチケットは最初のログオン以降に認証済みクライアントが発行する Web 要求で Cookie として渡されます。フォーム認証チケットを保護するには、すべてのページで SSL を使用する方法があります。また、<forms> 要素の protection 属性を All または Encrypt に設定し、FormsAuthentication クラスの Encrypt メソッドを使用して、フォーム認証チケットを暗号化することもできます。

    protection 属性を "All" に設定すると、アプリケーションが FormsAuthentication.Encrypt を呼び出したときに、チケットが整合性チェックを受け、暗号化されます。このメソッドは、認証チケットを作成するときに呼び出します。一般には、このメソッドをアプリケーションのログイン ボタン イベント ハンドラに挿入します。

    string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
    

    フォーム認証とチケットの暗号化の詳細については、「第 8 章 ASP.NET セキュリティ」を参照してください。

  • ASP.NET は最低限の特権を持つローカル ASPNET アカウントとして稼働するため、不正アクセスによる潜在的な損害は緩和されます。

  • Web サーバーで URL 認定を使用した場合、認証されていないユーザーは、制限のない Web ページは表示できますが、制限されたページを表示しようとすると、認証を要求されます。

  • 偽装が有効になっていないので、Web ベースのアプリケーションが実行するローカルまたはリモートのリソース アクセスでは、ASPNET アカウント セキュリティ コンテキストが使用されます。これに合わせてセキュリティで保護されたリソースの Windows ACL を設定する必要があります。

  • ユーザーの資格情報はカスタム SQL Server データベースとの照合によって検証されます。データベースには salt 値を適用したパスワード ハッシュが保存されます。詳細については、「第 12 章 データ アクセス セキュリティ」の「データベースとの照合によるユーザー認証」を参照してください。

  • SQL Server への接続に Windows 認証を使用することによって、資格情報は Web サーバー上のファイルに保存されず、ネットワーク上で転送されることもありません。

  • 現在、アプリケーションで SQL 認証を使用している場合には、接続文字列にユーザー名とパスワードが含まれているため、データベース接続文字列を保存するときにセキュリティで保護する必要があります。DPAPI の使用を検討してください。詳細については、「第 12 章 データ アクセス セキュリティ」の「データベース接続文字列をセキュリティで保護して保存する」を参照してください。

  • データベース サーバー上の複製された Windows アカウント (ASPNET プロセス アカウントと一致するアカウント) を使用すると、管理の負担が増加します。1 つのコンピュータでパスワードが変更されると、すべてのコンピュータでアカウントの同期と更新を行う必要があります。シナリオによっては、最低限の特権を持つドメイン アカウントを使用して管理を容易にすることができます。

  • Web サーバーとデータベース サーバーの間に IPSec を使用すると、データベースとの間で転送されるデータのプライバシーが保証されます。

  • ブラウザと Web サーバーの間に SSL を使用すると、資格情報に加え、クレジット カード番号などの機密データも保護されます。

  • Web ファームを使用する場合は、フォーム認証チケットの暗号化などで使用する暗号化キー (Machine.config の <machineKey> 要素で指定) がファーム内のすべてのサーバーにおいて一貫性が保たれるようにする必要があります。Web ファームで ASP.NET を使用する方法の詳細については、「第 8 章 ASP.NET セキュリティ」を参照してください。

注意点

このシナリオのアプリケーションでは、監査上の必要から、最初の呼び出し元の ID をデータベースまでフローする必要があります。呼び出し元の ID は、ストアド プロシージャのパラメータを使用して渡すことができます。

関連シナリオ

Active Directory との照合によるフォーム認証

フォーム ログイン ページで受け取ったユーザー資格情報を認証するには、さまざまなデータ ストアを使用できます。SQL Server データベースの代わりに Active Directory を使用することも可能です。

詳細情報

詳細については、このガイドの「パート IV : 参照」の「Active Directory でフォーム認証を使用する方法」を参照してください。

.NET ロールによる認定

上のシナリオでは、さまざまな種類のユーザーがアプリケーションにアクセスすることを考慮に入れていません。たとえば、ポータル サーバーであれば、標準、プレミア、法人などの会員レベルを設定することもあります。

ユーザー ストア (SQL Server データベース) にロール情報を保存する場合は、アプリケーション側でロール情報と身元情報を保存する GenericPrincipal オブジェクトを作成できます。GenericPrincipal オブジェクトを作成し、Web 要求コンテキストに追加 (HttpContext.User を使用) した後で、メソッド コードにプログラムでのロール チェックを追加したり、メソッドおよびページを PrincipalPermission 属性で修飾してロール メンバシップを要求できます。

詳細情報

Web サーバーでドメイン匿名アカウントを使用する

このシナリオの変形として、既定の匿名インターネット ユーザー アカウント (IUSR_MACHINE と呼ばれるローカル アカウント) をドメイン アカウントで置き換えます。ドメイン アカウントには、アプリケーションを実行するために必要な最低限の特権を割り当てます (最初は何も割り当てず、段階的に特権を与えていくこともできます)。Web ベースのアプリケーションが複数ある場合は、それぞれのアプリケーション、または仮想ディレクトリごとに異なるドメイン アカウントを使用できます。

匿名ドメイン アカウントのセキュリティ コンテキストを IIS から ASP.NET にフローするには、web.config ファイルで次のように設定し、Web ベースのアプリケーションの偽装を有効にします。

<identity impersonate="true" />

Web ベースのアプリケーションが、データベースなどのリモート リソースと通信する場合、ドメイン アカウントには、そのリソースにアクセスするために必要なアクセス許可を付与することが必要です。たとえば、アプリケーションがリモート ファイル システムにアクセスする場合は、ドメイン アカウントが最低でも読み取りアクセス権を取得できるように ACL を構成する必要があります。アプリケーションが SQL Server データベースにアクセスする場合は、SQL ログインを使用して、ドメイン アカウントをデータベース ログインにマップします。

アプリケーションからフローされるセキュリティ コンテキストは匿名アカウントのものであるため、フォーム認証によって取得される最初の呼び出し元の ID をメソッドやストアド プロシージャのパラメータなどの手段によってアプリケーション レベルで層を越えて渡す必要があります。

詳細情報

  • このアプローチの詳細については、「第 8 章 ASP.NET セキュリティ」の「匿名のインターネット ユーザー アカウントの使用方法」を参照してください。
  • このシナリオを実装する場合は、まず Microsoft サポート技術情報の Knowledge Base の文書 259353「[IIS] パスワードの同期を設定すると手動でパスワードを入力しなければならない」を参照してください。

ASP.NET - リモート Enterprise Services - SQL Server

このシナリオでは、ASP.NET ページを実行する Web サーバーが、リモート アプリケーション サーバーで稼働するサービス コンポーネントとの間にセキュリティで保護された接続を確立し、またリモート アプリケーション サーバーは SQL Server データベースに接続します。多くのインターネット アプリケーション インフラストラクチャがそうであるように、このシナリオの Web サーバー (境界ネットワーク内に配置) とアプリケーション サーバーもファイアウォールで分離されています。サービス コンポーネントは、SQL Server との間にセキュリティで保護された接続を確立します。

例として、ユーザーに機密データ (個人の会計明細など) を提供するインターネット バンキング アプリケーションについて考えてみます。顧客からデータベースに送信される取引データをセキュリティで保護する必要があり、データの整合性を維持することが非常に重要となります。ユーザーとの間で発生するトラフィックだけでなく、データベースにアクセスするトラフィックも、セキュリティで保護する必要があります。このシナリオを図 7.3 に示します。

図 7.3 ASP.NET - リモート Enterprise Services - SQL Server インターネット シナリオ

特徴

  • ユーザーはさまざまな種類の Web ブラウザを使用します。
  • 匿名ユーザーがアプリケーションの制限されていないページにアクセスできます。
  • ユーザーが制限されたページを表示するためには、ユーザー登録またはログオン (HTML フォームを使用) が必要です。
  • Web ベースのフロントエンド アプリケーションは境界ネットワーク内に配置され、ファイアウォールによってインターネットと社内ネットワーク (およびアプリケーション サーバー) と分離されます。
  • アプリケーションには、強力なセキュリティ、高度のスケーラビリティ、および詳細な監査が必要です。
  • Web ベースのアプリケーションは、SOAP を使用して Web サービス層に接続します。この層は、アプリケーション サーバーの Enterprise Services アプリケーション内で動作するサービス コンポーネントとのインターフェイスとして機能します。DCOM より SOAP の方が望ましいのは、ファイアウォールの制限があるためです。
  • SQL Server は、認定プロセスで単一のユーザー定義データベース ロールを使用します。
  • データは機密性が高く、ネットワーク上および永続的なデータ ストア内では、データの整合性とプライバシーをセキュリティで保護する必要があります。
  • Enterprise Services (COM+) トランザクションを使用して、データの整合性を確保します。

このシナリオのセキュリティ対策

このシナリオでは、Web サービスがフォーム ログイン ページから資格情報を受け取り、SQL Server データベースとの照合によって呼び出し元を認証します。ログイン ページでは、SSL を使用して、インターネット上で送信されるユーザーの資格情報を保護します。

Web ベースのアプリケーションは、サービス コンポーネントに実装されたビジネス サービスとのインターフェイスとなる Web サービスに接続します。Web サービスは、境界ネットワーク内に配置される Web ベースのアプリケーションを信頼し、ASP.NET プロセス ID を認証します。ユーザーの ID は、メソッドとストアド プロシージャのパラメータを使用して、すべての層を経由してアプリケーション レベルで転送します。この情報は、層を越えて実行されるユーザーの操作を監査するために使用します。

表 7.2 セキュリティ対策

分類 詳細
認証 Web サーバーで強力な認証を実行します。 Enterprise Services アプリケーション ID はデータベース側で認証します。 IIS で匿名アクセスが有効になるように構成し、Web ベースのアプリケーションでは (SQL Server データベースとの照合により) フォーム認証によってユーザーを認証します 。 Web サービスの仮想ディレクトリでは、統合 Windows 認証として構成します。Web サービスは Web ベースのアプリケーションのプロセス ID を認証します。 データベースへの接続には Windows 認証を使用します。データベースは、Enterprise Services アプリケーションの実行に使用される、最低限の特権を持つアカウントを認証します。
認定 信頼されたサブシステム モデルを使用し、ユーザー単位の認証は Web アプリケーション内でのみ実行します。 Web サーバー上のページへのユーザー アクセスは、URL 認証によって制御します。 ASP.NET プロセス アカウントを認定し、Web サーバー上のシステム リソースへのアクセスを許可します。リソースは ACL によって保護します。 データベース内のアクセス許可は、ユーザー定義のロールによって制御します。Enterprise Services アプリケーション ID は、このロールのメンバです。 Enterprise Services プロセス アカウントを認定し、アプリケーション サーバー上のシステム リソースへのアクセスを許可します。リソースは ACL によって保護します。
セキュリティで保護された通信 ユーザーと Web ベースのアプリケーションとの間で送信される機密データは、SSL によって保護します。 Web サーバーと Web サービスとの間で送信される機密データは、SSL によって保護します。 サービス コンポーネントとデータベースとの間で送信される機密データは、IPSec によって保護します。

結果

このシナリオの推奨セキュリティ構成を図 7.4 に示します。

図 7.4 ASP.NET - リモート Enterprise Services - SQL Server インターネット シナリオの推奨セキュリティ構成

セキュリティ構成の設定

作業を始める前に、以下のドキュメントを参照してください。

Web サーバーの構成

IIS の構成
手順 詳細情報
Web ベースのアプリケーションの仮想ルート ディレクトリで匿名アクセスを有効にします。  
ASP.NET の構成
手順 詳細情報
ASPNET アカウント (ASP.NET を実行するために使用するアカウント) のパスワードを既知の方法による強力なパスワードに変更します。 これにより、同じユーザー名とパスワードを持つ複製されたローカル アカウントをアプリケーション サーバーに作成できます。この作業が必要なのは、ASPNET アカウントがアプリケーション サーバーからのネットワーク認証チャレンジに応答できるようにするためです。

もう 1 つの方法として、最低限の特権を持つドメイン アカウントを使用することもできます (ファイアウォールを通過する Windows 認証が可能な場合)。

詳細については、「第 8 章 ASP.NET セキュリティ」の「ASP.NET のプロセス ID」を参照してください。

%windir%\Microsoft.NET\Framework\v1.0.3705\CONFIG にある Machine.config を開きます。

<!-- userName="machine" password="AutoGenerate" -->

変更後

``` ```
Web ベースのアプリケーションをフォーム認証として構成します (SSL を使用)。 アプリケーションの仮想ディレクトリ ルートにある Web.config を開きます。
<authentication mode="Forms" >
  <forms name="MyAppFormsAuth" 
         loginUrl="login.aspx" 
         protection="All"
         timeout="20" 
         path="/" >
  </forms>
</authentication>

SQL Server に対するフォーム認証の詳細については、このガイドの「パート IV : 参照」の「SQL Server 2000 でフォーム認証を使用する方法」を参照してください。

アプリケーション サーバーの構成

IIS の構成
手順 詳細情報
匿名アクセスを無効にします。  
Windows 統合認証を有効にします。 Web サーバーに配置された Web ベースのアプリケーションから渡された ASP.NET プロセス ID を IIS で認証します。
ASP.NET の構成
手順 詳細情報
Windows 認証を使用します。 Web サービスの仮想ディレクトリ ルートにある Web.config を開きます。
<authentication mode="Windows" />
Enterprise Services の構成
手順 詳細情報
Enterprise Services サーバー アプリケーションを実行するためのアカウントとして、最低限の特権を持つカスタム アカウントを作成します。 メモ ローカル アカウントを使用する場合は、データベース サーバー コンピュータに複製アカウントも作成する必要があります。
このカスタム アカウントを使用するように Enterprise Services アプリケーションを構成します。 「第 9 章 Enterprise Services セキュリティ」の「セキュリティの構成」を参照してください。
ロール ベースのアクセス チェックを有効にします。 「第 9 章 Enterprise Services セキュリティ」の「セキュリティの構成」を参照してください。
アプリケーションに 1 つの Enterprise Services (COM+) ロール (Trusted Web Service など) を追加します。 Web ベースのアプリケーションで完全なエンド ユーザー認証を実行します。Web サービス (およびサービス コンポーネント) だけが Trusted Web Service ロールのメンバへのアクセスを許可されます。
Trusted Web Service ロールにローカル ASPNET アカウントを追加します。 「第 9 章 Enterprise Services セキュリティ」の「セキュリティの構成」を参照してください。

SQL Server の構成

手順 詳細情報
SQL Server コンピュータ上に、Enterprise Services アプリケーション アカウントと一致する Windows アカウントを作成します。 ユーザー名とパスワードは、カスタム Enterprise Services アカウントと同じである必要があります。
SQL Server を Windows 認証として構成します。  
カスタム Enterprise Services アカウントの SQL Server ログインを作成します。 これにより、SQL Server へのアクセス権を付与します。
新しいデータベース ユーザーを作成し、そのユーザーにログイン名をマップします。 これにより、指定したデータベースへのアクセス権を付与します。
新しいユーザー定義のデータベース ロールを作成し、そのロールにデータベース ユーザーを追加します。  
このデータベース ロールのデータベース アクセス許可を設定します。 最低限のアクセス許可を割り当てます。
詳細については、「第 12 章 データ アクセス セキュリティ」を参照してください。

セキュリティで保護された通信の構成

手順 詳細情報
Web サイトを SSL に対応するように構成します。 このガイドの「パート IV : 参照」の「Web サーバー上で SSL を設定する方法」を参照してください。
Web サーバーとアプリケーション サーバーの間に SSL を構成します。 このガイドの「パート IV : 参照」の「SSL を使用して Web サービスを呼び出す方法」を参照してください。
アプリケーション サーバーとデータベース サーバーの間に IPSec を構成します。 このガイドの「パート IV : 参照」の「2 つのサーバー間の通信を IPSec で保護する方法」を参照してください。

分析

  • このシナリオでは、ユーザーが Windows アカウントを持っていないため、フォーム認証が最適です。ユーザーの資格情報はフォーム ログイン ページで取得します。アプリケーション コードで資格情報の検証を実行する必要があります。データ ストアは、どのような種類のものでも使用できます。最も一般的なソリューションでは SQL Server データベースを使用しますが、Active Directory を資格情報ストアとして使用することも可能です。

  • Web ベースのアプリケーションは最低限の特権を持つローカル ASPNET アカウントとして稼働するので、不正アクセスによる潜在的な損害は緩和されます。

  • Web サーバーで URL 認定を使用した場合、認証されていないユーザーは、制限のない Web ページは表示できますが、制限されたページを表示しようとすると、認証を要求されます。

  • 偽装が有効になっていないので、Web ベースのアプリケーションが実行するローカルまたはリモートのリソース アクセスでは、ASPNET アカウント セキュリティ コンテキストが使用されます。それに応じて ACL を構成する必要があります。

  • ユーザーの資格情報はカスタム SQL Server データベースとの照合によって検証されます。データベースには salt 値を適用したパスワード ハッシュが保存されます。詳細については、「第 12 章 データ アクセス セキュリティ」の「データベースとの照合によるユーザー認証」を参照してください。

  • SQL Server への接続に Windows 認証を使用すると、資格情報はアプリケーション サーバー上のファイルに保存されず、ネットワーク上で転送されることもありません。

  • データベース サーバー上の複製された Windows アカウント (Enterprise Services プロセス アカウントと一致するアカウント) を使用すると、管理の負担が増加します。1 つのコンピュータでパスワードが変更されると、すべてのコンピュータでアカウントの同期と更新を行う必要があります。シナリオによっては、最低限の特権を持つドメイン アカウントを使用して管理を容易にすることができます。

  • Web アプリケーションは Web サービスを呼び出すときに、DefaultCredentials (つまり、ASP.NET プロセス アカウントである ASPNET) を使用して Web サービス プロキシを構成する必要があります。

    proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
    

    詳細については、「第 10 章 Web サービス セキュリティ」の「認証用の資格情報を Web サービスに渡す」を参照してください。

  • Web サーバーとアプリケーション サーバーに配置されたサービス コンポーネントの前に位置する Web サービス層の間に構成された SSL は、2 つのサーバー間で送信されるデータのプライバシーを保証します。

  • Enterprise Services アプリケーションは、アプリケーション レベルのロール ベース セキュリティとして構成されます。この構成によって、Web サービスを実行するために使用されるローカル ASPNET アカウントだけがサービス コンポーネントにアクセスできます。

  • アプリケーション サーバーとデータベース サーバーの間に構成した IPSec は、データベースとの間で送信されるデータのプライバシーを保証します。

  • ブラウザと Web サーバーの間に構成した SSL は、資格情報と銀行口座の明細を保護します。

注意点

このシナリオのアプリケーションでは、監査上の必要から、最初の呼び出し元の ID をデータベースまでフローする必要があります。呼び出し元の ID は、ストアド プロシージャのパラメータを使用して渡すことができます。

関連シナリオ

Active Directory との照合によるフォーム認証

フォーム ログイン ページで受け取ったユーザー資格情報を認証するには、さまざまなデータ ストアを使用できます。SQL Server データベースの代わりに Active Directory を使用することも可能です。

詳細情報

詳細については、このガイドの「パート IV : 参照」の「Active Directory でフォーム認証を使用する方法」を参照してください。

DCOM の使用

Windows 2000 (SP3 または QFE 18.1 を適用した SP2) または Windows Server 2003 では、静的エンドポイントを使用するように Enterprise Services アプリケーションを構成できます。クライアントとサーバーをファイアウォールで分離している場合は、ファイアウォールで開く必要があるポートは 2 つだけです。具体的には、RPC 用のポート 135 と Enterprise Services アプリケーション用のポートとなります。

この DCOM の機能強化によって、Web サーバーとアプリケーション サーバー間の通信プロトコルとして DCOM を使用できるようになり、Web サービス層を配置する必要がなくなりました。

重要 Web サーバーとアプリケーション サーバーの間で分散トランザクションをフローさせる必要がある場合は、必ず DCOM を使用してください。トランザクションは、SOAP ではフローできません。SOAP を使用する場合は、トランザクションをアプリケーション サーバー上のサービス コンポーネントによって開始する必要があります。

詳細情報

詳細については、「第 9 章 Enterprise Services セキュリティ」を参照してください。

.NET リモート処理の使用

トランザクション、キュー コンポーネント、オブジェクト プールなどの Enterprise Services が提供するサービスを必要としない場合は、リモート処理を選択できます。.NET リモート処理ソリューションは、中間層におけるネットワーク負荷分散もサポートします。.NET リモート処理を使用する場合は、以下の点に留意してください。

最大のパフォーマンスを引き出すために、Windows サービスで TCP チャネルおよびホストを使用します。このチャネルは、既定では認証および認定機能を提供しません。TCP チャネルは信頼されたサブシステム シナリオでの使用を前提としています。IPSec ポリシーを使用して、セキュリティで保護されたチャネルを確立し、Web サーバーだけがアプリケーション サーバーと通信するように設定することができます。

IPrincipal オブジェクトを使用した認証および認定のチェックが必要な場合は、リモート オブジェクトを ASP.NET でホストし、HTTP チャネルを使用します。これによって、IIS と ASP.NET のセキュリティ機能を使用できます。

リモート オブジェクトは Windows 認証を使用してデータベースに接続し、ホスト プロセス ID (ASP.NET または Windows サービス ID) を使用できます。

詳細情報

.NET リモート処理のセキュリティの詳細については、「第 11 章 .NET リモート処理のセキュリティ」を参照してください。

まとめ

この章では、一般的なインターネット アプリケーション シナリオをセキュリティで保護する方法について説明しました。

イントラネット アプリケーションおよびエクストラネット アプリケーションのシナリオについては、「第 5 章 イントラネット セキュリティ」と「第 6 章 エクストラネット セキュリティ」を参照してください。

patterns and practices home