Azure Portalなどへのサインインに多要素認証(MFA)が義務付けられる件で対応が必要なユーザーを調べる

:::note info
より正確な情報は引用元のMicrosoft公式ドキュメントやMicrosoft サポートの方のブログをご確認ください。
:::

2024/05/14に突如発表されたMFA義務付けの件について、対応が必要なユーザーを調べた。

https://techcommunity.microsoft.com/t5/core-infrastructure-and-security/microsoft-will-require-mfa-for-all-azure-users/ba-p/4140391

2024/06/27更新

https://techcommunity.microsoft.com/t5/core-infrastructure-and-security/update-on-mfa-requirements-for-azure-sign-in/ba-p/4177584


日本マイクロソフトのAzure Identity サポート チームの方のブログがわかりやすい。

https://jpazureid.github.io/blog/azure-active-directory/microsoft-will-require-mfa-for-all-azure-users/

https://jpazureid.github.io/blog/azure-active-directory/update-on-mfa-requirements-for-azure-sign-in/

https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-mandatory-multifactor-authentication

適用範囲、タイミング、実装の詳細、および準備のためのガイダンスなどについてはMS Learnを確認いただきたいが、スケジュールのみ引用。

# 施行フェーズ
>フェーズ 1: **2024 年後半から**、Azure portal、Microsoft Entra 管理センター、Microsoft Intune管理センターにサインインするために MFA が必要になります。

>フェーズ 2: **2025 年初頭から**、Azure CLI、Azure PowerShell、Azure モバイル アプリ、IaC ツールへのサインインに対して MFA の適用が徐々に開始されます。

延期もできるよう。ただし、MFAがない分セキュリティ的に弱くなる。
>2024 年 8 月 15 日から 2024 年 10 月 15 日までの間、グローバル管理者は Azure portal に移動して、テナントの施行開始日を **2025 年 3 月 15 日に延期**できます。

Entra ID P1以上を持っておらず、Entra ID Freeでテナントを利用している場合、MFA義務付け対象のユーザ分はP1以上のライセンスを購入する必要があるのだろうか？
以下のサイトでは、**前提条件**にP1か試用版とあるので、やはり別途購入が必要なのだろうか。

https://learn.microsoft.com/ja-jp/entra/identity/authentication/tutorial-enable-azure-mfa

>## 前提条件
>このチュートリアルを完了するには、以下のリソースと特権が必要です。
>
>* Microsoft Entra ID P1 か試用版のライセンスが有効になっている稼働中の Microsoft Entra テナント。

再掲するが、以下記事内の手順で対象ユーザーを特定する。

https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-mandatory-multifactor-authentication

# 対応が必要なユーザーを調べる

