パスワードレス ＆ RDP で ドメインログオンする (Webauthn)

# はじめに
以下の記事で紹介している手順を使う事で、パスワードレスで ドメインログオン して ファイル共有への SSO まで実現できます。しかし、これだけでは、RDP 接続は パスワードレス にはなりません。

**FIDO2 セキュリティキーを使った パスワードレス ドメインログオン**

https://qiita.com/carol0226/items/87dbd1f57f80f6da3968

**Windows Hello for Business (WHfB) を使った パスワードレス ドメインログオン**

https://qiita.com/carol0226/items/0c06016f18e57bf44cb0

上記の構成に加えて、本記事で紹介する手順（PKU2U の有効化）を実施することで、ドメインのメンバーサーバーへ パスワードレス（WHfB や FIDO2）で RDP 接続が出来るようになります。

:::note info
**宣伝**
私が執筆した FIDO2 に関する記事は、他にも 以下の ストックリスト で公開していますので、こちらも 参考にしてみてください。 

**＠carol0226 による FIDO2 の公開ストックリスト**
https://qiita.com/carol0226/stocks/3670cb8678daed11b191
:::

---

**2025/4/29 追記**
**Remote Credential Guard** を活用することで、WHfB や FIDO2 でログオンしたマシンから、別のホストへ パスワードレスで SSO で RDP できます。

https://qiita.com/carol0226/private/7ea3fe17a6327e18eb0a

★Windows Server 2016 / 2019 でも機能する点も Remote Credential Guard はポイントが高いです。

:::note info
**ポイント**
本記事で扱っている **Webauthn** は、不要になるのかというとそうではありません。
SSO だと、接続元と同じアカウントでしか RDP できません。

Webauthn は、例えば 2 枚目の FIDO2 セキュリティキー を使って、別のパスワードレスなユーザー に切り替えて RDP を行いたい場合に、引き続き活用できます。
:::

---

# 手順開拓までの経緯

この方法を見つけるために ネット記事を彷徨い歩いていたのですが、以下の記事をみつけて、Webauthn の存在を知りました。

**Webauthn の存在を知る切っ掛けとなった記事**

https://swjm.blog/the-complete-guide-to-rdp-with-yubikeys-fido2-cba-1bfc50f39b43

Webauthn を使えば 実現できそうとは思うものの 検証してみると Windows Server では Webauthn が動作せず、どうしたものか・・・と暗礁に乗り上げていたのですが、ついに 解決策を見つけました。

**公開情報①：リモートの Microsoft Entra 参加済みデバイスに接続する**

https://learn.microsoft.com/ja-jp/windows/client-management/client-tools/connect-to-remote-aadj-pc?wt.mc_id=mvp_407731

上記の 公開情報に、以下の注意書きがあります。この赤線のリンク先が気になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/53ebb592-cd1b-4076-4b01-d35ad77803d0.png)

**公開情報②：リモートの Microsoft Entra 参加済みデバイスに接続する**
上記の赤線部分のリンク先が、以下の公開情報です。

https://learn.microsoft.com/ja-jp/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/network-security-allow-pku2u-authentication-requests-to-this-computer-to-use-online-identities?wt.mc_id=mvp_407731#possible-values

上記の 公開情報に、以下の注意書きを見つけました。これが、影響していたようです。
（英語のサイトですが、和訳した後のキャプチャです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/8d9cb93b-0d10-b1b2-788b-97a5fe35c84b.png)

この記事の内容を構成することで、Windows Server で Webauthn が動作するようになりました。

このようにして Webauthn を使う事で、ドメインのメンバーサーバーへ パスワードレス（WHfB や FIDO2）で RDP 接続が出来るようになります。

では、やってみましょう。

# 検証に使用した環境について
Webauthn や WHfB , FIDO2 , Microsoft Entra Hybrid Join , Microsoft Entra Kerberos などそれぞれの構成に システムバージョンの要件があり、網羅的に示すことが難しいです。
机上では調べられるけど、組み合わせて動くかまでは責任もてません。

