Azure AD 認証済みの Azure App Service があるとして、外周監視をやりたかったとします。当然認証がかかっているので監視用の専用サインインユーザーアカウントを用意して外周監視をする必要がありますよね。シンプルに監視するなら特定の IP アドレスからは認証がかからないようにしたいです。という事で、今回は Azure App Service for Linux の PHP8.0 に組み込まれている Nginx を使って、特定の IP アドレスからは認証させず、かつ認証されていないアクセスを強制認証するような設定を追加してみました。
Azure App Service の「認証されていないアクセスを許可する」
Azure CLI で「認証されていないアクセスを許可する」に変更
bash
prefix=mnrnginx
az webapp auth update \
--name ${prefix} \
--resource-group ${prefix}-rg \
--unauthenticated-client-action AllowAnonymous
Azure ポータルから SSH して Nginx 設定ファイルを編集
bash
cp /etc/nginx/sites-enabled/default /home/default
vi default
Nginx 設定ファイルに判定処理を追加
- 強制リダイレクト判定用の変数を用意します。
- 最初は、特定の IP アドレスにマッチしなければ、強制リダイレクト判定用の変数を 1 にします。
- 次に、認証済みの場合にセットされる変数 HTTP_X_MS_CLIENT_PRINCIPAL_NAME が空欄でなければ 0 に上書きします。
- 最後に、強制リダイレクト判定用の変数が 1 だったら、Azure AD 認証にリダイレクトします。
default
set $force_redirect 0;
if ($HTTP_X_CLIENT_IP !~ ^(123.123.123.123|211.211.211.211)$) {
set $force_redirect 1;
}
if ($HTTP_X_MS_CLIENT_PRINCIPAL_NAME != "") {
set $force_redirect 0;
}
if ($force_redirect) {
return 302 /.auth/login/aad?post_login_redirect_uri=/;
}
Azure App Service のスタートアップスクリプトを設定
bash
az webapp config set \
--name ${prefix} \
--resource-group ${prefix}-rg \
--startup-file "cp /home/default /etc/nginx/sites-enabled/default; service nginx restart"
参考