備忘&ちょっとでもインターネット上に App Service on Linux の情報を流しておきたいので大した内容ではないですが書いておきます(
Front Door のバックエンドに App Service を置く場合、Front Door の IP アドレスはユーザーごとに違うわけではないため、App Service の機能としてある、IP アドレスによるアクセス制御では、アクセス元を制限することができません。
※IPアドレスのレンジは公開されているため、(特定ではなく)Front Door サービスからのアクセスのみ許可、ということは可能です。以下ドキュメントより。
使用するバックエンドが、Azure Front Door のバックエンド IP アドレス空間と Azure のインフラストラクチャ サービスからのトラフィックのみを受け入れるように IP ACL 処理を構成します。 Microsoft は Azure IP 範囲およびサービス タグとの統合に向けて作業を進めていますが、現在のところ、IP 範囲は次のように参照することができます。
Front Door のIPv4 バックエンド IP 空間: 147.243.0.0/16
Front Door のIPv6 バックエンド IP 空間: 2a01:111:2050::/44
仮想化されたホスト IP アドレスを通した Azure の基本的なインフラストラクチャ サービス: 168.63.129.16 および 169.254.169.254
これがどういうときに問題かというと、Front Door の WAF を使って、バックエンドに App Service を置いた場合、悪意のある第三者が別の Front Door を置くことで WAF をスルー出来る可能性があります。もちろん、App Service 側のホスト名がわからないとたどり着けないのですが、可能性はゼロではありません。
こういうこと↓
で、どうするかというと、上のドキュメントにもある通り、X-Forwarded-Host に Front Door のホスト名がのってくるため、それをチェックする必要があります。
では、App Service on Linux ではどうするかですが、アプリ側で見なくても普通に .htaccess を置けばアクセス制御ができました。
こんな感じ。
SetEnvIf X-Forwarded-Host "www\.contoso\.com" allowed_fd Order Deny,Allow Deny from all Allow from env=allowed_fd
ちょっとここで不安だったのが .htaccess でヘッダーのアクセス元チェック(要はApache のモジュール)を使うのって App Service の世界で一般的なんだろうか、ということでした。なんとなくつぶやいていたら、なんと中の方から返信いただけました。
トリッキーじゃないですよー
— 帝国兵 (@superriver) August 7, 2019
ということで安心して使っていきます。おそらく他のモジュールも特に問題なく使えるでしょう。
ドキュメントをよく読むと、Laravel のデプロイのところでも .htaccess が書かれていました。
docs.microsoft.com
最後に phpinfo から抜いてきた Loaded Modules の一覧です。(今回は PHP アプリの話しでした)
mod_rewrite、mod_auth* も使えます。
core mod_so mod_watchdog http_core mod_log_config mod_logio mod_version mod_unixd mod_access_compat mod_alias mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_host mod_authz_user mod_autoindex mod_deflate mod_dir mod_env mod_expires mod_filter mod_include mod_mime prefork mod_negotiation mod_php7 mod_reqtimeout mod_rewrite mod_setenvif mod_status
何でもかんでも .htaccess にするとあとで地獄を見ることになりますが、どうしてもという最後の隙間を埋める部分で使っていけそうです。