FIDO2 & Entra 完全パスワードレス のための 条件付きアクセス

# はじめに
WHfB と FIDO2 のみを許可した 完全パスワードレス（Microsoft Authenticator さえも使用させない）を目的とした 条件付きアクセス はどういう構成になるのか、研究の成果を共有したいと思います。

**想定したシーン**
Microsoft Entra テナントを初めて導入する場合、通常は 認証に MFA が使われれるため、スマホ (Microsoft Authenticator) の利用が必要です。

しかし、従業員に 社用のスマホを貸与できない組織も多く存在していると思います。
そして、個人所有や、協力会社 の人のスマホを使ってもらおうとした場合、調整が難航することもあるかと思います。

このスマホの手配が足枷となり、Microsoft Authenticator の利用が困難になることもあります。
そのような場合の解決策として、FIDO2 セキュリティキー を提供する方法があります。

:::note warn
社用スマホが既に導入されていれば、実質 コストゼロで Microsoft Authenticator を利用できるのですが、スマホを新規に手配する必要がある場合は、数万円のコストがかかり、さらに 通信料もかかるため、認証のためだけに スマホを 導入することはナンセンスです。

それに対して、FIDO2 セキュリティキー であれば、数千円の物品を購入するだけで済むため、現実的です。
:::

**課題**
ユーザーアカウントに FIDO2 セキュリティキーを割り当てる際には、なんと MFA を求められてしまうのが 既定の動作となっています。

そして、その MFA 要件を満たすために、Microsoft Authenticator が必要になります。
先ほど説明したとおり、スマホの提供が難しい組織にとっては、これでは 完全パスワード化ができません。

:::note info
**ユーザーが FIDO2 を登録する際の要件**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/how-to-enable-passkey-fido2?wt.mc_id=mvp_407731#requirements
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/eca23df6-cb33-4de9-b7dc-452d0039809e.png)
:::

**解決策**
今回の記事で紹介する方法を使うと、そのようなアンバランスな状況を脱却でき、課題を解決できます。

**期待される結果**（ゴール）
- マイアカウント（セキュリティ情報）画面には、TAP (Temporary Access Password) でアクセスを行い、ユーザー自身で、FIDO2 セキュリティキー をプロビジョニングできるようになります（TAP は、MFA の要件を満たします）

- ログオンについては、条件付きアクセスで、WHfB or FIDO2 のみが許可されます

- ユーザーに対して、Microsoft Authenticator の登録を求めることがなくなります

- 利用者には、組織が未検証の FIDO2 セキュリティー は、使わせません

# 前提事項
本章以降の構成を実施する前には、以下の記事を参考に FIDO2 を有効化しておく必要があります。

https://qiita.com/carol0226/items/8586291079d941f62f7b

さらに セキュリティの既定値群 が 無効化されており、条件付きアクセス が利用できるようになっている必要があります。これは、Microsoft Entra Premium P1 以上のライセンスが必要です。

https://qiita.com/carol0226/items/51a70a561b78af567972

# 1. 認証強度についての構成
## 1-1. 認証強度とは？
Microsoft Entra の **認証強度** は、条件付きアクセス を使って、リソースへのアクセスを許可する際の **認証方法の組み合わせ** を指定することができます。

あらかじめ ３種類 の 組み込みの 認証強度 が用意されており、さらに 任意の組み合わせを定義できる、カスタムの認証強度 という機能も用意されています。

- MFA 強度（多要素認証 / Multifactor authentication）
- パスワードレス MFA 強度 (Passwordless MFA)
- フィッシングに強い MFA 強度 (Phishing-resistant MFA)
- カスタムの認証強度（任意の名前）

**公開情報：条件付きアクセスの認証強度**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-authentication-strengths?wt.mc_id=mvp_407731

**公開情報より、抜粋**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f08301c5-8542-402b-a23a-1a3f345912ac.png)

**条件付きアクセス で "認証強度が必要" を使用する際の 選択肢**
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/86a275a4-2e5b-47ca-a1fc-76aebacf42eb.png">

