Microsoft Entra Kerberos 認証 を構成し オンプレミスへ SSO する

# はじめに
Microsoft Entra Kerberos 認証（旧名称：Azure AD Kerberos 認証）を検証してみました。

この構成を行う事で Microsoft Entra 参加済みデバイス から、オンプレミスの Active Directory で認証されたファイルサーバーへ SSO でアクセスできるようにもなることを知り、検証して 記事にもまとめておこうと思いました。

なお、これをやってみようと思ったきっかけは他にもありまして、Windows Hello for Business の ハイブリッド（Cloud Kerberos 信頼の展開）を使いたかったのですが、その前提条件になっていたのが 本構成でした。

:::note warn
**Windows Hello for Business**
**－ ハイブリッド展開（Cloud Kerberos 信頼）の前提条件**
https://learn.microsoft.com/ja-jp/windows/security/identity-protection/hello-for-business/deploy/hybrid-cloud-kerberos-trust?wt.mc_id=mvp_407731#deploy-microsoft-entra-kerberos
（抜粋）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/800ee73e-afc9-405a-f1fb-b1966ef30742.png)
上記の赤下線部 を実現するのが、本記事で紹介している手順です。
:::

---

# Microsoft Entra Kerberos 認証 が必要となる構成
（2025/01/07 追記）
Microsoft Entra Kerberos 認証 を構成するだけで オンプレミス へ SSO 出来るようになりますが、さらに 以下の構成を行う際にも、Microsoft Entra Kerberos 認証 は、前提条件になっています。

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

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

https://qiita.com/carol0226/items/f244c0c6e871c546741c

将来的に、上記の構成に繋げるためにも、Microsoft Entra Kerberos 認証 を構成しておきましょう。

---

# 1. 想定される利用シーン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/0a20e0a7-4902-9654-f8c7-acb0dae72da3.png)
※上記の図は、以下の公開情報より、抜粋＆加筆しています。
https://learn.microsoft.com/ja-jp/entra/identity/authentication/howto-authentication-passwordless-security-key-on-premises?wt.mc_id=mvp_407731#use-sso-to-sign-in-to-on-premises-resources-by-using-fido2-keys

**背景**
- 組織では、オンプレミス の Active Directory ドメイン と、Microsoft Entra テナントが、Microsoft Entra Connect で同期されています。

- オンプレミス ドメインに登録されている ユーザーが、**"Microsoft Entra 参加済み の PC"** を使用して、在宅勤務をしています。

:::note info
**"Microsoft Entra 参加済み PC"** とは、Windows 10 / 11 が、Microsoft Entra テナントに 参加 (Join) した状態です。
そのため、オンプレミスの Active Directory には参加して **"いない"** 状態です。
:::

**利用シーン**
- VPN や Zscaler などのセキュアな仮想ネットワークを通じて、社内のファイルサーバーを参照します。
- PC 持参でオフィスに出社した際に、PC を 社内 LAN に接続して、社内のファイルサーバーを参照します。

**事象**
このような時、ファイルサーバーへアクセスした際に、**"認証窓"** が開きます。
フォルダにアクセスの都度、認証が求められて 利便性が損なわれます。
これは、PC が ドメインコントローラー と認証していないことが原因で発生します。
<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ac675343-c590-e18a-e4c5-faa52104f99b.png">

**解決策**
"Microsoft Entra Kerberos 認証" を構成すると、**認証窓** が開くことなくファイルサーバーに SSO でアクセスさせることが可能になります。 

:::note warn
**① ドメイン参加 PC の振る舞い**
ドメインコントローラーに参加した PC は、サインイン時に Kerberos 認証を行いチケットを取得しますので、ファイルサーバーへのアクセス時に チケットを提示できるため、そのまま アクセスする事ができます。

**② WORKGROUP PC の振る舞い**
ドメインコントローラーに参加していない PC（WORKGROUP）が、ファイルサーバーにアクセスすると、**認証窓** が開きます。これは、経験したことがある人は多いのでは無いでしょうか？

**③ Microsoft Entra 参加済み PC の振る舞い**
ドメインにログオンしていないため、WORKGROUP と同じ結果となって、**認証窓** が開きます。この ③ のパターンで 認証窓を出さずに SSO させる仕組みが、**Microsoft Entra Kerberos 認証** です。
:::

:::note alert
**オンプレミスへの SSO が適用できるのは、オンプレミスのドメインユーザー（ハイブリッドユーザー）のみ です。**
テナント側で 作成されたユーザー（クラウドユーザー）では、利用できません。

これは、ファイルサーバーのアクセス権には オンプレミスのユーザーが割り当てられているためです。クラウドユーザーには権限がありません。
:::

---

