Azure Application GatewayのWAFを使ってWeb Appsに接続する

#はじめに

2019年4月末にAzure App ServiceのVNET Service EndpointがPublic Previewになりましたね。

[Azure App Service の VNET Service Endpoint がプレビューに](https://blog.shibayan.jp/entry/20190501/1556673288)

我らがしばやんがいち早く試してくれたので、私も真似しましたｗ

Azure Application GatewayはWAFを有効にできるため、Application GatewayとWeb Appsを組み合わせてWAF経由でのみWebサイトにアクセスする構成を作って試しました。

[Azure Application Gateway](https://docs.microsoft.com/ja-jp/azure/application-gateway/overview?WT.mc_id=AZ-MVP-5002499)

#導入までの流れ

##Web Apps側の準備

今回は試用ですが、それなりにコンテンツ入りのものが有ったほうが良いので、Azure Web Apps上にWordpressを導入しています。

まずはWeb Apps単独でWordpressがカスタムドメインでアクセス可能なように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/650bf928-1931-c8f5-6ee8-00c8a6b2ec3d.png)


私はnya-n.netのドメインを保持しており、Azure DNSで管理しているのですが、まずはWeb Appsのカスタムドメインとしてappgw.nya-n.netを追加します。
Azure DNSにてwwwのCNAMEとしてktkrappgw.azurewebsites.netをマップしてまずは承認させます。

WordpressをWeb Appsに導入する方法としては、以下の私の別コンテンツも参照下さい。

[App ServiceとAzure Database for MySQLで簡単Wordpressサイト構築](https://qiita.com/yotan/items/b34fdf901df62193805c)

とりあえずWeb Appsへ直にhttpsでWordpressサイトにアクセスさせます。
無論証明書エラーが出ている状態。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/69475e52-07d0-f16d-9f8f-f07c24535e37.png)

##Application Gatewayの作成

今回はApplication Gateway WAF V2で作成します。
ポータル画面ではまだプレビュー表示ですが、しっかり2019/4末にGAしているのでご安心を。

[Azure Application Gateway Standard v2 and WAF v2 SKUs generally available](https://azure.microsoft.com/en-us/updates/azure-application-gateway-standardv2-wafv2-skus-generally-available/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/aab6005e-16ce-fc6e-5530-524fb6a1cbc7.png)

今回はApplication Gatewayもカスタムドメインによるhttps接続を行わせるので、SSL証明書もデプロイ時に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/064544b5-d556-9bdc-21bc-1b7a1243d755.png)

無事できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/f828fa23-2a1f-99e7-b40d-39782f75c26e.png)

Application Gatewayに割り振られたPublic IP AddressをDNSのAレコードとして登録します。(先に作成したCNAMEレコードは削除する)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/63020537-bc09-a1f1-f0d1-af18b9beb493.png)


#Application Gatewayの設定

バックエンドプールにWordpressを入れたWeb Appsを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/f03ff8cb-3423-621d-4880-178dd23cf485.png)

HTTP設定で、バックエンドのWeb Appsの設定をします。
デフォルトの設定のままだと、Web AppsからオリジナルのURL(example.azurewebsites.net)が返ってしまうため、少し設定をします。

詳しくはこちら。

[Application Gateway と App Service のトラブルシューティング](https://docs.microsoft.com/ja-jp/azure/application-gateway/troubleshoot-app-service-redirection-app-service-url?WT.mc_id=AZ-MVP-5002499)

「バックエンドアドレスからホスト名を選択します」のチェックを外して、「ホスト名の上書き」にカスタムドメイン名を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/a644f964-1529-0cc9-1d21-94fccf2edbc6.png)

これで、Application Gateway(WAF)経由でWeb Appsにアクセスできるようになりました。
ちゃんとSSL証明書も有効になっていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/13a67829-0091-aad6-44e5-d511346ad422.png)

#Web AppsのVNET Service Endpointを有効にする

最後にWeb AppsのVNET Service Endpointを有効にして、Web AppsにApplication Gateway以外から接続させないようにします。

Web Appsのネットワークメニューから「アクセス制限」を選択して、Application Gatewayのあるサブネットを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/9f6d13a0-864e-6717-8a7b-87721b862018.png)

以下の感じに設定されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/bdb0507d-6317-12bb-ba2d-c9584e316d1b.png)

VNET側のサブネットの情報でも、今までミステリアスだった「Microsoft.Web」が追加されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/3c2f1c2e-ee13-f6b5-39f3-4851c2648f81.png)

この状態でWeb Appsの元のURLでアクセスすると、以下の403エラーが出てコンテンツが表示出来ないことが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/ab91f1e2-95c0-897e-74fb-bfee18b01bdf.png)


ちゃんとカスタムドメインでアクセスすると、Application Gatewayを経由してサイトが表示されましたね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/78488fa2-32c0-3125-472d-afc5c5612432.png)

#おわりに

特にApplication GatewayのWAF機能について細かい設定は紹介しませんでしたが、Web Appsのサービスエンドポイント機能がPublic Previewですが出てきたお蔭で、より安全に特定のVNET(Subnet)からのみアクセスできるようになりました。