あらかじめ用意された組み合わせ以外で運用したい場合には、**カスタムの認証強度** を利用することができます。

**公開情報：カスタム条件付きアクセス認証の強度**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-authentication-strength-advanced-options?wt.mc_id=mvp_407731

## 1-2. 完全パスワードレス運用 を実現するための認証強度は？
今回のシナリオでは、以下の ①～③ だけを テナント へのサインインとして許可する必要があります。
① Windows Hello for Business
② パスキー (FIDO2)
③ 一時アクセス パス(1回限りの使用)

この組み合わせは、**組み込みの認証強度** の組み合わせには存在しないため、**カスタムの認証強度** を使用する必要があります。

次章の手順で、まず カスタムの認証強度 の定義を行って、条件付きアクセスポリシー で利用できる状態にしておきます。

## 1-3. カスタムの認証強度 を定義する手順
1．引き続き、Microsoft Entra 管理センターで作業を行います。
左ペインの **保護** を開き、**条件付きアクセス**　を選択します。
続いて、**認証強度** を選んでから **新しい認証強度** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/56772869-b83c-4a01-a9e4-3b29c8fc95d3.png)

:::note info
**オプション**
条件付きアクセス で セキュリティキー の種類（メーカー、製品）も制限したい場合は、以下の ▶ を開いて 追加の手順を確認してください。
:::

<details><summary>セキュリティキー の種類 で制御したい場合の追加手順</summary>

セキュリティキー の種類 を制御するためには、AAGUID を知る必要があります。

**AAGUID について**
以下の記事を参考にしてください。
以下の記事のうち、**AAGUID の確認方法** の章だけ参照いただければ OK です。

**Microsoft Entraで特定製品の FIDO2 セキュリティキーのみを許可する**
https://qiita.com/carol0226/items/4d26717594c2b11126b4

上記の記事の内容を適用すると、該当の AAGUID のセキュリティキーだけをユーザーに紐づけできるようにすることで、結果的に 認証でも使えなくなります（テナント内の 全ユーザーに一律で適用）

条件付きアクセス で制御する場合は、ユーザーへの紐づけは どのセキュリティキーでも可能にしておきますが、条件（ユーザー・場所・デバイス・アプリ）の組み合わせごとに、個別に AAGUID を可変させて制御することが可能になります。

**AAGUID を指定する手順**
a) 新しい認証強度 のウィンドウ が開いたら、**パスキー(FIDO2)** 欄の **詳細オプション** を選択します。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/478f5123-18ba-4ff1-81fa-27344707203a.png">

b) パスキー (FIDO2) の詳細オプション のウィンドウで 導入した FIDO2 セキュリティキーの AAGUID を入力して、**保存** を押します。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/bac79d34-e944-4d03-ab30-7e11fc492e87.png">

以上で、指定した AAGUID を持つ セキュリティキー のみを この 認証強度 として定義することができました。
</details>

---

2．新しい認証強度 のウィンドウ が開いたら、任意の **名前** を指定したあと、以下の項目に チェック を入れてから **次へ** を押します。
- ビジネス/プラットフォーム資格情報のWindows Hello
- パスキー (FIDO2)
- 一時アクセス パス(1回限りの使用)
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/9a10960b-e1d3-4e74-ae52-fe667a991685.png">

3．**レビュー** タブ では、以下のように表示されたことを確認して **作成** を押します。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/512c3496-b5ad-46d3-9d9f-28a7f4652630.png">

4．以下の通知が表示されれば OK です。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6e45f81e-40a8-4a10-8c73-5b3262816851.png">

5．以下のように カスタムの認証強度 が追加されていれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/499cc02a-7e2f-479c-959f-e4575663d1a3.png)

**（参考）**
2022 年 10 月 19 日 に パブリックプレビュー され、2023 年 5 月 31 日 に 一般公開 (GA) された機能です。

**Support Blog：認証強度 - シナリオに適した認証方式を選択可能に**（2022/10/19 パブリックプレビュー）
https://jpazureid.github.io/blog/azure-active-directory/authentication-strength-choose-the-right-auth-method-for-your/