そのため、私が検証に使った環境を示しておきます。
※これより新しい組み合わせならば、動く事でしょう！

**リモートデスクトップクライアント**（接続元）
- Windows 10 Pro 22H2 Build 19045
- Windows 11 Pro 23H2 Build 22631
- Windows Server 2022 21H2 Build 20348

**リモートホスト**（接続先）
- Windows 11 Pro 23H2 Build 22631
- Windows Server 2022 21H2 Build 20348

**公開情報：Webauthn を動作させるためのシステム要件**
このサイトに記載されている OS のバージョン以降であれば、その他の要件よりも新しいので たぶん大丈夫だと思います。
https://learn.microsoft.com/ja-jp/windows/client-management/client-tools/connect-to-remote-aadj-pc?wt.mc_id=mvp_407731#connect-with-microsoft-entra-authentication

:::note warn
**注意点**
Webauthn で接続可能な Windows Server OS は 2022 以降 である必要があります。
2016 / 2019 などの古い OS は非サポートであるのが残念なところです。

2019 以前の OS では Webauthn は使えません。

回避策としては、まず 冒頭でも紹介した **Remote Credential Guard** を検討してください。
**RDP で SSO を実現！ Remote Credential Guard とは？**
https://qiita.com/carol0226/private/7ea3fe17a6327e18eb0a

その他の方法として PIV/CBA という仕組みを使う事で、利用者にとっては 同様のユースケースが実現できますが、構築は 全く別の手段で行う必要があり、対応した セキュリティキーの手配も必要です。

これについて、冒頭でも紹介した 以下の記事で解説されています。
前半に FIDO2 の方法、後半に PIV/CBA の方法が記載されています。
**The complete guide to RDP with Security Keys (PC)**
https://swjm.blog/the-complete-guide-to-rdp-with-yubikeys-fido2-cba-1bfc50f39b43

PIV/CBAの場合は、管理者が 証明書を１つ１つ セキュリティキーに保存する必要がありますし、セキュリティキーのコストも増加します。将来的には PIV/CBA を運用しながら、FIDO2 への移行も検討する必要が出てくるかもしれません（これは、悩ましい問題になりえます）
:::

:::note info
**参考：Yubico セキュリティキー 一覧**
https://www.yubico.com/jp/store/
FIDO2 の認証のみでよければ、セキュリティキーシリーズ（25ドル～）のコストで済み、指紋認証も利用できる YubiKey Bio シリーズ（90ドル～）も選択可能です。

PIV/CBA を使うためには、Yubikey5（50ドル～）のコストになります。
:::

# 前提事項

## RDP 接続を行う際の証明書を構成
RDP 接続を行う際に、以下のような 黄色の 確認画面が表示されます。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/de7025ea-b178-ba92-1122-ffd0a3400b21.png">

以下の記事の構成を行うことで、上記の 証明書確認画面 が抑止することができます。

https://qiita.com/carol0226/items/45797cb7f6fa2409fde7

## リモートホストで RDP の許可
ローカル Remote Desktop Users グループに、RDP 接続をさせたい ユーザー・グループ を追加します。ここで、追加したアカウントのみが RDP する事ができます。
※認証した 全ユーザーを 対象にするには Authenticated Users を追加します。

1. **リモートデスクトップ** を オン にして、**リモートデスクトップ ユーザー** を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/652c2fa7-20b5-77c7-5c6c-ddbc544c8352.png)
　<br>
1. 以下の画面で **追加** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b6d53ebf-e253-a208-e17f-512dc5ac7de4.png)
　<br>
1. **選択するオブジェクト名を入力してください** の欄に、**Authenticated Users** または **許可したい グループ や ユーザー名** を入力して**名前の確認** を押します。赤下線のような表示になったら、**OK** を押します。
※Authenticated Users が確認出来ない場合は、**場所** をドメインではなくローカルに変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/875e7a75-4d0e-f3d9-92db-1a3a1f757e02.png)
　<br>
1. 一覧に 追加したユーザーが表示されている事を確認して **OK** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/02a61b22-db80-7770-1375-06f5b026d414.png)

