最初に
Private Endpointの設定の仕方で毎回混乱するので自分用のメモ。色々な設定が必要で手順がかなり長くなってしまった。
Private Endpointの作成についてはいろいろ記事があるんだけど、Front Door, Web App, Storage Accountという構成のものを見たことないのでまとめる。
他にKeyVault、NSG等も使ったほうがいいので、このままの設定だと本番では使えない。これはあくまでもPrivate Endpointを使うためだけのサンプル構成です。
リソースデプロイ
前提として、Front DoorはPremiumでないとPrivate Endpointの接続をサポートしていないので注意。
Premiumは2023年現在330ドルするので中々いいお値段になってしまう。
ただし、それはそれだけFront Doorの機能が豊富であるということでもある。昔だったらTrafiic Manager、 Firewall、CDN、Application Gateway、DDos Protection等を組み合わせていた。
参考までにロードバランシングのオプション。
手順
参考リンク。
ざっとこんな感じ。
- Resource Groupの作成
- Vnet, Subnetの作成
- App service planの作成
- Web Appの作成
- Front Doorの作成
- Storage Accountの作成(実際はDatalakeを使う)
Resource Group
まずはResource Groupの作成だけど、使えるRegionが限られている。
https://learn.microsoft.com/ja-jp/azure/frontdoor/private-link
今回はJapan Eastを選択。(スクショ忘れた。)
Vnet、Subnet
Private EndpointのためにVnetとSubnetを作る。
サブネットはWeb App用とStorage Account用を分ける。
App Service Plan
Web App
Front Door
多分この辺は変わるんだろうけど。
色々設定があってややこしい。
Front DoorのProfileを作る。Premiumを選ぶ。
Endpoint作成してこんな感じ
Route
Origin Group
Origin、ここでPrivate link serviceを有効にする。
最終的にこんな感じ。
記事用に試していたときは早くデプロイされたけど、Front Doorはグローバル分散サービスなので、Deployや設定変更に15分位かかるときもあった。中々Try & Errorするのも楽ではない。
Storage Account
最終的にRGの一覧を見てみるとこんな感じになった。
ここには見えてないけどあとPrivate DNS Zoneもある。
一覧にはないが、実はWeb App用のPrivate Endpointは裏でDeployされている。Web AppのNetworking > Private Endpointを見るとこんな感じにでPendingになっている。こいつは承認してやる必要がある。
ApproveするとNetworkingページがグリーンになる。
警告メッセージとして、パブリックアクセスできなくなるよ=Front Door経由でしかアクセスできなくなるよ、と表示さrれる。
When you enable private endpoints, app assigned address inbound traffic feature is no longer applicable and will be turned off.
Private Endpointを開くとNo accessになる。これはFront Door側で管理しているから、ということと思われる。
動作確認
Web AppのDefault Domainをクリック。
あれ、接続できてしまう。。。これ以降何回か再起動したり、待ってみたり試したが、どうしてもパブリックアクセスできてしまっていた。
仕方ないので後続のステップで塞ぐことにする。
今度はFront DoorのEndpoint hostnameのURLにアクセス。
Front Door経由で接続できることを確認。
ちなみにPrivate EndpointのApproveを忘れるとこんなエラーになる。
個別設定
個々のサービスを設定していく。
- Storage AccountのNetworking設定
- Web Appの設定
Storage AccountのNetworking設定
まずはPublic Accessをふさぐ。
全部塞いでしまうとPortalやStrorage Explorerからもアクセスできなくなってしまうので、自分のIPのみ開く。
Networking > Private EndpointsからPrivate Endpointを作成。
今回はDatalakeにしたので、その場合はサブリソースのdfsとblobの両方が必要とのこと。
Private Endpointを作る際には一緒にNicも作って、NicをSubnetに接続する。また、Private DNS Zoneを有効にする。
Web Appの設定
相変わらずPublicアクセスできてしまうこいつをFront Door経由だけのアクセスに絞りたい。
Networking > Access Ristrictionを確認する。
Main siteとAdvanced tool siteの2種類があるが、Main siteはパブリックアクセス不可に、Advanced tool site(Kudu)はデバッグとかで使うので、IP制限をかける。
Main site
- Unmatched rule actionをDenyに。
- デフォルトだとアクセス全て許可するAllow Allのデフォルトルールを変更。
Azコマンドでデフォルトルールを変更。
az resource update --resource-group rg-study001 --name wapp-study001 --resource-type "Microsoft.Web/sites" --set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Deny
同時に(スクショはないが、)Front DoorのEndpoint経由だとつながることを確認。
Advanced tool site
Web Appのログを見れたり、デプロイのエンドポイントになったりするので、完全にふさいでしまうと不便。ただKudu裏からアクセスされてしまうと致命的なので、いったん自分のIPだけ許可するようにする。
az resource update --resource-group rg-study001 --name Awapp-study001 --resource-type "Microsoft.Web/sites" --set properties.siteConfig.scmIpSecurityRestrictionsDefaultAction=Allow
Storage Accountの設定
さて、次にStorage AccountのPrivate edpoint を呼び出すためにはNetworking > Vnet integrationをONにする必要がある。
App Service の仮想ネットワーク統合機能を使用すると、アプリは仮想ネットワーク内のリソースにアクセスしたり、仮想ネットワークを通じてリソースにアクセスしたりできます。
Storage AccountのPrivate EntpointはNicでVnetに接続されているので、Web Appからそいつを呼び出すのにVnet統合が必要。SubnetはAppのものにつなぐ。
動作確認
Storage Accountのdfs用のPrivate Endpoint > DNS configuration > FQDNをコピる。
dlstudy001.dfs.core.windows.net
ここで最初自分は勘違いしていたんだけど、privatelink...を含むURLを使う必要はない。通常のエンドポイントのURLを使えば裏で自動的にPrivate Endpointを使ってくれるのがいいところ。既存のサービスの接続を裏でPrivate Endpointを利用するように変更する場合も、URLの変更は不要で済む。
Advanced Tools > Go > Bashを開いてnslookupするとちゃんとPrivate IPで名前解決できていることが確認できる。
※ちなみに別のResource Groupで同じようなPrivate Endpointを使う構成のものがあった場合、ポチポチしているだけだと自動的にはうまくいかなかった。
Azure DNS ZoneはGlobalなリソースのため、設定がResource Groupをまたいでしまい、影響が出てしまう可能性があるので注意が必要。Resource Groupをまたいでいたとしても、vnet名やIP範囲が被らないようにするとか。
Web AppにアプリをDeploy
最後にWeb Appにアプリをデプロイし、Web AppからDatalakeに接続できていることを確認する。