**Support Blog：条件付きアクセスの認証強度 一般提供開始のお知らせ**（2023/5/31 一般公開）
https://jpazureid.github.io/blog/azure-active-directory/ca-authentication-strength-ga/

# 2. 条件付きアクセス で 認証強度 を強制する
前章で定義した **カスタムの認証強度** は、条件付きアクセス で設定を行うことで、テナントの動作に反映させることができます。

## 2-1. 既存の条件付きアクセスの状態を確認する
まず、完全パスワードレス 用のポリシーを 新規で作成するか、既に運用されているポリシーをカスタマイズすれば良いのかを考えます。

**今回 初めて 条件付きアクセスを展開した場合**
もし、今回のために セキュリティの既定値群 を無効化して 初めて条件付きアクセス を構成した場合は、以下の　オレンジ枠（MICROSOFT マネージド）または グリーン枠（ユーザー管理）のポリシーが作成されていることと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6b254fb2-d198-4929-9c0f-33bf1e65c1cd.png)

グリーン枠（ユーザー管理）のポリシーが作成されている場合は、そのポリシーをカスタマイズして利用することができます。

オレンジ枠（MICROSOFT マネージド）は、今回の 完全パスワードレス の構成とは共存できません。
そのため、以下の セキュリティの既定値群 の記事を参考に、MICROSOFT マネージドのポリシーを **オフ** に構成して、４章の "条件付きアクセス を構成する" に記載されている手順を使って、"ユーザー" の ポリシー を作成してください。 

**セキュリティの既定値群 と 条件付きアクセス の初回利用について**
https://qiita.com/carol0226/items/51a70a561b78af567972

**運用中のポリシーに反映させる場合**
従来から、条件付きアクセス を使って運用中のテナントの場合は、基本的には、次章（ポリシーの変更箇所）を見ながら、「多要素認証を要求する」が構成されているポリシーを「認証強度が必要」へ変更いただけば良いはずです。

なお、ポリシーの影響が 運用中の既存ユーザーに及ばないように、注意しながらテストを行ってください。推奨は 別途 検証用テナントを使って、仕組みを理解してから 本番適用いただいた方がベターです。

## 2-2. ポリシーの変更箇所
テンプレートから展開したポリシーの場合は、以下の ① と ② に該当するポリシーを変更していきます。
① すべてのユーザーに多要素認証を要求する
② 管理者に対し多要素認証を要求する

:::note info
上記 ① と ② のポリシーは、テンプレートから展開した 以下の ポリシー と同様のものを想定しています。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/3925e63b-fd11-4489-8b6f-20bd7d781e5f.png">
:::

:::note warn
**注意点**
ゲストユーザー（つまり社外の人）は FIDO2 セキュリティーキーを持っているのか分かりません。

すべてのユーザーに対して 完全パスワードレス化 を実施しつつ、ゲストアクセス に例外を構成するためには、以下の記事を参考にしてください。

**FIDO2 & Entra 完全パスワードレス環境で ゲストアクセスはどうする？**
https://qiita.com/carol0226/items/49bfa0dcf67dfaca7d1f
:::

**ポリシーの設定変更箇所**
① と ② のポリシーを順に開いて同じように作業を行います。
ポリシーを開いたら、赤枠の **許可** を選択します。
右ペインが開いたら、グリーン枠の **多要素認証を要求する** にチェックが入っているので、これを外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2f97dacb-94db-4658-8294-1a19baf4572b.png)

続いて、下図のように、**認証強度が必要** にチェックを入れて、前章で定義した カスタムの認証強度 である **"WHfB&FIDO2"** が選択できるようになっているので、これを選択し、**選択** ボタンを押します。
続いて **保存** ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/80909f97-d855-497f-a810-e9cb00893d6f.png)

以下の通知が表示されれば OK です。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/80f52766-45bc-4e5c-a4e2-5c3203b1754f.png">

以上の作業で もともとは Microsoft Authenticator（WHfB / FIDO2 も可）の認証だった構成から、フィッシングに強い MFA（WHfB / FIDO2 / TAP のみ）の認証に移行できました。