:::note info
**ポイント**
上記まで構成したら、パスワードを使って RDP 接続が成功するまでを 動作確認しておきましょう。ここでダメなら、RDP の問題です。

※RDP 自体の問題なのか、Webauthn の問題なのか 切り分けできるようにしておきます。
:::

## パスワードレスの認証方法の有効化
冒頭でも紹介した 以下の FIDO2 または Windows Hello for Business (WHfB) を使って、パスワードレスでサインインできるように構成しておきます（FIDO2 または WHfB のいずれか、または、両方 を有効化します）

https://qiita.com/carol0226/items/87dbd1f57f80f6da3968

https://qiita.com/carol0226/items/0c06016f18e57bf44cb0

上記を 有効化して、FIDO2 または WHfB を使って ローカル PC へ パスワードレスで OS にサインインが出来ている環境があれば OK です。

ここまで環境が揃っていれば、次章で説明する **PKU2U** の有効化を実施すれば 目的を達成できます。

# 構成手順
**（ドメインコントローラーで作業を行います）**

0. グループポリシー管理エディターを開き、ドメイン名 を右クリックして **このドメインに GPO を作成し、このコンテナーにリンクする** を選択します。
※ここでは、全ホストが配布対象となるために、ドメイン を選択していますが、別途 OU を用意して 個別の単位に適用することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f4666c1f-093b-ff9b-b10b-718bb1e8efb6.png)
　<br>
0. GPO の名称を任意で指定して **OK** ボタンをクリックします。
　<br>
0. 作成した GPO を右クリックして **編集** を選択します。
　<br>
0. 以下の構成を順に開きます。
コンピューターの構成 - ポリシー - Windows の設定 - セキュリティの設定 - ローカルポリシー - セキュリティオプション
**ネットワークセキュリティ：オンライン ID を使用するためのこのコンピューターへの PKU2U 認証要求を許可する** を開いて、**有効** となるように構成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2c7d2f4a-2e9a-fe1b-8ffd-676454624073.png)
　<br>
0. 以下のように、**有効** になれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6d8f497d-edbb-4214-8649-76337dd59932.png)

ドメインコントローラーと、RDP 接続先となる メンバーサーバーで **gpupdate /force** を実施しておきましょう。

# RDP 接続方法
**ポイント**
- リモートデスクトップ接続 で WebAuthn を ON にする
- 接続する際は、ホスト名 のみを指定する（接続先のIPアドレスが、名前解決で応答する）
※ IP アドレスは、利用できない
- ユーザーは、ハイブリッドユーザー（オンプレミスから同期されたユーザー）で、認証方法として FIDO2 が構成済みである
- インターネットに接続されている
※ 初回ログオンは、インターネット必須（２回目以降は、キャッシュログオン可）
※ ２回目以降でも Kerbersチケットを取得するためには、インターネット必須
→　こういった事情もあるので、常にインターネット必須と思っておいた方が無難です。

**手順**
1．リモートデスクトップ接続 (mstsc.exe) を起動します。

2．**詳細設定** タブを開き **Web アカウントを使用して、リモートコンピューターにサインインする** にチェックを入れます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4680072d-0795-404f-0f7b-42e06d32d59a.png">

3．**全般**　タブに戻り、**コンピューター** 欄に ホスト名 を記入します。
ユーザー名は、メールアドレス形式（ハイブリッドユーザー）で指定されていれば OK です。
接続情報が意図したものであれば、**接続** ボタンを押します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5c9860a2-08ca-5f6e-1e41-dbe6517e9162.png">

:::note warn
**注意点①**
コンピューター欄は、ホスト名 である必要があります。
IP アドレス を入力すると、以下のエラーになります。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7bfbfcc1-e0fa-36c2-6124-e066d76c033f.png">
:::

:::note warn
**注意点②**
表示されているユーザー名が メールアドレス形式ではない場合は、**資格情報を常に確認する** にチェックを入れて、メールアドレス形式で入力します。
:::

