Open棟梁Project - マイクロソフト系技術情報 Wiki
目次 †
概要 †
Apache/Tomcat構成と異なり、IIS/ASP.NETは不可分になり、
デザインパターンの質問を受けることが何度かあったので纏めます。
Web/APの分離 †
- ASP.NETのみのシステムで、WebサーバとAPサーバを分けることはあるか?
- Apache/Tomcat構成と異なり、基本、IIS/ASP.NETは不可分です。
ただし、レア・ケースになりますが、階層を追加することはあります。
階層追加の理由 †
- 分けることがある場合、どのような理由でWebサーバとAPサーバを分けるか?
- 分割と言うより、階層の追加ですが、セキュリティ・レベルが向上するためです。
- Webサーバ上のセキュリティ・ホールを直接突かれないようにする。
- IIS/ASP.NET上にコードが載るので、それが漏れない様にする。
- など、など。
分離&配置方法 †
- 分けることがある場合、Webサーバ、APサーバへのアプリケーションの配置はどうなるか?
箱モノ系 †
ARRやISAなどをフロントに立て、
問題のあるリクエストでは無いことを検証してから
バックのWeb/APへ要流を流すというパターン。
ゲートキーパー・デザインパターン †
上記(ARRやISA)では、HTTP Request Bodyを検査するのはできないようです。
というより、HTTP Request Bodyの検査と言うやり方だと、
防御し難くなると思います。
なので、一度、Web/APでリクエストを受けてから、要求を検査するのが一般的です。
これは、ゲートキーパー・デザインパターンと呼ばれるデザインパターンです。
以下、ゲートキーパー・デザインパターンの説明。
配置方法 †
配置は以下の様になります。
- 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の裏のバックエンドに引き込みます。
構成としてやや複雑で高級です。
通信方法 †
フロントのIIS/ASP.NETとバックのIIS/ASP.NETの通信方法。
- 他にもASP.NETからCOM+(DCOM)や、.NET Remotingを使用してDMZの裏のバックエンドの
Internalポートに引き込むパターンもありますが、こちらは主流ではなくなってきている。
- 通信に、非同期のストレージ・キューを使用するパターンは、
マルチキー・デザインパターンというパターンになります。
設計目標 †
- GateKeepr?は、リクエストを受けてから、要求を検査します。
- GateKeepr? にDBMSの接続文字列やストレージキーを持たせず、
DBや、ストレージへのアクセスは KeyMaster? だけが行います。
(ビジネス・ロジックなどもKeyMaster? だけが持つようにする)
- 仮に GateKeeper? への攻撃が成功しても、
低い権限しか奪取することができないようにします。