Defender for App Service の推奨事項の解決を試みる

# はじめに

Defender for App Service とは、Defender for Cloud の有償で提供されるワークロード保護機能の１つであり、App Service で実行されるアプリケーションの脅威を検知することが出来ます。
脅威を検知する前段階で、アプリケーションの弱点を防ぐことができれば、セキュリティホールを悪用した攻撃に対抗することが可能です。その弱点について、自動的に診断しアドバイスしてくれる機能が Defender for Cloud に備わっており、ワークロード毎に評価結果を提示します。

Defender for App Service を試したことがない方向けに、気軽に試していただけることを知っていただくために本記事を掲載します。実際にどのような推奨事項が出てくるのかを見ていただいた上で、推奨事項の解決までのステップを書いていきます。

# 準備
App Service を気軽に試すため、Azure 上に WordPress を作成して簡単なWebサイトを実験台とします。
OSはLinuxで、ホスティングプランは最も安価な Basic としました。

https://learn.microsoft.com/ja-jp/azure/app-service/quickstart-wordpress

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/ef0392c7-d91b-1cfd-6bdc-0b57d1e93e4e.png)

いくつかの基本パラメータを設定し作成ボタンをクリックした後は、自動的にデプロイが開始され、10分程度で Web サイトが作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/25890c38-e037-c38c-8151-6b28037c0b4d.png)

次にAzure の管理ポータルへログインし、Defender for Cloud のページから Defender for App Service を有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/1746e15d-bcde-21e6-7095-5ecfd9af0056.png)

# 推奨事項の確認

Defender for App Service を有効化した後、30分～1時間程度時間を置くことで、推奨事項を確認できます。
作成したばかりの WordPress では、下記のように分かりやすく脆弱な部分があることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/e69ac873-8af8-4833-198a-151e14706441.png)

ここで「異常」と判定されているもののほとんどは、アプリケーションまたはIDの設定を同じAzure 管理ポータルから設定変更することで解決することが出来ました。

「Web アプリでは FTPS を必須とする」と「Web アプリケーションには HTTPS を介してのみアクセスできるようにする」は、アプリケーション設定を変更するとよいでしょう。
この辺りは基本的な防御手法となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/7ef0c2f8-77b6-f7e8-d845-688f6afde045.png)

「Web アプリではマネージド ID を使用する必要がある」では、IDの設定を追加します。マネージド ID を作成しておくことでアプリケーション開発者は資格情報をアプリケーション内で管理する必要性がなくなり、安全な資格情報の運用が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/658af894-1bf0-833e-7533-968edbed8195.png)

「Web アプリでは、すべての受信要求に対して SSL 証明書を要求する必要がある」については、アプリケーションの設定で解決することが出来ますが、こちらを解決するためにアプリケーション設定を変更した場合、下記のようにアクセス時に証明書が要求されてしまうため、Web アプリの特性やデータ公開範囲に応じて要求すべきかどうかを決定する項目であると考えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/067a738b-2aa5-5359-8ab0-b1dd50d7c947.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/b1b10d3a-3673-8f88-dec4-3c493f1bdab1.png)


最後に、「Web アプリ用に PHP を最新バージョンに更新する必要がある」については、注意が必要です。まず、PHPをバージョンアップすることによるアプリへの影響を考慮することは当然ですが、推奨事項の規定値を確認してどのバージョンを最新とみなすかを明確に確認しなければなりませんでした。
現在は、推奨事項の規定値として バージョン 8.0 が指定されているため、PHP 8.1 へ更新していてもこの推奨事項は解決されないままになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/974d6482-d9fb-261b-ff37-6f55b93c7553.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/cc41eb6c-4f04-99fa-0390-6435b8196e66.png)

この場合、規定値を 8.0 にしている組み込みポリシーから、App Service の除外設定を行い、PHP 8.1 を判定するカスタムポリシーを作成する方が良いと考えます。
カスタムポリシーの設定方法を含めると長文となるため、次回の記事に回させていただきます。本記事では、参考までに PHP 8.0 を明示的に App Service 側で指定してみて、組み込みポリシーが正常に判定されるかを見てみましょう。

https://learn.microsoft.com/ja-jp/azure/app-service/configure-language-php?pivots=platform-linux#access-environment-variables

> az webapp config set --resource-group RGNAME --name APPSERVICENAME --linux-fx-version "PHP|8.0"

> az webapp config show --resource-group RGNAME --name APPSERVICENAME --query linuxFxVersion
"PHP|8.0"

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1879870/d9e0e02c-f1b5-c5f8-b48c-853dd62f662e.png)

無事に推奨事項が解決されたことを確認できました。

# 最後に

本記事では、Defender for App Service を試したことがない方向けに、下記のことを提示しました。
* 気軽に試していただけることを知っていただく
* 実際にどのような推奨事項が出てくるのかを見ていただく
* 推奨事項の解決までのステップを書く

次回記事では、カスタムポリシーを設定した上で、推奨項目としてどのように反映されてくるかを掲載します。
最後まで読んでいただきありがとうございました。