4．うまく Webauthn が発動すると、以下の画面に遷移します。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/db47cfda-8f59-1e81-2898-de9a6e271ca0.png">

:::note alert
**エラー**
以下のような **Windows セキュリティ** の認証窓が開いてしまう場合は、Webauthn が機能していません。
システム要件や PKU2U の GPO 設定などで漏れが無いか再確認してください。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/41ad6c90-0b52-9199-f50b-f16587862444.png">
:::

5．以下のウィンドウが開いたら、**その他のサインイン方法** を選んだあと、**顔、指紋、PIN または セキュリティキー** を選択します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5be5ab7d-4250-aba2-c380-6265f1cd4f3c.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/40ef031d-4e4c-2815-ab90-dde990802de7.png">

:::note warn
**注意事項**
上記でパスワード欄を使うと、パスワードで認証ができてしまいます。
利用者にパスワードを使わせたくない場合は、次章で紹介している **オプション：Webauthn で利用できる認証を制限する** を構成してください。
:::

**6-a. WHfB が利用できる場合**
6-a-1. **顔** または **PIN** を選択して、OK を押して認証します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d74671ae-8484-38e4-475a-528a5b542487.png">

6-a-2. リモートデスクトップ接続が確立します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6b8f8d7d-8bd1-114a-ec7d-d07450345e3f.png)

**6-b. FIDO2 セキュリティキー が利用できる場合**
6-b-1. **セキュリティキー** を選択して **次へ** を押して進みます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/3476bd03-9a05-ba7c-19e5-ad07544aab69.png">

6-b-2. セキュリティキー を挿入します（初めから挿入していても OK です）
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5863ec44-c0b0-dbd8-3248-7872972db263.png">

6-b-3. 以下の画面で セキュリティキー の PIN を入力して OK を押します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ea65b91f-3f97-9389-771f-576bc07b61f0.png">

6-b-4. 以下の表示になったら、**指タッチ** します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d0828bd6-dc1f-ade6-ab76-c9a311b945a4.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1cb74b86-47e4-ac1c-33d5-f45c1ec44d6d.png">

6-b-5. リモートデスクトップ接続が確立します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6b8f8d7d-8bd1-114a-ec7d-d07450345e3f.png)

以上で、Webauthn による RDP 接続は成功です。
初めて接続してみると、感動しますよね。

# オプション：Webauthn で利用できる認証を制限する
条件付きアクセス制限を加える事で Webauthn でサインインする際の条件を制限することができます。
※Microsoft Entra Premium P1 ライセンスが必要です。

0. Azure Portal にサインインし、Microsoft Entra ID のサービスを開きます。
　<br>
0. 左ペインから　**セキュリティ** を選択したあと、**条件付きアクセス** を開きます。
　<br>
0. 左ペインから **ポリシー** を選択して **＋新しいポリシーの追加** を選択します。
　<br>
0. 任意のポリシー名を命名します（画面では PassLess RDP にしました）
**ユーザー**（緑枠）を選択して、ポリシーを付与させたいユーザーを選択します。
（すべて or 任意のユーザー）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/865a8ad4-26a4-2a0e-3626-730768d27782.png)
　<br>
0. **ターゲットリソース**（緑枠）を選択して、適用対象として **リソース（以前のクラウドアプリ）** を選択して、**Microsoft Remote Desktop** を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4a238add-7827-c703-554e-d4a8cfd72e21.png)
　<br>
0. **許可**（緑枠）を選択して、**認証強度が必要** にチェックを入れ **Phishing-resistant** を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/fd36057b-f508-b60c-7c73-a1e494a97f62.png)
　<br>
0. **セッション**（緑枠）を選択して、**サインインの頻度** にチェックを入れ **毎回** を選択します。ポリシーの有効化 を **オン** であることを確認して、**作成**（保存）を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f99ad344-9026-7a3c-6a28-dca7de696c9d.png)

以上で、設定した条件（ユーザー、アプリ）に対して、高度なセキュリティでのサインインを強制させることができるようになりました。

パスワードレス ライフを満喫しましょう。