Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Active DirectoryでKerberos認証用のキータブファイル(keytab)を作成する方法

多くのLinuxサービス(Apache、Nginxなど)は、keytabファイルを使用することで、パスワードを入力せずにActive Directory上でKerberos認証を行うことができます。keytabファイルには、Kerberosプリンシパルの名前と、それに対応する暗号化済みの鍵(Kerberosパスワードから取得)が保存されています。この記事では、ktpassツールを使用して、Active Directoryアカウントに紐付けられたSPNのkeytabファイルを作成する手順を解説します。

サービスアカウントの作成

keytabファイルを必要とするサービスには、通常、専用のActive Directoryユーザーアカウントを作成します。ただし、コンピューターオブジェクトを使用することも可能です。サービス名はアカウントにバインドされ(ServicePrincipalNameSPN)、SPNはKerberos認証においてサービスインスタンスをADアカウントにマッピングするために使用されます。この仕組みにより、アプリケーションはユーザー名を知らなくてもサービスとして認証できます。

まず、ADにサービスアカウントを作成し、既知のパスワードを設定します。アカウントは、GUIのADUCコンソール(dsa.msc)から作成するか、PowerShell(Active Directoryモジュール)のNew-ADUserコマンドレットで作成できます。

New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "web@test.com" -Path "OU=Services,OU=Munich,OU=DE,DC=test,DC=com" –AccountPassword (ConvertTo-SecureString "Sup6r!Pa$s" -AsPlainText -force) -Enabled $true

次に、GUIコンソールまたはPowerShellで、サービスアカウントに対して「ユーザーはパスワードを変更できない」と「パスワードを無期限にする」のオプションを有効にします。

Get-ADUser web|Set-ADUser -PasswordNeverExpires:$True -CannotChangePassword:$true

SPNをアカウントにバインドする

次のステップでは、サービスプリンシパル名(SPN)をユーザーアカウントにバインドします。この手順は、keytabファイル作成時にktpassが自動的に実行するため、本来は個別に行う必要はありません(ここでは、処理の流れを理解しやすくするために実行します)。

以下のコマンドでSPNレコードをwebアカウントにバインドします。

setspn -A HTTP/www.test.com@test.com web

ADユーザーに関連付けられたSPNレコードの一覧を表示して確認します。

setspn -L web

ktpassでkeytabファイルを作成する

keytabファイルを作成するには、以下のコマンドを使用します。

ktpass -princ HTTP/www.test.com@TEST.COM -mapuser web -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass Sup6r!Pa$s -target mundc01.test.com -out c:\share\web.keytab

Successfully mapped HTTP/www.test.com to web.
Password successfully set!
Key created.
Output keytab to c:\share\webt.keytab:
Keytab version: 0x502
keysize 53 HTTP/www.test.com@test.com ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x73f868856e046449)

このコマンドにより、HTTP/www@test.comサービスのSPNレコード用のkeytabファイル(c:\share\webt.keytab)が作成されました。SPNレコードは、指定したパスワードでwebアカウントにバインドされています。

サービスのSPNレコードが正常に作成されたことを確認します(手動で作成していない場合)。

setspn -Q */www.test.com@test.com

SPNレコードが見つかり(Existing SPN found!)、webアカウントにバインドされていることがわかります。

keytabファイルの内容を確認する

Windowsにはkeytabファイルの内容を表示する組み込みツールはありません。ただし、コンピューターにJava JREがインストールされていれば、Javaディストリビューションに同梱されているklist.exeを利用できます。

cd "c:\Program Files\Java\jre1.8.0_181\bin"
klist.exe -K -e -t -k c:\PS\web_host.keytab

Key tab: c:\PS\web_host.keytab, 5 entries found.

keytabファイルの内容を確認すると、SPN、鍵、タイムスタンプ、暗号化アルゴリズム、および鍵のバージョン(KVNO — Key Version Number)が表示されます。

keytabファイルを作成すると、ktpassはユーザーアカウントのmsDS-KeyVersionNumber属性の値をインクリメントし(ADの属性エディターで確認可能)、その値をkeytabテーブルのKVNOとして使用します。

パスワード変更時の注意点

アカウントのパスワードを変更すると、属性値が1つ増加し、以前のKVNOを持つすべてのkeytabエントリが無効になります。これは、新しいパスワードが古いパスワードと完全に同一であっても同様です。ADのユーザーパスワードを変更した場合は、keytabファイルを再生成する必要がある点に注意してください。

複数のSPNをkeytabに追加する

1つのkeytabファイルには、異なるSPNの鍵を複数保存できます。追加のSPNと鍵は、ktpassのパラメーター(-in-setupn-setpass)を使用してkeytabファイルに追加します。

まとめ

作成したkeytabファイルの活用方法は、適用するサービスによって異なります。たとえば、Zabbixでkeytabファイルを使用して透過的なSSOユーザー認証を実現することなどが可能です。また、keytabファイルのセキュリティ管理も忘れないでください。keytabファイルの内容を読み取ることができる人物は、ファイル内の任意の鍵を利用できてしまうため、適切なアクセス制御が重要です。

  1. ZabbixでActive Directory連携のシングルサインオン(SSO)認証を構築する方法【Kerberos設定手順】

    本記事では、Kerberosを使用して、Zabbix 4.0以降とActive Directoryを連携させた透過的なSSO(シングルサインオン)認証を段階的に構築する手順を解説します。最終的なゴールは、ユーザーが資格情報を入力することなく、Zabbixのフロントエンドに自動ログインできる状態を作ることです。そのためには、ユーザーがZabbixに登録されたActive DirectoryドメインアカウントでWindowsにログインしている必要があります。さらに、ブラウザ側でも事前設定(Kerberosサポートの有効化やIEでの信頼済みイントラネットサイトへの登録など)が必要です。検証環境今回の

  2. 【解決方法】「ドメインのActive Directoryドメインコントローラーに接続できませんでした」エラーの修正

    「ドメインのActive Directoryドメインコントローラーに接続できませんでした(An Active Directory Domain Controller for the domain could not be contacted)」というエラーは、多くの場合、DNSの設定ミスが原因で発生します。ユーザーからは、別のWindowsワークステーションをドメインに追加しようとした際に、このエラーメッセージが表示されるという報告が寄せられています。「詳細」ボタンをクリックしてエラーの内容を確認すると、「DNS名が存在しません」という旨のメッセージとエラーコードが表示されます。Windows