仕事でなぜかまたしてもdouble-hop Kerberos authenticationにかかわることになったので後で自分で見返したときのためにいくつかポイントを書いておきます。

  • double-hop Kerberos authenticationはアクセスしたサーバーから、その裏側で何か別のサーバー(リソース)にアクセスする際に必要
  • NTLMはダブルホップ認証に対応していないので、そういう構成の場合には基本認証かKerberos認証かどちらかにしないといけない。(基本認証はセキュリティ的にやばすぎるので事実上選択できない)

IISにてKerberos認証を有効にする

  • IISにてKerberos認証を行うためにはIISの応答時にそれをクライアントに伝えなくてはいけない
    • 現在の設定の確認は以下のコマンド
cd Drive:\inetpub\adminscripts
cscript adsutil.vbs get w3svc/##/root/NTAuthenticationProviders
※##には仮想サーバーのIDを入力する
    • 上記コマンドの結果が”Negotiate,NTLM”ならKerberos認証が有効になっている。”NTLM”だとNTLM認証しかできないので以下のコマンドを実行しKerberos認証も有効にする
cscript adsutil.vbs set w3svc/##/root/NTAuthenticationProviders "Negotiate,NTLM"

Kerberos認証ができるようにSPNを登録する

  • Kerberos認証を行うためにはSPNがきちんと登録されている必要がある
  • SQLならSQLのインスタンスのサービスアカウント, IISならアプリケーションプールIDにSPNが登録されている必要がある。
  • 対象アカウントがNetwork Serviceの場合には自動的にSPNの登録がなされているので、手動での登録は必要ない。
  • 対象アカウントがドメインユーザーの場合には手動でのSPNの登録が必要。
  • SPNの登録にはsetspn.exeが利用できる。あるいはADSIEditにて手動で入力することも可能(属性名はservicePrincipalName)
  • SPNは1つのアカウントに複数登録されることは問題ないが、複数のアカウントに同じ文字列が複数登録されていると正常に動作しない
  • IISにてKerberos認証を有効にするには該当のアプリケーションプールIDに対して以下の2つのSPNを登録する必要がある
HTTP/ホスト名
HTTP/ホスト名.完全.修飾.ドメイン名(FQDN)
  • 上記の登録するSPNにはポート番号は記述しない。
    • つまり、複数のポート番号を使って複数のWebアプリケーション(仮想ホスト)が稼動している場合には、すべて同一のアプリケーションプールIDにしておかないと、うまく登録できない。
    • あるいは、それぞれのWebアプリケーションごとにアクセスするためのURL(ホスト名)をホストヘッダーを用いて別のものにする必要がある。

double-hopを許可するために、委任設定が必要

  • クライアントとの間でKerberos認証を確立した後に、ほかのホスト(リソース)へアクセスする必要がある場合には、それを明示的に許可する必要がある。
  • Network Serviceの場合には該当コンピューターアカウント、ドメインユーザーの場合にはユーザーアカウントを「Active Directory ユーザーとコンピュータ」で開き、「委任タブ」から委任設定を行う。必要があるサービスのみに対して委任するのが望ましい。

参考情報

まだまだ書くことはあるけど、とりあえずこんなところかな・・・。たびたび追記しよう。

コメントを残す

メールアドレスが公開されることはありません。