Azure App Service にプライベート接続したい

※2021/9/22追記
現在ではPrivateLinkがあるのでこんなことをしなくてもP1以上のスケールであれば簡単に設定可能です。

#こんな構成にならできそうな気がする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/de0dd472-7c71-9333-573c-23d9c3c04f1e.png)

#実際に構築して試してみた

## 事前に用意されていたもの

オンプレミスネットワークとS2Sで接続しているAzureVnet
P2Sでも同様に接続できるかは未確認

## 構築するもの

* AppService
    * 接続先を上記Vnet内に新規作成したサブネットからのみ接続許可しておく
    * Vnet上に新しくSubnet作成（アドレスをx.x.x.x/29）にする
* ApplicationGateWay
    * WAFを使用（WAFV2を使用したいところだが外部の入り口を開けない）
    * 検証用のため80通信のみ

## まずはVnet内からしか接続できないように設定

### AppService作成

特に気にせず構築したので割愛

### AppService設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/3e224931-08e5-5dd5-ea4c-0eaa754280c1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/7e8a1d9f-ebda-9ca8-8006-2ac8b501fd45.png)

これだけです。

### 社内からアクセスすると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/d3b4a957-9f08-e576-4326-49b77c553ce4.png)

### Vnetからの接続だと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/3565a493-c7d1-0667-c5d8-5588d97ea27f.png)

指定したサブネット内からの接続のみ許可するという設定を行います。AppService単体ではパブリック接続しかできないのでAzureVnetとS2SでつながっているローカルPCであっても外から接続なのでVnet外からのアクセスになっているので接続できません。

## そこで

* ApplicationGatewayをVnet上にたててApplicationGatewayにプライベートIPでアクセスできるようにします。
* ApplicationGatewayのバックエンドをAppServiceに設定しAppserviceからはApplicationGatewayの所属するSubnetｋらの接続のみ許可する設定にします

### 構築してみる

#### Vnetにサブネット追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/5b5f90dc-9b8e-d870-cac6-e4db6d732b15.png)

#### AppServiceの設定を変更しておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/93c1f549-1870-b897-49c5-15ae6a34d380.png)

##### VMからも接続できない状態になりました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/abd58c58-7ca2-9af1-4267-fdfbf79fa2d7.png)

#### ApplicationGatewayを構築します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/453350ac-a676-9383-ea36-fb7f51b42efd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/547efd6d-c241-1cc7-dfc6-c9adfa64c7a6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/9c10adec-24d4-82f6-e5ec-23dfd8a279ac.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/731f2bfe-feb0-f3a7-1810-eda481cc54e9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/39aafd59-2a2f-5cef-189e-82461a40995b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/bc0e3f35-6fdb-6eed-5262-9e99d9909408.png)

これで作成完了です。
リソースが作成されるのを待ちます

#### しかし

実は上記設定ではうまくいかなくて、作成完了後にこのように設定を変更してあげる必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/692e9306-66d7-4135-660c-55828d9b671a.png)

ここまで設定したら完成です。
では接続してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/c1f92dc4-8fbb-b9ae-efec-af2c76dc6b78.png)

プライベートIPで接続できるようになりました

これだけでは味気ないのでアプリをデプロイして確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/4ee1b981-19ca-4345-9d76-9d09cc1d49f3.png)


プライベート接続できている風の環境が出来上がりました。

最初に検証した同じVnetの別サブネットにおいてあるVMからも

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80457/49efb567-3e80-b8f2-399b-987578d64fba.png)

VMでも同様にプライベートIPからのアクセスからできなくなりました。
めでたしめでたし