ADFS を利用した非ルートドメインの Entra ID フェデレーション認証
オンプレミスにある Active Directory と、クラウド上の Entra ID を連携させる場合は、基本的に UPN (User Principal Name) を合わせる事が推奨されており、通常は オンプレミスにある Active Directory と、Entra ID で UPN を合わせるか、代替UPNサフィックスを用いてサフィックスを変更する。
しかしオンプレミス側の UPN 変更に伴い Kerberos 認証に影響を与える可能性を考慮し、代替ログインID (UPN以外の属性) で Entra ID と同期するパターンも存在しています。
公式ドキュメントから引用するなら、いまは下記3パターンがあります。
- AD FS の代替ログイン ID
- Microsoft Entra Connect の代替ログイン ID
- 代替ログイン ID としてのメール アドレス
ただし上記 “2”, “3” の構成は Hybrid Entra Join に非対応 (PRTが取得できない) だったり、プレビューであったり、別の課題が生じてしまうため、あまりおすすめはできません。
この記事では “1” のパターンで、オンプレミスにある .local を維持したまま、Entra ID と連携するための手順についてザッとメモしています、
目的
- 非ルートドメイン .local で構築された Active Directory ドメインを ADFS を用いて Entra ID / 代替ID によるサインインを行いたい。
構築・検証手順
- 検証は Azure 上で実施しています (Windows Server は適宜日本語化)
- 本番環境を想定するのであれば L/B, ADFS, WAP, etc… などの構成がありますが、下記では AD, ADFS 1台ずつの構成で内部からの認証で試しています。
- 参考 : 公式ドキュメントの全体構成例
オンプレミスの AD FS を Azure に拡張する
https://learn.microsoft.com/ja-jp/azure/architecture/reference-architectures/identity/adfs
事前に準備しておく情報
- Active Directory ドメイン名 : hogehoge.local ※適当な非ルートドメイン
- ADFS/WAP で利用する FQDN : (内部/外部のDNSで解決可能な FQDN、example.com など)
1. Active Directory ドメインの構成
- 前提条件
- Azure 上に Windows Server 2022 にて構成
- ドメイン名 : hogehoge.local ※非ルートドメインを指定して作成
- Active Directory 構成後、Azure VM / NIC の内部IPを静的にしています。
- Active Directory の構築手順については、ネット上に沢山の情報があるのでそちらを参照してください。
https://www.server-world.info/query?os=Windows_Server_2025&p=active_directory
2. Microsoft 365 テナントの準備
- 適宜 Microsoft 365 テナントを用意します。
- 用意したテナントには、カスタムドメインとして事前に準備していた FQDN を登録まで完了させます。
3. Active Directory Federation Services の構築
-
前提条件
- 前述の通り本番想定で構成する場合には、冗長化のためにロードバランサ等の導入を検討する必要があるが、今回は除いている (ADFS/WAP 1台構成)
- 構築対象として Azure VM デプロイ後、NIC の内部IPを静的に。 かつ DNS の向き先を 事前に構成した AD に向けている。
-
事前準備
-
TLS/SSL 証明書の準備
- ADFS/WAP で利用する FQDN に合わせて TLS/SSL 証明書 を用意する。 今回はADCSによるオレオレではなく Let’s Encrypt から取得した前提で進めています。
Posh-ACME / PowerShell を利用した Let's Encrypt / SSL証明書の取得
- ADFS/WAP で利用する FQDN に合わせて TLS/SSL 証明書 を用意する。 今回はADCSによるオレオレではなく Let’s Encrypt から取得した前提で進めています。
-
内部DNS へのドメイン登録
- ADFS (および WAP) は、内外から解決可能な FQDN で構成する必要があります。例えば内部から認証する場合 sts.example.com は 内部IP (例: 10.x.x.x) 、外部からアクセスする場合は DMZ に置いた WAP の 外部IP (グローバルIP) で向ける事で、内部からは ADFS 、外部からは WAP 経由でそれぞれ認証画面にたどり着く事になります。
- 今回は ADFS 単体で環境を立てているので、ADと同居しているDNSサービスに以下の手順でドメインを登録しました。
- Active Directory / DNS の前⽅参照ゾーンに、Microsoft 365 に登録した FQDN のゾーンを作成 (例: example.com)
- 次に内外からアクセスするための FQDN (例: sts.example.com) 、IPアドレスは ADFS として構成するサーバの プライベートIP を指定
-
Enable-PSRemoting の有効化
- 後の工程で必要となるが、Windows Server 2016 以降 ADFS 導入後ではアクセスが拒否されるようになったので、必ず事前に行う。
Enable-PSRemoting
- 後の工程で必要となるが、Windows Server 2016 以降 ADFS 導入後ではアクセスが拒否されるようになったので、必ず事前に行う。
-
TLS/SSL 証明書の準備
-
構築手順
- Active Directory Federation Services の構築手順については、ネット上に沢山の情報があるのでそちらを参照してください。
4. フェデレーション構成
- ADFS上の PowerShell を利用して Microsoft 365 とのフェデレーションを構成します。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Install-Module MSOnline Import-Module MSOnline Connect-MsolService Set-MsolADFSContext –computer <ADFSのコンピューター名) Convert-MsolDomainToFederated -DomainName <Microsoft 365 に登録したドメイン名>
- 実行後は Entra 管理センターのドメインのところでも フェデレーション が有効になった事がわかります。
5. ADドメインユーザの作成
- 今回は非ルートドメインのユーザをフェデレーション認証にする・・・という事が目的なので、AD側でテストユーザを幾つか作成しておく。
- イメージとしてはよくある 社員番号@hogehoge.local を想定
例 : 123456780@hogehoge.local, 123456781@hogehoge.local, 123456782@hogehoge.local - 各ユーザのメールアドレスに Entra ID で利用させたい ID を記述 (例: user01@example.com など)、これが Entra ID 側での UPN になる想定
6. 代替ログインID の設定
- ADFS にて代替ログインID を “mail属性” に設定する。
Get-AdfsClaimsProviderTrust
Set-AdfsClaimsProviderTrust -TargetIdentifier "AD AUTHORITY" -AlternateLoginID mail -LookupForests <FQDN、例: hogehoge.local>
7. Active Directory / UPNサフィックスの追加
- Entra Connect 構成時に UPNサフィックスがないとドメインを確認するところでコケるので UPNサフィックスを追加する。
- Active Directory ドメインと信頼関係 → プロパティ → UPNサフィックスとして、Microsoft 365 に登録したカスタムドメインを追加
8. Entra Connect 構成
- 前提条件
- ADFS でフェデレーションをする場合は、ID の同期だけでも動作はするが、一旦パスワードハッシュ同期で構成しています。
- Entra Connect は本来は Active Directory と別の Windows Server で立てる事が推奨されますが、今回は手抜きして AD と同じ VM に入れています。
-
構築
- Entra Connect 構成時には UPN 名に “mail” 属性を選択して同期
- Hybrid Entra Join の構成
- Entra Connect のデバイス構成の設定を変えて、Hybrid Entra Join も有効にしておく
- Entra Connect 構成時には UPN 名に “mail” 属性を選択して同期
同期結果の確認、オンプレミス Active Directory 上では 社員番号@hogege.local だか、Entra ID 上では Mail属性 を元に user01@example.com 的なIDで作成されている。
9. Windows 11 Client の準備とドメイン参加
- Windows 11 を用意して、ドメインに参加した状態にする。
- Edge ブラウザを起動するなり、Office.com に開いてサインインする画面を開くと ADFS にリダイレクトされ認証される事がわかる。
- サインインをしたユーザで “dsregcmd /status” を実行する事で以下の事がわかる。
- “AzureAdJoined” と “DomainJoined” が Yes になり Hybrid Entra Join が出来ている。
- .local ユーザのまま PRT 取得まで出来ている事 (AzureAdPrt : YES) がわかる。
参考情報・備忘メモ
大まかな認証フロー
こんなイメージ、ADFS認証後は "Mail属性" でトークンを戻す = Entra ID 側で NameID が UPN と一致 → 同一ユーザと判断し、Hybrid Join 完了し、PRT も受け取れる。
以下の記事も参照するとイメージしやすいかも?
UserPrincipalName (UPN) と sAMAccountName
端的に述べると
-
UserPrincipalName (UPN)
- Windows 2000 以降で導入された比較的新しい方の ログインID 形式
- 例:
xxxx@domain.com
- 主に Kerberos 認証で利用される(Entra ID 連携時など、モダン環境で主として使用)
-
sAMAccountName
- Windows Server 2000 より前の ログオンID 形式
- 例:
domain\xxxx
(古くからある Windows の形式) - 過去の経緯から NTLM と共にに使われることが多かったが、Kerberos 認証も可能
UPN は Windows Server 2000 以降のユーザログインや、Entra ID との同期時に主となる ID として扱われる。 一方 sAMAccountName はログイン後の Profile フォルダ名などに使われるため、現状でも設計・構築時に影響を与える要素となっている。
どちらの形式でも Active Directory 上では同一の SID を持つ "同一ユーザ オブジェクトの別名" として扱われるため「UPN を使う場合」「sAMAccountName を使う場合」という形で新旧の棲み分けが行われているイメージ (で合っていると・・・と思う・・・)
下記の記事も参考にしてください。
Discussion