# 2. 前提事項
- オンプレミス Active Directory ドメインコントローラー と、Microsoft Entra ID が Microsoft Entra Connect で同期されていること

https://qiita.com/carol0226/items/487874f07d2fe90f8e0c

- PC は、Microsoft Entra 参加済み (Join 済み) デバイスであること

https://qiita.com/carol0226/items/8c2bbc0f480913eaeed4

- オンプレミス側から同期された ユーザーアカウント で 参加済みデバイスへサインインしていること
<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f6e5739a-6767-60fd-d45c-485ad7aa3a3d.png">
<br>

- デバイスは、オンプレミスのドメインコントローラーや ファイルサーバーと、プライベートなネットワークで疎通できること
<br>

- クライアントや サーバー OS のバージョンなどは、以下の公開情報を参照ください。

**公開情報：前提事項**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/howto-authentication-passwordless-security-key-on-premises?wt.mc_id=mvp_407731#prerequisites
※公開情報には、**[ネットワーク セキュリティ: Kerberos で許可する暗号化の種類を構成する]** ポリシー設定について書かれていますが、未構成のままで影響ありませんでした。

---

# 3. 構成手順
コマンドを用いて操作しますが、そんなに難しいことはしていません。
以下の２ステップのみです。

3-1. 専用モジュール (**AzureADHybridAuthenticationManagement**) をインストールする
3-2. オンプレミス側に Kerberos サーバーオブジェクトを作成する

## 3-1. 専用モジュール を インストールする
以下の公開情報の手順を、画面キャプチャ付きで紹介します。

**公開情報： AzureADHybridAuthenticationManagement モジュールをインストールする**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/howto-authentication-passwordless-security-key-on-premises?wt.mc_id=mvp_407731#install-the-azureadhybridauthenticationmanagement-module

1．貼り付ける内容（下記の枠内をコピー）
~~~
# First, ensure TLS 1.2 for PowerShell gallery access.
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
# Install the AzureADHybridAuthenticationManagement PowerShell module.
Install-Module -Name AzureADHybridAuthenticationManagement -AllowClobber
~~~

2．作業用マシン で、PowerShell（管理者）を開いて、貼り付けて実行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7e32b0ba-b5ea-1a98-96b8-3aa48a3199c3.png)
※ 応答を求められたら、"Y" はい で回答します。

:::note warn
私は、ドメインコントローラーと Entar Connect が同居しているサーバー自身 に入れてしまいしたが、公開情報を読む限りは、インターネットにアクセス可能で、ドメインコントローラーとも疎通可能な 別のマシン上でも動作するようです。

但し、通信要件が整っていないと 3-2. 章で失敗する場合もあるようですので、うまく行かない場合は、**Entra Connect サーバー** にモジュールを導入して リトライしてみてください。
:::

3．モジュールインストール中の画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/0bdb2fb1-9982-f75a-4fcb-c62c7614df75.png)

4．エラー無く、プロンプトに戻れば、導入完了です。

---

## 3-2. Kerberos サーバー オブジェクトを作成する
以下の公開情報の手順を、画面キャプチャ付きで紹介します。
前章で、専用モジュールを導入したマシン上で 引き続き 作業します。

**公開情報：Kerberos サーバー オブジェクトを作成する**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/howto-authentication-passwordless-security-key-on-premises?wt.mc_id=mvp_407731#create-a-kerberos-server-object

:::note warn
**(2024/8/24 追記)**
私の検証時は、上記の記事のうち **「すべての資格情報を要求すプロンプト例１」** のパターンで実施しました。

その他の 例２～４ を実行する場合の説明が 以下の Support Blog で説明されていますので、実行がうまく行かない場合は、その他の例 のパターンも試していただくと良いと思います。

**Japan Azure Identity Support Blog：クラウド Kerberos 信頼デプロイ方法**
https://jpazureid.github.io/blog/azure-active-directory/how-to-deploy-cloud-kerberos-trust/
:::

1．貼り付ける内容（下記の枠内をコピー）
~~~
# Specify the on-premises Active Directory domain. A new Azure AD
# Kerberos Server object will be created in this Active Directory domain.
$domain = $env:USERDNSDOMAIN
$domain
# Enter an Azure Active Directory global administrator username and password.
$cloudCred = Get-Credential -Message 'Microsoft Entra ID の全体管理者のアカウントを入力してください'

# Enter a domain administrator username and password.
$domainCred = Get-Credential -Message 'オンプレミス ドメインのドメイン管理者のアカウントを入力してください'

# Create the new Azure AD Kerberos Server object in Active Directory
# and then publish it to Azure Active Directory.
Set-AzureADKerberosServer -Domain $domain -CloudCredential $cloudCred -DomainCredential $domainCred
~~~

