Active Directory Federation Serviceをつくる

スタンドアローンのADFSを作成する方法の手順を確認します。Microsoftの以下公式手順を参考に確認していきます。

フェデレーション サーバー ファームの展開

環境

利用するWindowsサーバーは2019です。

Domain Serviceは既に作成されているものとして、本手順は記載しています。

構成

今回作成するADFS環境のイメージ図です。環境はAWSを利用しています。

f:id:goodbyegangster:20200406172028p:plain

KdsRootKeyの作成

Kds(Key Distribution Service)RootKey とは、Federation Serviceの管理アカウントとなるActive Directoryグループ管理サービスアカウント(gMSA) で利用される鍵情報となります。

全く意味不明だったのですが、下記のMicrosoft MVPの方のブログが大変参考になりました。

グループ管理サービスアカウント

グループ管理サービスアカウントとは、Active Directoryのサービスを管理するアカウントの概念のようです。

グループ管理サービスアカウント(以下、gMSA)とは、複数のサーバーで利用可能なサービスアカウントのことで、複数のサーバーで動かすサービスに共通のサービスアカウントを使いたいときに使用します。

これまでマイクロソフトでは、LocalSystem、LocalService、NetworkServiceのようなデフォルトで用意されるサービスアカウントや、[Active Directoryユーザーとコンピューター]から定義できるサービスアカウントなどがありました。

しかし、こうしたサービスアカウントとgMSAが決定的に異なるのは、gMSAを利用できるサーバーを限定できる点にあります。

そして、KdsRootKeyとは、そのグループ管理サービスアカウントで利用されるパスワードの生成に利用されているらしいです。

KDSとはKey Distribution Serviceの略で、gMSAのパスワードを生成するために使われるサービスです。gMSAの設定方法を見るとわかると思うのですが、サービスアカウントのパスワードは自分で設定することはなく、Active Directoryによって自動的にパスワードを生成します。このとき、パスワードは完全にランダムに作られるわけではなく、KDSによって作られたカギ(KdsRootKey)を使って作られます。

KdsRootKeyは通常事前に作成されていないため、今後作業のために作成しておきます。Active Directory ドメインコントローラーにAdmin権限にてログインします。

以下のPowershellを実行して作成します。

> Add-KdsRootKey -EffectiveTime ((Get-Date).Addhours(-10))

Add-KdsRootKey

確認のコマンド。

> Get-KdsRootKey

AttributeOfWrongFormat :
KeyValue               : {87, 239, 163, 201...}
EffectiveTime          : 2020/04/04 20:42:04
CreationTime           : 2020/04/05 6:42:04
IsFormatValid          : True
DomainController       : CN=EC2AMAZ-9SJ2Q34,OU=Domain Controllers,DC=example,DC=com
ServerConfiguration    : Microsoft.KeyDistributionService.Cmdlets.KdsServerConfiguration
KeyId                  : e87f804a-a8e9-041e-79a1-5b4976072d88
VersionNumber          : 1

Get-KdsRootKey

Federation Serverをドメインに参加

Federation Serviceを作成するWindowsサーバー(Federation Server)をActive Directoryドメインに参加させます。今回は、併せてWindows Firewallの設定も外してしまいます。

サーバー証明書の作成

ADFSはADDS内の情報を外部に連携するため、内部的に443/TCPのWEBサイトを作成するのですが、このサーバー証明書はそのWEBサイトで利用するものです。本来であれば、ちゃんとした認証局により発行された証明書を利用すべきですが、今回は自己署名証明書で済ませてしまいます。

Windowsにおける自己署名証明書の作成手順はこちら。pfx形式の証明書を作成しておきます。

Windowsにて自己署名証明書の作成

作成する証明書に関して、MSマニュアルには以下とあるのですが、

サブジェクトの別名には、enterpriseregistrationの値が含まれている必要があります。

AD FS 用に SSL 証明書を登録する

色々なサイトを見ると、Office365にアクセスするために必要な設定であるだけで、単純なADFSの動作では不要のようです。

ADFSサーバーにデバイス登録するために、Workplace Joinを利用するには、enterpriseregistration.<ドメイン名>という名前がSubject Alternative Name (SANs) に含まれる証明書を用意する必要があったため、証明書取得の敷居が高いという課題がありました。

ADFSでデバイス認証を実装

Federation Serviceの役割をインストールする

