コンサルティング & テクノロジー部 の Azureチームの 開發です。
先月、部の定例時にApplicationGatewayのMSドキュメントのFAQを確認していると・・
6月に見た時には「現時点では、Azure Web Apps はサポートされていません。」と記載されていたのが
「Azure Web Apps などのマルチテナント バックエンドで構成できます。」ってなってるやん・・!
これは、WebApps で WAF(Application Gateway)が使えるようになった事を意味しています。
記載ミスじゃないよね?っと思い、AzurePowerShellのUpdate情報を調べたことろ
Azure PowerShell v4.2.0 リリースから Azure Application Gateway が Azure Web Apps のサポートが追加されていました!
こういう需要の多かったであろうものは、もっと大きく扱ってほしいものですねー。
今まで Application Gatewayのバックエンドプールとして
ですので、Azure Web AppsでWAFを構築する場合、下記の2点のどちらかの方法になっていたかと思います。
では早速、既存のWEBアプリケーションの環境(WebApps)にWAFを追加してみましょう。
既存環境(WebApps作成済)にWAFを追加してみる
今までもそうですが、今現在も AzurePortalからではApplicationGatewayのバックエンドプールに[IPアドレスまたはFQDN]でWebAppsを設定しただけでは接続できません。
現時点では、ポータルからApplicationGatewayからWebAppsへの接続する為の設定ができないので、
可能な部分はポータルを使って作成し、ポータルで設定できない部分をPowerShellで設定していきます。
1.Azure Application Gateway(VNet & Subnet & PublicIP) の作成
Azure Application Gateway を作成する際に、仮想ネットワーク(VNet)とゲートウェイサブネットとPublicIPが必要になりますが、Appication Gatewayと同時に作成可能ですので、今回は一緒に作成していきます。
左メニューの一番下の その他のサービス>カテゴリ:ネットワーク>アプリケーションゲートウェイ を選択し「+追加」ボタンを押します。
●1-1.基本設定
レベルやサイズなど基本的な設定をしていきます。
レベル:WAF (今回、アプリケーションファイアウォールとして設定するのでWAFを選ぶ)
SKUサイズ:M(WAFの場合は、MまたはLを選ぶことが可能)
インスタンス:2(検証環境の場合は1でも良い。ただし、SLA保障は2以上必要)
サブスクリプション:接続したいWebAppsと同じ
リソースグループ:接続したいWebAppsと同じリソースグループでもOK
場所:接続したいWebAppsと同じ
●1-2.設定
仮想ネットワークの選択 > +新規作成 > 仮想ネットワークの作成(一緒にサブネットも作成されます)
例)
仮想ネットワーク:10.0.0.0/16
subnet:10.0.0.0/24
次に、フロントエンドIPの構成です。
IPアドレスの種類はパブリックにし、パブリックIPを作成します。
パブリックIPアドレスの選択 > +新規作成 > パブリックIPアドレスの作成
最後に、リスナー構成とWebアプリケーションファイアウォールの設定です。
プロトコル:HTTP
ポート:80
※HTTPSにする場合は、証明書のアップロードが必要になります。
ファイアーウォールの状態:有効
ファイアーフォールのモード:防止
※検出ログを出す場合は、作成後に[ログ診断]から設定出来ます。
●1-3.作成と確認
内容に間違いがなければOKボタンを押して作成します。
VNetなども一緒に作成しているので、完了するまで15分ほどかかります。
作成したApplication Gateway の概要から
●1-4.Azure Powe Shell でApplication Gateway を WebAppsを接続可能にする
下記のPowerShellにサブスクリプション名、リソースグループ名、Gateway名、WebAppsのFQDNを入れてを実行します。
アップデートの方法として、AzurePowerShellのコマンド「Update-Module AzureRM」でアップデートするか、
Windows8以上であれば、Windowsの左下の検索から「webp」を入れると「Microsoft Web Platform Installer」が出てくるので、そこから簡単にアップデートする事が可能です。)
#1.Azureへのログイン
Login-AzureRmAccount
#2.サブスクリプションの選択
Select-AzureRmSubscription -SubscriptionName "<サブスクリプション名>"
#3.リソースグループ
$rg = Get-AzureRmResourceGroup -Name "<リソースグループ名>"
#5.アプリケーションゲートウェイ名
$gw = Get-AzureRmApplicationGateway -Name "<アプリケーションゲートウェイ名>" -ResourceGroupName $rg.ResourceGroupName
#6.Web Apps のFQDN
$webappFQDN = "<WebAppsのFQDN /i.e. mywebsite.azurewebsites.net>"
#7.プローブの正常判断
$match = New-AzureRmApplicationGatewayProbeHealthResponseMatch -StatusCode 200-399
#8.プローブ設定 -PickHostNameFromBackendHttpSettings のスイッチでWebAppsとの接続可能になる
Add-AzureRmApplicationGatewayProbeConfig -name webappprobe -ApplicationGateway $gw -Protocol Http -Path / -Interval 30 -Timeout 120 -UnhealthyThreshold 3 -PickHostNameFromBackendHttpSettings -Match $match
$probe = Get-AzureRmApplicationGatewayProbeConfig -name webappprobe -ApplicationGateway $gw
#9.バックエンドHTTP設定 -PickHostNameFromBackendAddress のスイッチでWebAppsとの接続可能になる
Set-AzureRmApplicationGatewayBackendHttpSettings -Name appGatewayBackendHttpSettings -ApplicationGateway $gw -PickHostNameFromBackendAddress -Port 80 -Protocol http -CookieBasedAffinity Disabled -RequestTimeout 30 -Probe $probe
#10.ApplicationGatewayのバックエンドプール設定
Set-AzureRmApplicationGatewayBackendAddressPool -Name appGatewayBackendPool -ApplicationGateway $gw -BackendIPAddresses $webappFQDN
#11.ApplicationGatewayのUPDATE これを実行しないと上記がセットされない
Set-AzureRmApplicationGateway -ApplicationGateway $gw
8番と9番のコマンドにより、ApplicationGateway(WAF)とWebAppsをつないでいます。
ここは2分程度で作成されます。
(追記:「#8.プローブ設定 」にて、「Set-AzureRmApplicationGatewayProbeConfig」→「Add-AzureRmApplicationGatewayProbeConfig」に訂正しました)
WebAppsにアプリをデプロイ済みの場合、[バックエンド正常性]から確認ができます。
もちろん、ブラウザからApplicationGatewayのPublicIPやDNS名(xxxxxx-xxxx-xxxxxxx-xxxxxx.cloudapp.net)からアクセスして確認も可能です。
ApplicationGateway(WAF)を作成してWebAppsに接続できるまで、簡単に出来ちゃいましたね♪
2.WAFの動作確認
では、入力したTextをPOSTして画面に表示されるだけの、簡単な掲示板アプリをWebAppsにデプロイし、
Webサイトへの攻撃方法として代表的な、SQLインジェクション と クロスサイトスクリプト(XSS) となるTextをPOSTした際に、ちゃんとブロックするかどうかチェックしてみます。
SQLインジェクション
クロスサイトスクリプト
どちらも403のアクセス拒否のサーバーエラーとなりました。
ちゃんとブロックできているようです!
その他、WAFのルール設定は
WEBアプリケーション ファイアウォール > ルール設定・ルール詳細
から可能です。
まとめ
現在は、WebAppsへ接続する為のApplicationGatewayの設定は、ポータルから出来ずPowerShellのみになりますが、
PowerShellの内容を見る限り、[HTTP設定][正常性プローブ]にWebAppsへの接続可能にするスイッチが実装されれば、ポータルから作成可能になるのではないかと思います(予想)
対応すれば、PowerShellが苦手な人も作りやすくなりますね!
弊社ではAzureコンサルティングやセミナーなど行っております。
NextscapeのAzure -クラウド開発/導入/教育/コンサルティング
■Azure関連記事
Azure の OCR の日本語認識力徹底調査
予約インスタンス登場!!お安くなった Azure VM を使いこなそう!!
サービスエンドポイントを使ってStorageに外部接続制限をしてみた
...Azure関連記事一覧へ