はじめに
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時間程度かかります。
しばし待ちます。
*.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を選択します。
最初に、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:
以上で、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で指定したドメインを設定します。
ドメインの設定を行います。
Web Appに設定されたパブリックIPをカスタムドメインにCNAMEで指定します。
別のドメインを設定する場合は、カスタムドメインとして設定してからListenerの設定します。
以上で、下記のような構成が完了です。
まとめ
App Service Environment を利用することで仮想ネットワーク内にWeb Appをデプロイする方法を解説しました。
Application Gatewayのみ外部に公開することで、セキュリティを向上させることができます。
また、ExpressRouteやVPNで結ぶことで完全にプライベートネットワークで運用することも可能です。
その為、エンタープライズの環境には最適だと考えます。