Linux 環境や、特定の Windows セットアップでさえ、サービス認証を自動化しようとすると、Kerberos キータブ ファイルを扱うのは本当に面倒な作業になることがあります。基本的に、キータブは秘密のハンドシェイクのようなものです。つまり、サービスがパスワードを常に尋ねることなく認証できるようにする暗号化されたキーを保持します。Active Directory を使用してサービス (たとえば、nginx や apache) をセットアップしようとしてうまくいかない場合は、キータブが正しくセットアップされていないか、SPN (サービス プリンシパル名) が正しくバインドされていないことが原因である可能性があります。特に Windows では、面倒な手順を踏まずにキータブの中身を覗くための簡単なツールが提供されていないため、このプロセスは最初はかなり気が遠くなるように思えるかもしれません。それでも、いくつかのコマンドとその仕組みを理解すれば、イライラすることはずっと少なくなります。
ここで目指すのは、サービスアカウントまたはマシンオブジェクトのキータブファイルを生成し、正しいSPNをバインドして、サービスがKerberosを使用してシームレスに認証できることを確認することです。動作するキータブがあれば、パスワードレスでスムーズな認証が可能になります。これは、cronジョブ、Webサーバー、またはバックグラウンドで安全に通信する必要があるあらゆるアプリケーションに便利です。そのため、キータブが見つからない、または設定が間違っているためにサービスがKerberosで動作しない場合は、このガイドが解決の糸口となるはずです。
AD サービス用の Kerberos キータブ ファイルを作成および管理する方法
Kerberos認証用のADユーザーの作成
まず、サービスが使用するActive Directory専用のユーザーアカウントが必要です。ADUCコンソール(dsa.msc)またはPowerShellで作成できます。重要なのは、既知のパスワードを設定し、有効期限が切れず、変更できないようにすることです。そうしないと、後でパスワードが変更された際にキータブが無効になってしまいます。PowerShellを使用した例を以下に示します。
New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "[email protected]" -Path "OU=Services, OU=Munich, OU=DE, DC=test, DC=com" -AccountPassword (ConvertTo-SecureString "Sup6r!Pa$s" -AsPlainText -Force) -Enabled $true
次に、パスワード ポリシーをロックします。
Get-ADUser web | Set-ADUser -PasswordNeverExpires:$true -CannotChangePassword:$true
これは、パスワードの変更によって Kerberos が破壊されるのを防ぐために必要なことです。
SPNをアカウントにバインドする
ここから少し「技術的な話」になります。SPNは、認証するサービスの識別子のようなものです。通常、SPNはsetspn を使って割り当てます。例えば、HTTPをアカウントにバインドするには次のようにします。
setspn -A HTTP/web.domain.com web
SPN が適切にリンクされているかどうかを確認します。
setspn -L web
SPNが表示されていれば問題ありません。表示されない場合は追加してください。これでリンクが確立されます。この手順は、Kerberosがサービスを担当するアカウントを識別するために不可欠です。
ktpassでキータブを生成する
これは、多くの人がつまずく核となるステップです。使用するコマンドはktpassで、割り当てたSPNのキータブファイルを作成します。典型的なコマンドは以下のとおりです。
ktpass -princ HTTP/web.domain.com@DOMAIN. COM -mapuser web -crypto all -ptype KRB5_NT_PRINCIPAL -pass "Sup6r!Pa$s" -target yourdomaincontroller.example.com -out C:\share\web.keytab
-crypto all を使用する理由は何でしょうか?一部の設定ではすべての暗号化タイプが有効になっていない場合がありますが、一般的には幅広い互換性を確保するのに役立ちます。出力には、SPNがユーザーにマッピングされ、キータブが正常に作成されたことが示されます。Active DirectoryオブジェクトのmsDS-KeyVersionNumber属性はパスワードを変更すると増加するため、アカウントのパスワードが更新された場合はキータブを再生成する必要があることに注意してください。
キータブの検証と使用
Windows にはキータブを検査するためのネイティブ ツールはありませんが、Java がインストールされている場合は、Java bin ディレクトリからklist.exeを使用できます。
cd "C:\Program Files\Java\jre1.8.0_181\bin" & klist.exe -K -e -t -k C:\share\web.keytab
これにより、SPN、暗号化の種類、タイムスタンプなどの内容が表示されます。キータブが機能しない場合は、ファイルの権限を再確認してください。読み取り権限を持つユーザーは誰でもサービスになりすます可能性があるため、キータブは安全に保管する必要があります。
一つ奇妙な点があります。ADでアカウントのパスワードを変更すると、KVNO(キーバージョン番号)が増加し、古いキータブはすべて無効になります。そのため、サービスの中断を避けるために、キータブを再生成したタイミングを記録しておいてください。
結論は?キータブの作成は魔法ではありませんが、確かに魔法のように感じる時があります。特にSPNバインディングと暗号化の種類に関しては、ある程度の試行錯誤が必要になりますが、一度設定してしまえば、特にLinuxサービスやクロスプラットフォーム統合において、Kerberos認証がはるかにスムーズになります。
まとめ
- 固定パスワードを持つ専用の AD ユーザーを作成します。
- パスワードの有効期限切れや変更を防ぐために、ユーザー アカウント オプションを設定します。
- setspnを使用して SPN をバインドします。
- ktpassを使用してキータブを生成し、安全に保存します。
- Java のklist.exeを使用してコンテンツを確認します。
- AD パスワードを変更すると、キータブが再生成されることに注意してください。
まとめ
このプロセス全体は、特にKerberosとADを初めて使う場合は少し面倒かもしれません。しかし、キータブの作成と検証のコツをつかめば、LinuxやWindowsのサービスへの適用はずっと楽になります。それでも、SPNや暗号化の種類など、多少の調整は必要になるでしょうが、それも冒険の一部です。この記事が、誰かのKerberos設定をよりスムーズに実行できるようになることを願っています。ただし、キータブは安全に保管してください。誰にも汚い手は入れさせないでください。