【Azure】App ServiceにGithub Action経由でデプロイ時に認証を基本認証に変更する方法


## はじめに

皆さん大好きの Visual Studio には、Azure App Service と連携することが可能です。 特にデプロイに関してはリソースの作成から自動デプロイの yaml ファイル出力まで広く Visual Studio 経由で実行することができます。

そんな Visual Studio について、2024 年 12 月 14 日にアップデートされた Visual Studio 2022 v17.12 にて Azure App Service デプロイ周りへの機能に変更が入っています。

> Visual Studio 2022 の新機能により、基本認証は無効になり、Azure App Service に発行するための統合セキュリティが有効になります。
> これにより、資格情報の発行が安全に処理され、基本認証に関連するリスクが軽減されます。

https://learn.microsoft.com/ja-jp/visualstudio/releases/2022/release-notes

となりよりセキュアなデプロイ方法がデフォルトになりました。ただし私の環境では出力された yaml ファイルではうまくデプロイできませんでした。
本来であればエラーを解決する方がよいのですが、簡単な確認をしたいだけだったのでもともとの基本認証をする方法に戻して確認を実施しました。

この記事では同じような状況の方のために基本認証に戻す方法を紹介します。またエラー解決方法についても別の記事を投稿する予定です。

2025/02/22 追記

OIDC 認証を用いた認証を行う記事を作成しました。良ければこちらの記事もご覧ください。

https://qiita.com/KM_20005/items/e0b24b0632b30783fd3e

:::note warn
ちょっとした確認のために作成する必要がある場合や、完全に内部のプロトタイプ用などの状況以外ではセキュリティが固いほうがいいため基本認証に戻すことは推奨されません。
:::

## 修正方法

以下の 2 点を修正すると基本認証を用いた方法に変更することができます。

- yaml ファイルの修正
- Azure App Service が基本認証を設定できるように修正

順番に解説します。

## yaml ファイルの修正

出力される yaml ファイルの比較をした際に新旧では下記のような差分があります。(旧 → 新で比較)

```diff_yaml
# デプロイ部分のみ抜粋
deploy:
  runs-on: windows-latest
  needs: build
  steps:
    - name: Download artifact from build job
      uses: actions/download-artifact@v4
      with:
        name: webapp
        path: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
+    - name: Azure Login
+      uses: azure/login@v2
+      with:
+        creds: ${{ secrets.SERVICEPRINCIPALSECRET001 }}
    - name: Deploy to Azure WebApp
      uses: azure/webapps-deploy@v2
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
-        publish-profile: ${{ secrets.APP_PUBLISH_PROFILE }}
        package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
```

変化点としては Azure 周りへのログインになります。

旧：`publish-profile`を用いてデプロイコマンド実行時に認証
新：デプロイ前にログインを実施。`publish-profile`を廃止

よりセキュアな方法を使用しています。

肝心な修正方法については上記の変更点を反対に組み込むことで基本認証に戻せます。

```diff_yaml
# デプロイ部分のみ抜粋
deploy:
  runs-on: windows-latest
  needs: build
  steps:
    - name: Download artifact from build job
      uses: actions/download-artifact@v4
      with:
        name: webapp
        path: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
-    - name: Azure Login
-      uses: azure/login@v2
-      with:
-        creds: ${{ secrets.SERVICEPRINCIPALSECRET001 }}
    - name: Deploy to Azure WebApp
      uses: azure/webapps-deploy@v2
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
+        publish-profile: ${{ secrets.APP_PUBLISH_PROFILE }}
        package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
```

シークレット周りについてはこの次に対応します。

## Azure App Service が基本認証を設定できるように修正

続いてアプリを基本認証でデプロイできるように修正していきます。`publish-profile`を取得してそれをシークレットに設定することで達成できます。

取得する方法については MicroSoft の公式ページを参考に対応します。

https://learn.microsoft.com/ja-jp/visualstudio/azure/how-to-get-publish-profile-from-azure-app-service?view=vs-2022

Azure ポータルより App Service のページを開き`発行プロファイルのダウンロード`を選択する事でダウンロードできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3783169/718f0d59-bda3-e24b-e3db-d62c7d63cac7.png)

取得した発行プロファイルの中身を Github のシークレットに保存する事でデプロイが可能になります。

また Visual Studio から App Service のリソース作成も行った場合デフォルトでは基本認証が無効になっており発行プロファイルがダウンロードができません。そのため基本認証の有効化を先に対応します。

### 基本認証の有効化(発行プロフィル取得済みの場合は対応不要)

以下のページを参考に修正します。ただし参考ページでは有効 → 無効に設定しているため今回は逆の対応をすることになります。

https://learn.microsoft.com/ja-jp/azure/app-service/configure-basic-auth-disable?tabs=portal

Azure ポータルより App Service のページを開き左側のメニューより構成>全般設定を開きます。
開いた画面から`SCM 基本認証の発行資格情報`と`FTP 基本認証の発行資格情報`をオンに設定し保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3783169/e76bd8e4-845f-4897-c092-a43e4d32ba48.png)

上記の上記の設定で基本認証が有効になり発行プロフィルの取得が可能になります。

発行プロファイル取得後は普通に取得できた時と同じように Github のシークレットに登録すれば大丈夫です。

## おわりに

Azure App Service に自動デプロイ時の認証方法を基本認証に変更する方法をまとめました。Azure は認証関係が複雑なのでひとまず簡単にデプロイできるようにする方法について知れて良かったです。

この記事が皆様のコーディングライフの助けになれば幸いです。

## 参考

https://learn.microsoft.com/ja-jp/visualstudio/releases/2022/release-notes

https://learn.microsoft.com/ja-jp/visualstudio/azure/how-to-get-publish-profile-from-azure-app-service?view=vs-2022

https://learn.microsoft.com/ja-jp/azure/app-service/configure-basic-auth-disable?tabs=portal

https://qiita.com/KM_20005/items/e0b24b0632b30783fd3e