:::note info
**上記枠内の項目についての意味**
＄domain = ＄env:USERDNSDOMAIN　← 実行する環境のドメイン名を取得
＄domain ← 変数の内容を表示（＄env で取得したドメイン名）
＄cloudCred = Get-Credential　← Microsoft Entra ID 全体管理者用 認証窓を表示
＄domainCred = Get-Credential　← AD DS ドメイン管理者用 認証窓を表示
Set-AzureADKerberosServer -Domain ＄domain -CloudCredential ＄cloudCred -DomainCredential $domainCred　← 指示されたドメイン上に Kerberosサーバーオブジェクトを作成する
:::

2．前章でモジュールをインストールしたマシン上で、PowerShell（管理者）を開いて、貼り付けて実行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/caf24e93-f1b0-766f-8493-48abb01f2d70.png)

3．認証窓には、Microsoft Entra ID の全体管理者を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/980c1c90-6e7a-1bd1-ab6b-f3cdbda18a06.png)

4．認証窓には、オンプレミス ドメインの ドメイン管理者 を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e7555bca-5ea5-9485-c280-22eecaded2ec.png)

5．多要素認証 (MFA) が求められたら、それに応じます。

6．ドメインコントローラーで、**Active Directory ユーザーとコンピューター (ADUC)** を開くと **Domain Controllers OU** に、**AzureADKerberos** という名前のコンピューターオブジェクトが追加されている事が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7b546cdb-c68a-2f84-e78a-849357a55015.png)
※興味深いのは、このオブジェクトは、ドメインコントローラー 扱いになっている点です。

拡張機能 の表示を有効にすると、以下のように **krbtgt_AzureAD** ユーザーが追加されたことも確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5a084af8-0018-fc97-de09-adad1b1359be.png)

7．ステータスの確認
以下の Get コマンドを実行して確認します。
~~~
Get-AzureADKerberosServer -Domain $domain -CloudCredential $cloudCred -DomainCredential $domainCred
~~~

**実行結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/8ac6242d-d7cf-a5b3-27c2-f9cf92709017.png)

:::note alert
**注意**
公開情報には、以下のコマンドで オブジェクトの状態を確認するように記載されていますが、誤記があってエラーになります。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/36fae202-04c0-4d1a-9b68-e1e90c5d4f0e.png">
※例１を使った場合には、$userPrincipalName に値が無い事が原因です。
:::

---

# 4. 動作確認
## 4-1. 前提
必ず、オンプレミス側に存在し、クラウド側へ同期されているユーザーを使います。
**オンプレ側**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a43b5c1a-a87b-bdb2-201c-c9f1b5f7ea52.png)
**クラウド側**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/521cbac7-7a15-c779-e6cb-66ba5ac801d3.png)

## 4-2. 確認
0. Microsoft Entra 参加済み デバイスへ、同期された "クラウド側ユーザー" でサインインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f6e5739a-6767-60fd-d45c-485ad7aa3a3d.png)
　<br>
0. 以下のように オンプレミス側のファイル共有を開きます。
下図では、**￥￥[ファイルサーバー名]** を入力して ドメコンの 共有 を表示させてます。
認証窓が表示されずに、１発で フォルダが表示されれば **OK** です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ba0f46a9-1a20-baea-57c6-e0fa751d95b8.png)

:::note alert
Microsoft Entra Kerberos の構成に失敗している 又は、オンプレ側に存在しないアカウントでサインインして、パスにアクセスすると、以下のように 認証窓が出てしまいます。
<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ac675343-c590-e18a-e4c5-faa52104f99b.png">
:::

以上で、**Microsoft Entra Kerberos 認証** の構成は完了です。
おつかれさまでした。

---

# 5. 参考情報
**この記事で紹介した手順が記載されている公開情報**

https://learn.microsoft.com/ja-jp/entra/identity/authentication/howto-authentication-passwordless-security-key-on-premises?wt.mc_id=mvp_407731

**実は、上記よりも判りやすく記載されている公開情報**（SQL 用ですが）

https://learn.microsoft.com/ja-jp/azure/azure-sql/managed-instance/winauth-azuread-setup-incoming-trust-based-flow?wt.mc_id=mvp_407731#create-and-configure-the-microsoft-entra-kerberos-trusted-domain-object

※上記は、"グループ ポリシー オブジェクト (GPO) を構成する" 以降は、関係無いので無視して大丈夫です。
<br>

**くらう道さんの記事です。図もあって 判りやすい**
※AVD に RDP する際の SSO の構成まで記載されています。

https://www.cloudou.net/azure-virtual-desktop/avd041/

**Deep dive - Azure AD Kerberos の仕組み**

https://jpazureid.github.io/blog/azure-active-directory/how-azuread-kerberos-works/

https://jpazureid.github.io/blog/azure-active-directory/how-to-deploy-cloud-kerberos-trust/