Open棟梁Project - マイクロソフト系技術情報 Wiki * 目次 [#n093fddf] #contents *概要 [#n3bcb523] Apache/Tomcat構成と異なり、IIS/ASP.NETは不可分になり、~ デザインパターンの質問を受けることが何度かあったので纏めます。 *Web/APの分離 [#t89a3d1a] -ASP.NETのみのシステムで、WebサーバとAPサーバを分けることはあるか? -Apache/Tomcat構成と異なり、基本、IIS/ASP.NETは不可分です。~ ただし、レア・ケースになりますが、階層を追加することはあります。 *階層追加の理由 [#j0bc7f3d] -分けることがある場合、どのような理由でWebサーバとAPサーバを分けるか? -分割と言うより、階層の追加ですが、セキュリティ・レベルが向上するためです。 --Webサーバ上のセキュリティ・ホールを直接突かれないようにする。 --IIS/ASP.NET上にコードが載るので、それが漏れない様にする。 --など、など。 *分離&配置方法 [#u53ed825] -分けることがある場合、Webサーバ、APサーバへのアプリケーションの配置はどうなるか? -以下の2パターンが一般的です。 **箱モノ系 [#nac74a81] ARRやISAなどをフロントに立て、~ 問題のあるリクエストでは無いことを検証してから~ バックのWeb/APへ要流を流すというパターン。 -ISA Server 2004 パフォーマンスに関するヒント集~ http://technet.microsoft.com/ja-jp/library/cc302518.aspx >アプリケーション フィルタと Web フィルタ -URL 書き換えモジュールの使用~ http://technet.microsoft.com/ja-jp/library/dd939109.aspx --IIS 7.0 での要求のフィルタリングと URL の書き換え~ http://technet.microsoft.com/ja-jp/library/dd939073.aspx ---要求のフィルタリングと URL 書き換えの違い -ARR の主要な概念と機能~ http://technet.microsoft.com/ja-jp/library/ee683921.aspx --ARR は受信要求を検査し、HTTP ヘッダおよびサーバ変数に基づいてルーティングを決定する。 -アプリケーションの要求のルーティング~ http://technet.microsoft.com/ja-jp/library/ee683905.aspx --アプリケーションのユーザー インターフェイス (UI) ヘルプのルーティング要求~ http://technet.microsoft.com/ja-jp/library/dd443531.aspx ---アプリケーションの要求のルーティングのページ~ http://technet.microsoft.com/ja-jp/library/dd443533.aspx **ゲートキーパー・デザインパターン [#eaab229f] 上記(ARRやISA)では、HTTP Request Bodyを検査するのはできないようです。~ >というより、HTTP Request Bodyの検査と言うやり方だと、 --検査処理が難しく、 --処理の負荷が高くなり、 >防御し難くなると思います。 なので、一度、Web/APでリクエストを受けてから、要求を検査するのが一般的です。~ これは、ゲートキーパー・デザインパターンと呼ばれるデザインパターンです。 以下、ゲートキーパー・デザインパターンの説明。 ***配置方法 [#f00ac24c] 配置は以下の様になります。 -Web APIの場合(追加) --フロントのIIS/ASP.NET(検査層) --バックのIIS/ASP.NET(B層、D層) -Webアプリケーションの場合(分割) --フロントのIIS/ASP.NET(P層) --バックのIIS/ASP.NET(B層、D層) -それぞれ、 --フロントのIIS/ASP.NETは、GateKeeper --バックのIIS/ASP.NETは、KeyMaster >と呼び、KeyMasterをDMZの裏のバックエンドに引き込みます。 構成としてやや複雑で高級です。 ***通信方法 [#k7aad2f2] フロントのIIS/ASP.NETとバックのIIS/ASP.NETの通信方法。 -WebサービスやWCFのTCP/IPなどを使用します。~ Open棟梁では、[[通信制御機能>http://opentouryo.osscons.jp/index.php?%E9%80%9A%E4%BF%A1%E5%88%B6%E5%BE%A1%E6%A9%9F%E8%83%BD]]を持つので、それを使用しても良いかもしれません。 -他にもASP.NETから --COM+(DCOM) --.NET Remoting >を使用してDMZの裏のバックエンドのInternalポートに~ 引き込むパターンもありますが、こちらは主流ではありません。~ #.NET Remotingについては、WCFで置き換えられている。 --Enterprise Services (COM+) ---.NET における Enterprise Services (COM+) について~ http://msdn.microsoft.com/ja-jp/library/ms973847.aspx ---.NET で COM+ サービスを使用する~ http://msdn.microsoft.com/ja-jp/library/ms973809.aspx --.NET Remoting ---Microsoft .NET Remoting Framework の概要~ http://msdn.microsoft.com/ja-jp/library/ms973864.aspx ---.NET リモート処理から Windows Communication Foundation (WCF) へ~ http://msdn.microsoft.com/ja-jp/library/aa730857.aspx ---.NET Framework 3.0新技術の使い分け指針 - @IT~ http://www.atmarkit.co.jp/fdotnet/special/dotnetfx3002/dotnetfx3002_02.html -通信に、非同期のストレージ・キューを使用するパターンは、~ マルチキー・デザインパターンというパターンになります。 ***設計目標 [#c511a246] -GateKeeprは、リクエストを受けてから、要求を検査します。 -GateKeepr にDBMSの接続文字列やストレージキーを持たせず、~ DBや、ストレージへのアクセスは KeyMaster だけが行います。~ (ビジネス・ロジックなどもKeyMaster だけが持つようにする) -仮に GateKeeper への攻撃が成功しても、~ 低い権限しか奪取することができないようにします。