😀

Azure App Service の Azure AD 認証で「認証されていないアクセスを許可する」を試してみた

に公開

Azure AD 認証済みの Azure App Service があるとして、外周監視をやりたかったとします。当然認証がかかっているので監視用の専用サインインユーザーアカウントを用意して外周監視をする必要がありますよね。シンプルに監視するなら特定の IP アドレスからは認証がかからないようにしたいです。という事で、今回は Azure App Service for Linux の PHP8.0 に組み込まれている Nginx を使って、特定の IP アドレスからは認証させず、かつ認証されていないアクセスを強制認証するような設定を追加してみました。

Azure App Service の「認証されていないアクセスを許可する」

appservice-anonymouse.png

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"

参考

https://techcommunity.microsoft.com/t5/apps-on-azure-blog/configure-nginx-for-php-8-linux-azure-app-service/ba-p/3069373

https://learn.microsoft.com/ja-jp/azure/app-service/configure-authentication-customize-sign-in-out#use-multiple-sign-in-providers

Discussion