1.はじめに
本記事は、Entra IDによる認証をADFS(Active Directory Federation Services)によって、フェデレーションしてみた記事です。
ADFSを構成するには、「Windows Serverの役割と機能」から地道に作る方法もありますが、「Entra Connect (旧名:Azure AD Connect)」を利用して、ADFSを構成することも可能です。言い換えると、Entra Connect側がリモートでADFSを作ってくれます。本記事では、そんな手順を記載します。
補足
本記事は、プライベートに閉じた構成となり、ADFSプロキシこと、WAP(Web Appliccation Proxy)を考慮しておらず、社内ユーザ専用の構成となっています。
※社外から社内へのインバウンド通信がない構成となっていますので、気軽に試せます。
2.用語補足
いろいろな言葉が出てきますので、初めに用語補足をします。
2-1.フェデレーションとは
MSのLearnによると、フェデレーションとは、信頼が確立されたドメインのコレクションのことです。
私なりに言い換えますと、フェデレーションとは、シングルサインオン(一度認証を実施することで、その認証情報で認可されるサービスを利用できる機能)を実現するための"仕組み"です。
この"仕組み"というのが、異なるセキュリティ境界の間で、適切な認証トークンだけを扱えるようにしておくことであり、”信頼関係”と呼びます。
例えば、ADFSを利用した場合では、Active Directoryにサインインした後において、生成されるチケット(TGT: Ticket Granting Ticket)をもとに、ADFSがクラウドで利用可能なチケット(=トークン)を生成します。このクラウドで利用可能なチケットを生成するために、事前に、ADFSとクラウド側が、信頼関係を結びます。このような信頼関係を確立することが、フェデレーションです。
例えば、Azureポータルにログインする場合を考えてみます。
この場合、エンドユーザからの見え方としては、以下画像のように、Entra IDへの認証時に、ユーザ名を入力するとADFSサーバ側にリダイレクトされます。
すると再度Azure側に戻り、サインインを完了することができました。
このように、フェデレーションを構成しておくことで、ADFS側で一元的にIDの認証をすることができます。
2-2.ADFSとは
ADFSとは、Active Directory Federation Servicesの略称となり、Windows Serverで提供される機能の1つです。前述のフェデレーションを実現することができます。
詳しくは、国井さんが公開されているADFSトレーニングテキストをご覧いただくと、良いかと思います。
2-3.ADCSとは
ADCSとは、Active Directory Certificate Servicesの略称となり、Windows Serverで提供される機能の1つです。プライベートな証明機関を作ることができ、証明書の発行をすることができます。
ADCSには、スタンドアロンCAとエンタープライズCAの二種類があります。エンタープライズCAはドメイン参加しているサーバで構築する必要があり、証明書テンプレートを用いて、証明書を発行することができます。対して、スタンドアロンCAは証明書テンプレートがなく、証明書発行要求(CSR)に基づき、管理者の判断により証明書を発行します。
今回、ADFSを構築するにあたって、ADCSの証明書を利用する必要があるため、ADCSを構築しています。
2-4.Entra Connectとは
Entra Connectとは、ADとEntra ID間のID同期を実現するツールで、旧称はAzure AD Connectです。よく利用される用途としては、AD上のID情報(ユーザやコンピュータのオブジェクト)をEntra ID側に同期させるというもので、Entra Hybrid Joiedを構成する際にも必要となります。
ただ今回は、Entra Connectを利用して、ADFSを構成することができる機能を取り上げたいと思います。以下画像のように、Entra Connectのインストールウィザードに「ADFSとのフェデレーション」という選択画面があり、こちらを利用すると、新規でADFSも作ることができます。
3.環境準備
3-1.環境について
今回作成する環境は、Hyper-V上に、Windows Server2022を3台用意しておきます。
検証ということもあり、サーバ台数を少なくした簡易構成です。(実環境では非推奨です)
初期状態としては、
・1台は、ADとADに統合されたDNS構成だけ実施
・残りの2台は、未構成(ドメイン参加前、Windows Update済み)
となっています。
3-2.カスタムドメイン
Entra IDのフェデレーションを実現するためには、カスタムドメインが必要になります。
テナント作成時は、Entra IDの初期ドメインは、[固有].onmicrosoft.comというドメインになりますが、こちらの初期ドメインではなく、フェデレーション用に、任意のドメイン(例:example.com など)を追加しておく必要がありますので、事前準備しておきます。
ちなみに、以下記事を参考にいただくとよいかもしれません。
以下画像は、今回のフェデレーションの設定が完了した時点のEntra 管理センターのカスタムドメイン名のページとなります。
フェデレーション構成を実現すると、あるカスタムドメインに対して、フェデレーションのチェックマークがつきます。これによって、そのカスタムドメインを有するユーザだけが、Entra IDによる認証時に、フェデレーションしているシステム(今回は、ADFS)にリダイレクトされます。
4.ADCSの作成
4-1.ADFSとADCSが使用するアカウントの作成
まずは、AD上で、「Active Directory ユーザとコンピュータ > Users 」から、ADFS兼ADCS用のサーバが利用するドメインアカウントを作ります。
このとき作成するアカウントは、Domain AdminsとEnterprise Adminsのグループに所属させます。理由としては、Entra Connectのインストールに、Enterprise Adminsの権限を利用して、Entra ConnectがAD(ディレクトリ)に接続し、Domain Adminsの権限を利用して、ADFSを構成しています。
さらに、ADFSサーバ上に、ADCSも同居させる予定となっており、ADCSのインストールにも上述の権限が必要となります。
アカウントの権限に関する補足です。
証明機関をインストールする際に、Domain AdminsとEnterprise Adminsのグループに所属させておく必要があります。
さらに、Entra ConnectのインストールにもEnterprise Adminsのグループに所属させておく必要があります。
次に、ADFSサーバのAdministratorsグループを確認し、Domain Adminsがあることを確認しておきます。
AD FS が使用するADFS用のアカウントを利用して、W2022-PGW-ADFSをドメイン参加します。
ADFSサーバ上で、「設定 > システム > 詳細情報 > システムの詳細設定 > コンピュータ名 > 変更 」を選択します。「ドメイン」にチェックを入れて、対象のドメイン名を入力した後、「OK」を押します。
なお、本ADFSサーバのDNSは、ADに向けており、AD上のDNSを利用しています。そのため、ドメイン参加も問題なく可能となっています。
ポップアップがでてきたら、ADFS用のドメインアカウントの情報を入力します。
入力完了後、ADFSサーバを再起動し、ADFS用のドメインアカウントでログインします。なお、このタイミングで、Active Directoryのユーザーとコンピューターに、コンピュータオブジェクトが生成されています。
4-2.認証局(CA)の作成(役割と機能の追加ウィザード)
検証用途のみということで、ADFSサーバとADCSは、同一サーバ上に構成しています。
サーバマネージャーより、「役割と機能の追加」をクリックしウィザード画面に進みます。
「役割ベースまたは機能ベースのインストール」を選択します。
「サーバープールからサーバーを選択」を選択します。
「Active Directory 証明書サービス」を選択します。
そのまま、「次へ」を選択します。
そのまま、「次へ」を選択します。
「証明機関」にチェックを入れた状態で、次に進みます。
「インストール」をクリックします。
問題なければインストールが完了しますので、「閉じる」をクリックし、サーバマネージャーに戻ります。
サーバマネージャーでは、右上の旗を選択し、「対象サーバーにActive Directory 証明書サービスを構成する」を選択し、残りの設定を実施していきます。
4-3.ADCSの構成ウィザード
今回ADFS用に作った資格情報が入力されていることを確認し、「次へ」を選択します。
そのまま「次へ」を選択します。
セットアップの種類は2種類ありますが、「エンタープライズCA」を選択します。
「ルートCA」を選択します。画像に記載されていますが、今回の構成のように、上位のCAがない場合は、ルートCAを選ぶことになります。
補足
今回の構成では、ADCSがルートCAとなっており、ADFS用の証明書を発行しています。そして、このADCSが発行した証明書をエンドポイントが信頼するために、エンドポイント側の「信頼されたルート証明機関」に、ルートCAの証明書を登録します。
実際には、ルートCAはオフライン環境で、スタンドアロンCAで構成し、下位CAはオンライン環境で、エンドポイントに証明書を発行することができるようにすることが多いです。
理由はオンラインである以上、セキュリティリスクがありますので、複数階層を構成することで、リスクを軽減するためとなります。仮に下位CAでセキュリティ侵害が発生した場合は、上位のCAの証明書を無効化することで、下位CAの証明書も無効化することができます。
新規にCAを構成するため、「新しい秘密キーを作成する」を選択します。
どちらでもよいですが、「CAが秘密キーにアクセスするときに、管理者による操作を許可する」にチェックを入れて進めています。
初期状態では、CAの共通名に、「ドメイン名-サーバー名-CA」という共通名(CN)が設定されています。こちらは変更可能です。
規定値にしています。発行する証明書の有効期間は、この設定値よりも短くする必要があります。
4-4.証明書の作成
証明機関を作りましたので、次はADFSの証明書を作成していきます。
スタートメニューの「証明機関」から「証明書テンプレート」の右クリックし、「メニュー >管理」をクリックしましょう。
「証明書テンプレートコンソール > Webサーバー」を選択し、右クリック、「メニュー >テンプレートの複製」をクリックします。
証明書のプロパティ情報は以下のようにしています。
[秘密キーのエクスポートを許可する] のオプションが有効になっていることで、端末に登録されている証明書は、[証明書のエクスポート ウィザード] より、秘密キー付きで証明書(pfx 形式ファイル)をエクスポートすることができます。別の端末で証明書を利用したい場合には、このオプションを有効にします。
そして、セキュリティには、今回構築しているADFSサーバとADサーバの両方を登録し、アクセス許可に「登録」を追加します。
作成した証明書テンプレートを発行していきます。
「証明機関 > 証明書テンプレート > 新規作成 > 発行する証明書テンプレート」を選択します。
先ほど、作成した証明書テンプレートを選択し「OK」をクリックしましたら完了です。
それでは、証明書を作っていきます。「certlm.msc」を検索窓から表示させます。
「個人 > 証明書」を右クリックし、「すべてのタスク > 新しい証明書の要求」を選択します。
そのまま「次へ」を選択します。
証明書の登録ポリシーでは「Active Directory 登録ポリシー」を選択し、「次へ」を選択します。
青色の「この証明書を登録するには情報が不足しています。....」を選択します。
サブジェクト名では、「共通名」を選択し、値に、ADFSサーバの「フェデレーションサービス名」を入力し、「追加」をクリックします。
別名には、「DNS」を選択し、ADFSサーバのFQDNを入力し、「追加」をクリックします。
入力が完了しましたら、対象のテンプレートにチェックを入れて、「登録」をクリックします。
「certlm.msc」で、「個人 > 証明書」を確認しますと、証明書が追加されていることがわかります。
複数あって分かりにくい場合は、証明書テンプレートの列を確認してみます。
「すべてのタスク > エクスポート」を選択します。
ここでは、パスワードを選ぶ必要があります。
ADFS側にインポートするタイミングで、「グループまたはユーザ名」にした場合は、NGでした。
「参照」をクリックして、エクスポートする際のファイル名とエクスポート先を設定しましょう。
これで証明書のエクスポート完了です。発行したサーバ証明書は、Entra Connectをインストールする際に利用します。そのため、Entra Connectをインストールする予定のADサーバに置いておきます。
次は、ルート証明書をエクスポートします。このルート証明書は、ADFSを利用するエンドポイントにインストールす予定となります。
「certlm.msc」から、「信頼されたルート証明機関 > 証明書」から、ルート証明書を右クリックし、「すべてのタスク > エクスポート」を選択しましょう。
「DER encoded binary X.509」を選択します。
形式 | 拡張子 | 補足 |
---|---|---|
DER encoded binary X.509 | .cer | Windowsで利用されることが多いバイナリファイル |
Base 64 encoded X.509 | .cer / .pem | Linuxで利用されることが多い。DER 形式をBase 64でエンコードしたテキストファイル |
Cryptographic Message Syntax Standard -PKCS #7 証明書 | .p7* | デジタル署名やS/MIMEなどで利用される。複数の証明書をアーカイブのようにまとめることができる |
Personal Information Exchange - PKCS #12 | .pfx | 秘密鍵と一緒にエクスポートする際に使われる |
参考:【Windows】証明書のエクスポート形式の違い, 秘密キーのセキュリティについて
https://milestone-of-se.nesuke.com/sv-basic/windows-basic/certificate-export-format/
完了した証明書は、ADFSを利用するエンドポイントの「certlm.msc > 信頼されたルート証明機関」にインストールしておきます。
5.Entra Connectを利用してADFSの作成
ADCSやADCSによる証明書の作成が終わりましたので、Entra Connectを利用したADFSの作成を実施していきます。
ADFSはEntra Connectをインストールする際のウィザード中に作成することができます。そのため、Entra Connectをインストールするサーバ(今回はADサーバ)から、リモートでADFSサーバの操作ができるように権限を与えておくことが必要な点に注意する必要があります。
5-1.WinRMの有効化
ADFSサーバ上で、以下コマンドを実行しておきます。
# リモート操作許可
winrm quickconfig -force
# 接続先の登録
Set-Item WSMan:\localhost\Client\TrustedHosts * -Force
# スクリプト実行許可
Set-ExecutionPolicy RemoteSigned -Force
また、Windows Firewallでは、以下のような行に該当します。
注意
リモート操作できる機能となりますので、プライベート環境でのみ実行してください。パブリックな環境では、適切に接続先を制限する必要があります。
5-2.Entra ConnectのインストールとADFSの作成
Entra Connectは、以下URLよりダウンロードすることができます。
ユーザーサインオン方式に、「AD FSとのフェデレーション」を選択し、「次へ」をクリックします。
Entra IDのユーザ情報を入力します。必要なロールは、グローバル管理者またはハイブリッドIDの管理者です。
ポップアップで、「アカウントにサインイン」が出てきますので、必要情報を入力します。
対象となるドメイン名をフォレストの欄に入力し、「ディレクトリの追加」をクリックします。
Enterprise Adminの権限を有したアカウント情報を入力します。今回は、ADFS兼ADCS用に作成したドメインアカウント情報を入力します。
構成済みディレクトリが追加されたことを確認して、「次へ」を選択します。
ADからEntra IDに同期させる対象となるドメインとOUを指定します。
今回はフェデレーションさせるユーザが含まれているOU等をチェックします。
そのまま「次へ」をクリックします。
なお、各項目に関する説明は以下リンクとなります。
また、ユーザの一意性に関しては、Entra IDにすでにユーザがある場合において、同一のユーザがADにも存在する場合も考慮する必要があります。その場合、ソフトマッチ等を利用します。
同期対象のフィルタリングを実施する場合は利用するが、今回は利用しないため、そのまま「次へ」をクリックします。
「パスワードハッシュ同期」と「パスワードの書き戻し」にチェックを入れ、「次へ」をクリックします。
ドメイン管理者の資格情報を入力します。こちらもADFS用に作ったアカウントを入力しておきます。
ここで、先ほど作ったADFS用の証明書をアップロードします。
ADFSのFQDN情報、または、IPアドレスを入力します。問題なければ、選択したサーバーに表示されます。
WAPに関しては、特に追加せず、「次へ」を選択します。
もし、公開可能なサーバがあれば、構成することも可能ですが、今回はプライベートなネットワークのみとなるので、作成せず、「次へ」をクリックします。
ADFSには、通称gMSA(msDS-GroupManagedServiceAccount)と呼ばれるグループ管理サービスアカウントが必要となります。これは複数のサーバーで動かすサービスに共通のサービスアカウントを使いたいときに使用します。
そのため、ここでgMSAを作るために、Enterprise Adminsの資格をもつユーザ(ADFS用の作ったドメインアカウント)の情報を入力します。
以上で構成の準備は完了となりますので、「インストール」をクリックします。
少し待つと構成が完了します。「次へ」をクリックすると、「フェデレーションの接続性の検証」ができます。
5-3.サインオンページの有効化
ADFSサーバ上で、以下URLにアクセスするとエラーになっています。
https://localhost/adfs/ls/IdpInitiatedSignOn.aspx
そのため、以下コマンドを実行し、エラーを解消しておきます。
Set-AdfsProperties -EnableIdPInitiatedSignonPage $true
また、セキュリティ保護なしと表示されているので、ADFSサーバにアクセスするエンドポイントに、ルート証明書をインストールしておきます。
5-4.フェデレーションサービス名の名前解決
ADFSの管理から、「サービス」を右クリックし、「フェデレーションサービスのプロパティの編集」から、フェデレーションサービス名を確認します。このフェデレーションサービス名で、名前解決をすることができるようにしておく必要があります。
ADサーバ上のDNSマネージャを開きます。
ドメイン内のコンピュータに関しては、自動登録されていますが、ADFSサーバで利用するフェデレーションサービスのドメイン情報は未登録なので、登録しておきます。
5-5.動作確認
それでは、エンドポイント側で、azure portalにログインしてみましょう。
以下のように最初は、クラウド側のサインインの認証が発生しますが、ユーザ情報を入れると、ADFS側にリダイレクトされます。パスワード情報を入力して、「サインイン」をクリックすると、無事azure portalにログインできました。
6.おわりに
現在ではADFSを利用するというよりは、Entra IDといったIDaaS側で、認証・認可を統制する方が、一般的になっているかとは思いますが、Entra Connectを利用して、ADFSを作るのは、改めてWindows Serverを勉強するのにちょうどよいかとは思います。