>## 多要素認証の準備
>[アプリケーション](https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-mandatory-multifactor-authentication#applications)にリストされている管理ポータルと Azure クライアントにアクセスするすべてのユーザーは、MFA を使用するように設定する必要があります。管理ポータルにアクセスするすべてのユーザーは、MFA を使用する必要があります。
>* 以下のリソースを使用して、MFA の有無にかかわらず Azure にサインインしているユーザーを特定します。
[PowerShell](https://azuread.github.io/MSIdentityTools/commands/Export-MsIdAzureMfaReport/)を使用して、ユーザーとその認証方法の一覧をエクスポートする

リンクのついた`PowerShell`をクリックすると、以下のサイトに遷移。

https://azuread.github.io/MSIdentityTools/commands/Export-MsIdAzureMfaReport/

>Exports the list of users that have signed into the Azure portal, Azure CLI, or Azure PowerShell over the last 30 days by querying the sign-in logs. In Microsoft Entra ID Free tenants, sign-in log retention is limited to seven days.

Azure portal, Azure CLI, or Azure PowerShellということで、Microsoft Entra 管理センター、Microsoft Intune管理センター、Azure モバイル アプリ、IaC ツールのサインインログはとれない？(不明)

> **PowerShell 7.0**
>This cmdlet requires PowerShell 7.0 or later.

:::note warn
PowerShellのバージョンは7.0以降が必要。
:::

```PowerShell:command1
Install-Module MsIdentityTools -Scope CurrentUser
```

<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/81fe0681-8bd8-214e-ceb1-5991856aa750.png">

```PowerShell:command2
Connect-MgGraph -Scopes Directory.Read.All, AuditLog.Read.All, UserAuthenticationMethod.Read.All
```
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/e46c0997-71c7-7a68-6bde-8f9127e74e5a.png">
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/257f13fd-a9c6-66e8-9844-59b9726ae4f7.png">

```PowerShell:command3
Export-MsIdAzureMfaReport .\report.xlsx
```
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/c36e9b42-0863-abb1-ebd7-18dbcbffd172.png">

エラーが発生し、report.xlsxが出力されなかった。
Entra ID Freeテナントの場合、下記の手順が必要のよう。

## Entra ID Free テナントの場合
> **Entra ID Free tenants**
>If you are using an Entra ID Free tenant, additional steps are required to download the sign-in logs
>
>Follow these steps to download the sign-in logs.


>* Sign-in to the [Entra Admin Portal](https://entra.microsoft.com/)
>* From the left navigation select: Identity → Monitoring & health → Sign-in logs.
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/abfc39d3-f078-2bf0-dc01-5827f4eb29c3.png">
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/470977b1-63ee-8040-83d0-849cd174b7af.png">

Azure Portalからの場合
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/71543d19-874f-779c-0527-0c619051a777.png">
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/3865fc68-99c8-1c3a-fa96-17112be58952.png">

>* Select the Date filter and set to Last 7 days
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/d41e52e4-584e-e09f-8db3-d5e84030bcb9.png">

>* Select Add filters → Application and click Apply
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/342c69fa-d850-eb0a-b144-bbfa291efedf.png">

>* Type in: Azure and click Apply
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/b5fc9585-0df6-2708-8800-2ef6a4085a5d.png">

>* Select Download → Download JSON
<img width=400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/a115e24f-c21e-d48f-eefb-13995db32f8e.png">

>* Set the File Name of the first textbox to signins and click Download.
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/10fe1d70-d8f7-deae-d9e0-26fe03af62fa.png">
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/ef143dc9-fd08-999c-3cd3-a0b38296f51c.png">

>* Once the file is downloaded, copy it to the folder where the export command will be run.

今回はダウンロードに保存されたファイルをそのまま指定するので、特段コピーして格納先を変えるなどはしない。

>* Run the export with the -SignInsJsonPath option.
```powershell:command
Export-MsIdAzureMfaReport ./report.xlsx -SignInsJsonPath ./signins.json
```
-SignInsJsonPathの引数にsignins.jsonのパスを指定。

先にConnect-MgGraphが必要。色々エラーが出たが、report.xlsxが出力された。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/2887e9bf-96a3-8999-21c3-fc008e21e2e5.png">

<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3862159/ecbc6c1a-2242-93f1-8d3b-9b5de9ca43c9.png">

## MFA Status列の値で対象ユーザーを確認する

MFA Status列の値で状況がわかる。
> **MFA Status**
>✅ MFA Capable + Signed in with MFA: The user has MFA authentication methods registered and has successfully signed in at least once to Azure using MFA.
✅ MFA Capable: The user has MFA authentication methods registered but has always signed into Azure using single factor authentication.
❌ Not MFA Capable: The user has not yet registered a multi-factor authentication method and has not signed into Azure using MFA. Note: This status may not be accurate if your tenant uses identity federation or a third-party multi-factor authentication provider. See [MFA Status when using identity federation](https://azuread.github.io/MSIdentityTools/commands/Export-MsIdAzureMfaReport/#mfa-status-when-using-identity-federation).

❌ Not MFA Capableとなっているユーザーは対応が必要っぽい。

テストユーザーでMFAを有効化して、再度同じコマンドで確認しようとしたが、職場または学校アカウントが必要だったため、保留とした。

以上。