Azure

Azure App Service Environmentのすすめ。

はじめに

App Service Environment は仮想ネットワーク内にApp Service を展開する方法です。
その種類は2つあります。

1、外部 ASE:外部からのアクセスも可能

2、ILB ASE(内部ロードバランサーを設置するためこの名前):外部からのアクセスが不可能

では、なぜ薦めるか?
1、マネージドサービス
2、スケーリング
3、負荷分散とSSLターミネーション
4、セキュリティ(WAF)
はApp Service+Application Gatewayでも実現できます。
しかし、下記のようにApplication Gatewayを回避することが可能です。WAF入れても回避されては意味がありません。
つまり、セキュリティの観点からも微妙になってしまいます。

ではどうするか?
そこで登場する機能がApp Service Environmentです。
上記のILB ASEはApplication Gatewayと組み合わせることで外部からのアクセスを制限しWAFの機能も追加できます。
外部ASEで作成してしまうと、外部からのアクセスを制限できないため、単に仮想ネットワーク内にApp Serviceが作成された構成になり意味を成しません。

ILB ASEを利用し負荷分散とSSLターミネーション、セキュリティ(WAF)を行うことができます。
また、マネージドサービスを利用することで運用が楽になると考えられます。

AWS Elastic BeanstalkをVPC内に展開するのと雰囲気は似ているかと思います。
VPC+Beanstalk+ALB+AWS WAF の構成だと思います。

ILB ASEは以下の手順で作成されます。
1、App Service Environmentの作成
2、App Service の作成
3、Application Gatewayの作成

App Service Environmentの作成

最初にApp Service Environmentの作成を行います。
要は、側を作成します。App Service を入れるための箱のようなものです。

[Create a resource]からWeb → App Service Environmentをクリックします。

必要項目を入力します。
Virtual Networkをクリックし、VIP TypeをInernal に変更します。
Domain にはApp Serviceで利用するドメインを入力します。

作成には1時間程度かかります。
しばし待ちます。

作成後、ILBに証明書を登録します。

*.your-root-domain-here and *.scm.your-root-domain-here のドメインを1つの証明書にまとて作成する必要があります。

自己証明書を利用する場合
$certificate = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname "*.internal-contoso.com","*.scm.internal-contoso.com"

$certThumbprint = "cert:\localMachine\my\" +$certificate.Thumbprint
$password = ConvertTo-SecureString -String "CHANGETHISPASSWORD" -Force -AsPlainText

$fileName = "exportedcert.pfx" 
Export-PfxCertificate -cert $certThumbprint -FilePath $fileName -Password $password
Let's Encryptを利用する場合

v2を利用すると作成できます。
下記のサイトではブラウザで簡単に作成できます。
FreeSSL.org
https://freessl.cn/
ドメインを「,」で区切り入力します。v2を選択します。

emailアドレスはを入力し作成します。

最初に、private keyが入力されます。
DNSにTXTレコードを設定し所有者を確認します。

登録確認が終わったらダウンロードします。

また、登録にはpfx形式である必要があります。

openssl pkcs12 -export -inkey private.pem -in full_chain.pem -out server.pfx
Enter Export Password:
Verifying - Enter Export Password:

パスワードが必要です
作成されたpfxを登録します。

登録されたことが確認できます。

以上で、App Service Environment の作成が完了です。
箱ができたので、次にApp Serviceをデプロイしていきます。

App Service の作成

通常の手順でWeb Appを作成しますが、サービスプランを最初に作成します。

サービスプランのLocationの選択に作成したASEが表示されます。

サービスプランを作成するとWeb Appのドメインが指定したものに変更されます。

OSおよびPublishはそれぞれ必要な環境にあったものを選択します。

以上で下記の構成が作成されました。

構成を確認するためには同VNET内にVMを作成してVNET内から確認する方法しかありません。
Virtual Machineを立ち上げます。ブラウザで確認するためWindows10を立ち上げます。
ただし、ASEを利用しているサブネット内に作成することができないため適当にサブネットを作成しVirtual Machineを立ち上げます。

立ち上がったVirtual Machineにログインします。
次にhostsファイルに下記のようにIPを設定します。

192.168.250.11 envdemo-webapp.shinagawa.cloud
192.168.250.11 envdemo-webapp.scm.shinagawa.cloud

IPはASEのInternal Load Balancer IP addressになります。

もしくは、App Serviceのカスタムドメインでも確認ができます。

当然、プライベートアドレスのため外部からのアクセスはできませんが、内部からは確認できます。

設定したドメインでアクセスできることが確認できます。
他に、kuduでログインできることも確認します。
ユーザ名とパスワードを聞かれます。

ユーザー名とパスワードはpublish profileに書かれています。

ダウンロードしたファイルの中身を確認します。
userName($を含む)とuserPWDです。

表示されることを確認します。

以上で、確認まで完了です。
次に、外部からのアクセスするためApplication Gatewayの作成を行います。

Application Gatewayの作成

Application Gatewayは通常通りの手順で作成します。

ただし、事前に専用のサブネットを追加しておきます。

項目を入力します。

上記で作成たVNET、subnetを指定します。
WAFも有効化します。

しばし待ちます。

作成後、バックエンドプールを設定します。
ロードバランサーのIPを指定します。

プローブを設定します。
ASEで指定したドメインを設定します。

HTTP設定します。
カスタムプローブを設定します。

Backendに問題がないか確認します。

ドメインの設定を行います。
Web Appに設定されたパブリックIPをカスタムドメインにCNAMEで指定します。

試しにDNSに指定します。

HTTPで接続できることを確認できます。

HTTPSで接続するためにはListenerを追加します。

アクセスできることを確認します。

別のドメインを設定する場合は、カスタムドメインとして設定してからListenerの設定します。
以上で、下記のような構成が完了です。

まとめ

App Service Environment を利用することで仮想ネットワーク内にWeb Appをデプロイする方法を解説しました。
Application Gatewayのみ外部に公開することで、セキュリティを向上させることができます。
また、ExpressRouteやVPNで結ぶことで完全にプライベートネットワークで運用することも可能です。
その為、エンタープライズの環境には最適だと考えます。

-Azure
-,