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

Windows Server 2012のActive Directoryの新機能のひとつに、「グループ管理サービスアカウント」(通称gMSA)というのがあります。Windows Server 2012が登場した直後には、私の周りでgMSAを使うという話を聞くことがなかったので、どうでもよい?と思われていたところがあったように思います。

しかし、Windows Server 2012 R2では使う機会が増えるのではないかと思っています。
なぜなら、Windows Server 2012 R2のADFSでは、使う・使わないに関わらず、gMSAの設定(の一部)を行わなければならないからです。

下の画面は、Windows Server 2012 R2でADFSを[役割と機能の追加]から追加し、[Active Directoryフェデレーションサービス構成ウィザード]を実行している様子です。
ウィザードでは、ご覧のようにADFSのサービスアカウントとして何を使うか?を選択する画面が登場します。

fs010

このとき、gMSAの設定を行っていないと、画面内に警告が表示されます。
(上の画面内にgMSAを設定していないことを示す警告表示が出ます)
テスト環境だったら、上の画面のように「とりあえずAdministratorにしておけば良いよ」と考えますが、
実運用環境ではそうはいきませんし、ましてや警告を無視して進めるわけにはいかないですよね。

そこで、これを機会にgMSAについて確認をしておきましょう。

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

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

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

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

グループ管理サービスアカウントの設定方法

公式サイトをはじめ、他のサイトでも紹介されているので、ここでは簡単に紹介しておくにとどめましょう。

Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10))

New-ADServiceAccount -Name <サービスアカウント名> –DNSHostName

Set-ADServiceAccount -Identity <サービスアカウント名> `
-PrincipalsAllowedToRetrieveManagedPassword <ホスト名>$

Install-ADServiceAccount -Identity <サービスアカウント名>

以上により、グループ管理サービスアカウントが出来上がります。
このとき、ポイントになるのがSet-ADServiceAccountコマンドレットで、ホスト名を指定している点。

ホスト名を指定することにより、そのホスト名だけでサービスアカウントが利用できるように限定でき、セキュリティを向上させるメリットがあります(前のトピックでもお話ししたとおりですね)。

参考までに「-PrincipalsAllowedToRetrieveManagedPassword <ホスト名>$」の部分は、
-PrincipalsAllowedToRetrieveManagedPassword sv1$,sv2$
と書くと、sv1とsv2の2台のサーバーだけで利用可能なサービスアカウントという指定が可能です。

ところで、KdsRootKeyってなに?

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

だから、New-ADServiceAccountコマンドレットを使ってサービスアカウントを作る前にAdd-KdsRootKeyコマンドレットを実行し、カギを作っているのですね。

また、KdsRootKeyは実行しても、すぐに生成されない場合があるので、わざとEffectiveTime ((get-date).addhours(-10))と実行し、過去の時間を指定することで、すぐにカギが生成されるように構成することが一般的のようです。

■ ■ ■

ここまで、gMSAというサービスアカウントについて見てきました。もう一度、ADFSに話を戻して、ADFSのサービスアカウントとして指定する場合、どちらを使うのがよいのか考えてみましょう。

上の画面にもあったように、ADFSのサービスアカウントには次の2つを指定することができます。

・gMSA
既存のドメインユーザーアカウント

既存のドメインユーザーアカウントは面倒くさいgMSAの設定をしなくて良いので、一見すると楽なように見えます。しかし、パスワードを決め打ちしてしまっているので、ユーザーアカウントのパスワード変更があると、「Active Directoryに登録されたユーザーのパスワードは変更されたけど、サービスに登録されたユーザーのパスワードは変更されない」という問題が起きます。
このような問題を解決するためにgMSAがあるわけで、面倒な設定を一度だけ行えば、パスワードの管理はActive Directory内部で行ってくれるので、ADだけでパスワードが変更されるような事態には、ならなくて済むのです。

話は長くなりましたが、ADFSでサービスアカウントを指定するなら、gMSAを利用するのが良いのではないかと私は考えています。