Federation ServerにあたるWindowsサーバーに、Federation Serviceをインストールします。ドメインAdminのユーザーにてログインし、 役割と機能の追加 のウィザードを起動します。

f:id:goodbyegangster:20200406172305p:plain

役割ベースまたは機能ベースのインストール を選択します。

f:id:goodbyegangster:20200406172344p:plain

Federation Serviceをインストールしたいサーバー(今ログインしているサーバー)を選択します。

f:id:goodbyegangster:20200406172400p:plain

Active Directory Federation Services を選択します。

f:id:goodbyegangster:20200406172414p:plain

機能のページでは追加で何か設定する必要ありません。

f:id:goodbyegangster:20200406172429p:plain

説明が書いてあるだけなので、ここもそのまま 次へ を選択。

f:id:goodbyegangster:20200406172451p:plain

必要に応じて対象サーバーを自動的に再起動する にチェックを入れて、インストールを開始します。

f:id:goodbyegangster:20200406172509p:plain

インストールできました。

f:id:goodbyegangster:20200406172526p:plain

AD FS 役割サービスをインストールする

Federation Serviceを設定する

続いて、Federation Serviceを設定します。サーバーマネージャーに通知が届いているはずですので、 このサーバーにフェデレーションサービスを構成します。 をクリックします。

f:id:goodbyegangster:20200406172850p:plain

フェデレーションサーバーファームに最初のフェデレーションサーバーを作成します を選択します。

f:id:goodbyegangster:20200406172904p:plain

ここは構成の設定を実施するユーザーを指定するだけなので、現在ログインしているドメインAdminのユーザーのままでOKです。

f:id:goodbyegangster:20200406172923p:plain

インポート から、事前に用意したpfx形式のサーバー証明書をインポートします。 フェデレーションサービス表示名 は、利用者がADFSのSSO画面にアクセスした時に表示される文字列となります。

f:id:goodbyegangster:20200406173040p:plain

グループ管理サービスアカウントを作成します を選択し、適当なアカウント名を設定します。ここが前述のgMSAの部分となります。

f:id:goodbyegangster:20200406173055p:plain

Windows Internal Databaseを使用してサーバーにデーターベースを作成します。 を選択します。

Federation Serverを複数台作成して、そのレプリケーションを実施する場合、何らかのデータストアが必要になるようです。利用できるもとして、Windows同梱の Windows Internal Database(WID) か、SQLServerを利用できるようです。両者の要件の違いはこちらで確認できます。

どのタイプの AD FS 構成データベースを使用するかを決定する

f:id:goodbyegangster:20200406173601p:plain

確認画面です。

f:id:goodbyegangster:20200406173615p:plain

前提条件の確認画面です。表示されている警告を考慮して、前述の Add-KdsRootKey コマンド実行時に、 -EffectiveTime ((Get-Date).Addhours(-10)) パラメーターを付与して実行しています。

f:id:goodbyegangster:20200406173628p:plain

諸々警告が表示されていますが問題ありません。Federation ServerのOS再起動を実施して、Federation Serverの設定は完了です。

f:id:goodbyegangster:20200406173641p:plain

フェデレーション サーバーを構成する


正しく設定できているかどうかは、Windowsイベントユーアーより確認できます。 アプリケーションとサービスログ -> ADFS -> Admin とすすんで、イベントID100のログが出力されている事を確認します。

f:id:goodbyegangster:20200406173654p:plain

DNSコンテンツサーバーにレコードの登録

Federation ServerのIPアドレスを、DNSレコードとして登録します。サーバー証明書を作成する際に、コモンネームを設定しているはずですので、FQDNを合わせてあげてください。

企業 DNS をフェデレーション サービスと DRS 用に構成する

ADFSの動作確認

登録したFederation ServerのURLにアクセスしてみて、レスポンスが返るかどうか確認します。アクセス先URLは https://(Federation Server)/adfs/fs/federationserverservice.asmx となります。

$ curl -k https://adfs.goodbyegangster.com/adfs/fs/federationserverservice.asmx
<?xml version="1.0" encoding="utf-8"?>
...
</wsdl:definitions>

今回は自己署名証明書を利用しているため、証明書のエラーが出るかもしれませんが、レスポンスが帰ってくるはずです。

Windows Server 2012 R2 フェデレーションサーバーが動作していることを確認する