**公開情報：Microsoft Entra 多要素認証を有効にする**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/tutorial-enable-azure-mfa?wt.mc_id=mvp_407731

**公開情報：条件付きアクセスの認証強度のトラブルシューティング**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/troubleshoot-authentication-strengths?wt.mc_id=mvp_407731

# 3. ユーザーが FIDO2 セキュリティキー 以外を登録できなくする
ここまでの設定を行っても、まだ 穴がありました。
ユーザーが マイアカウントのセキュリティ情報から登録する画面では、なんと Microsoft Authenticator や 電話 の登録 ができてしまうのです・・・
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/af1dd1c4-40d9-4708-ac37-ccee6abbdf96.png">

以下の画面で Microsoft Authenticator , Hardware token , Phone を **"いいえ"** にしても反映はされませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/bb245d09-ce21-4866-b0c6-711f98f42a1d.png)

**解決策**
私のテナントでは、以下の設定を すべて 無効化することで、対処することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2b6d01b5-540e-4465-bcdf-017e19019e1b.png)

これで、セキュリティキー だけになりました。目的達成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/07641883-0434-46ae-9e60-e408da90adc8.png)

本件の対応については、ハマったのですが 以下のコミュニティの投稿をみつけて、解決することができました。

https://techcommunity.microsoft.com/discussions/microsoft-entra/mfa-with-fido2-without-mobile-phone-no-sms-or-ms-authenticator/4049598

:::note warn
**例外**
検証オプションが 以下のように表示されていて、先ほど説明したようなチェックボックスが表示されていない場合があります。このようなテナントの場合は、この回避策が使えません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/edcd9c11-8b74-48df-a89d-59a2a085b6f3.png)

>これらのメソッドは現在、検証方法ポリシーで管理されています。認証およびパスワードリセット 認証方法ポリシーに使用される方式を管理するには、ここに移動します。

私の身近では、昔から運用しているテナントだと チェックボックスが表示されたのですが、最近サインアップしたようなテナントだと、この状態でした。
認証方式ポリシーの画面に遷移して、"いいえ" にしてみても 表示が消えず、回避策が分かっていません。誰か教えてください。
:::

# 4. オプション：例外設定
以下のような例外がある場合は、どのように対応すればよいか、別の記事に記載してあります。
- 他社のテナント からの ゲストアクセス（前章でも紹介した内容です）

https://qiita.com/carol0226/items/49bfa0dcf67dfaca7d1f

- 自宅に セキュリティキー を置き忘れて出社してしまった場合
（記載中、後日公開予定）
　
- セキュリティキーの PIN を失念した場合
（記載中、後日公開予定）

# 5. 動作検証
以下の観点で 検証していきましょう。
① ID + パスワードでサインインしようとした場合は、ブロックされること
② FIDO2 セキュリティキー を 渡された利用者が、自身の Microsoft Entra アカウントに紐づけを行えること
※TAP (Tempory Access Password) でのログオンのみになります。
③ FIDO2 を登録した ユーザーが 問題なく サインインができること

## ① ID + パスワードでサインインしようとした場合は、ブロックされること
**前提：** MFA の設定が無い、新規の Entra ユーザーを用意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/3a293d18-d251-4471-bb66-6e7075892b2f.png)

1．Edge の InPrivate ウィンドウ で、Microsoft 365 にサインインします。
https://www.office.com/?omkt=ja-jp
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/97707fe2-4e12-4fbc-abb0-39efd0678e4d.png)

2．ユーザー名を入力して Next
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a3a7ac5f-3ec4-41bc-bdfd-fb1fb10f4d67.png">

3．パスワードを入力して サインイン
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2b9d610d-27f0-42a2-9e59-cfb5459f7642.png">

4．別の認証などは選択できず、別のアカウントに切り替えることが可能なだけです。
Next（次へ）を選ぶことしかできないため、Next を押します。
※左側が実際に表示された画面です。右側は ブラウザ翻訳で 日本語 で見せているだけ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a33f3ef4-86b7-4346-a548-8df156190197.png)

5．サインインすることはできずに、以下の画面が表示されて ブロックされます。
※上段が実際に表示された画面です。下段は ブラウザ翻訳で 日本語 で見せているだけ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4fc140ee-a5a4-4b18-8f92-2427fd8c6ed9.png)

★画面キャプチャでは、Microsoft 365 の URL での実施を残しましたが、そのほか Microsoft Entra ID で認証を行うサイトは、すべて 同じ画面でブロックされます。

私の以下の Qiita 記事で掲載している **管理センター** と **ビジネス利用者向けポータル** の URL は、すべてブロックされたことを確認しています。 

**管理センター**
https://qiita.com/carol0226/items/8375107246b0ea6bda9a#管理センター

**ビジネス利用者向けポータル**
https://qiita.com/carol0226/items/8375107246b0ea6bda9a#ビジネス利用者向け-ポータル

:::note warn
**登録キャンペーン について**
Microsoft Authenticator の場合は、登録キャンペーン という機能があって、自動的に スマホ を登録する画面に遷移しますが、FIDO2 セキュリティキー用には、そのような機能はありません。

ユーザー自身が マイアカウント の セキュリティ情報 へサインインして、セキュリテイキーの登録を行う必要があります。

**公開情報：Microsoft Authenticator を設定してもらうための登録キャンペーンを実行する方法**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/how-to-mfa-registration-campaign?wt.mc_id=mvp_407731
:::

## ② FIDO2 セキュリティキー を 渡された利用者が、自身の Microsoft Entra アカウントに紐づけを行えること
**前提：** 前章で作成したユーザーに TAP (Tempory Access Password) を発行します。

1．先ほど検証したブラウザセッションは、完全にログオフします。
※InPrivate ウィンドウであれば、全タブを閉じるだけです。

2．検証用ユーザーに、TAP (Temporary Access Password) を発行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f8902187-0067-4d60-a923-8eea0738ef64.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/40930644-ae96-4463-bb73-aa644ab4de4b.png)

3．Edge の InPrivate ウィンドウ で、以下の URL にアクセスします。
https://aka.ms/mysecurityinfo

4．ユーザー名を入力して Next
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a3a7ac5f-3ec4-41bc-bdfd-fb1fb10f4d67.png">

5．先ほど発行された TAP を入力します。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/9986fbb7-717d-48dc-ac43-fa245f5c0708.png">

6．サインインを記憶するかどうかが表示されます。任意で選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/c709a938-1064-45dc-b127-8dda5c25699d.png)

7．**Security info** のページで **+ Add sign-in method** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/0db304f7-4a4c-4703-8889-f024a669b099.png)

8．**Security Key** を選択します。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6aca9937-276e-4934-91dc-cab1b5f8e2bd.png">

9．登録できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e11c2fe1-2665-4caf-af44-1a8a1358b72a.png)

## ③ FIDO2 を登録した ユーザーが 問題なく サインインができること
**前提：** 前章で セキュリティキーを登録したユーザー

1．先ほど検証したブラウザセッションは、完全にログオフします。
※InPrivate ウィンドウであれば、全タブを閉じるだけです。

2．Edge の InPrivate ウィンドウ で、以下の URL にアクセスします。
https://www.office.com/?omkt=ja-jp

3．最初は パスワードの入力を求められますが、そのあと セキュリティキーでの認証を促されます。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/63c81d0d-34fb-4566-b14c-46916a7e2fc9.png">

4．認証に成功すると、無事に Microsoft 365 に入れました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/fcf4b42c-91cb-49f3-a289-c6e015b83cae.png)

# さいごに
**如何でしょうか？**
このような構成が可能なことが分かったことで、皆さんの運用環境も パスワードレス にしてみたくなってきたのではないでしょうか？

今年は、集中的に パスワードレス や FIDO2 に関する記事を投稿しています。
以下に、ストックリスト を公開していますので、併せて 参照してみてください。

https://qiita.com/carol0226/stocks/3670cb8678daed11b191