Windows Server 2003 IIS6 で NLB構成でKerberos認証を有効にする手順。
■ドメインコントローラ上(Active Directory)の作業
①ドメインのユーザアカウントを作成する。
仮に「NLBUser」とします。
②SETSPNを使って、NLBアクセスURL用のホストヘッダーを①のアカウントに設定します。
仮にホストヘッダーを「nlbhost.header.jp」として、下記のコマンド2つを実行
> setspn -A http/nlbhost.header.jp NLBUser
> setspn -A http/nlbhost NLBUser
③Active Directory ユーザとコンピュータを開き、NLBUserのプロパティを開きます。この時、ドメインの機能が「Windows Server 2003」になっているかつsetspn実行後だと、「委任」のタブがあるので、「任意のサービスへの委任でこのユーザを信頼する」を選択し、OKをクリックしてプロパティを閉じます。
④NLBのIPアドレスが、NLBのホスト名に解決されるように設定します。(サーバ側ではDNS設定など。例えば登録時にAliasを利用しないようにするとか 2009/11/10追記)
■Webサーバ上の作業(負荷分散対象全てのサーバ
①作成したドメインアカウントを、各サーバのIIS_WPGグループへ追加します。
②アプリケーションプールを作成し、識別タブで、「構成可能」を選択し、
ドメインユーザアカウントとパスワードを設定します。
③対象の仮想ディレクトリ・もしくはWebサイトのディレクトリセキュリティを「統合Windows認証」にします。
④Web.configに
<authentication mode="Windows" />
<identity impersonate="true" />
がある事を確認します。
※少し追記
⑤仮想ディレクトリもしくはWebサイトのアプリケーションプールを②で作成したものに変更します。
⑥負荷分散する両方のWebサーバのWeb.configに machineKey要素を追加します。この時、2台のサーバ間で、全く同じ値を設定する必要があります。
※validationKeyは128文字、decryptionKeyは48文字、16進数表記にて任意の値を設定可能
<machineKey
validationKey="6B3B531D1E3232C2A00589627729751237761954842F959B8F01562F159097774C189718FA68927C47984A46F41FF6E4A9118AF5BF97544B5D52B4690B264ED8"
decryptionKey="C60EEEDAB223B3CD2011095EA2ECE54EF87B22794E30564E"
validation="SHA1"
/>
⑦Webサーバ上の%System%Tempフォルダのセキュリティタブを開き、
NLB用アカウントに「ファイルの内容の一覧表示」と「読み取り」権限を許可して追加します。
■クライアントPCの設定
①クライアントからWebサーバまで、プロキシを経由しない領域に配置します。
②対象のURLにアクセスした際、IEのゾーン認識(右下にある)が
「イントラネット」になるように設定します。
③オプションの詳細設定で「統合Windows認証を使用する」にチェックを入れます。(再起動が必要と書いてますが、全てのIEを終了させ、IEのみ起動しなおせばOKです。)
④NLBのホスト名PINGを打った時、PING先がNLBのホスト名に解決されるように設定します。DNS上で、Ailiasを使って登録してはいけないようです。
クライアント側ではHostsに登録してあれば動作します。
(2009/11/20変更)
5年越し位かかってようやく解決しました(^^)
(2009/11/10追記)
ちょいちょい追記してます。。。Kerberosめ・・・(T_T)
(2009/11/20修正)
ちがってたみたいです。。。Kerberosめ・・・(T_T)
■ドメインコントローラ上(Active Directory)の作業
①ドメインのユーザアカウントを作成する。
仮に「NLBUser」とします。
②SETSPNを使って、NLBアクセスURL用のホストヘッダーを①のアカウントに設定します。
仮にホストヘッダーを「nlbhost.header.jp」として、下記のコマンド2つを実行
> setspn -A http/nlbhost.header.jp NLBUser
> setspn -A http/nlbhost NLBUser
③Active Directory ユーザとコンピュータを開き、NLBUserのプロパティを開きます。この時、ドメインの機能が「Windows Server 2003」になっているかつsetspn実行後だと、「委任」のタブがあるので、「任意のサービスへの委任でこのユーザを信頼する」を選択し、OKをクリックしてプロパティを閉じます。
④NLBのIPアドレスが、NLBのホスト名に解決されるように設定します。(サーバ側ではDNS設定など。例えば登録時にAliasを利用しないようにするとか 2009/11/10追記)
■Webサーバ上の作業(負荷分散対象全てのサーバ
①作成したドメインアカウントを、各サーバのIIS_WPGグループへ追加します。
②アプリケーションプールを作成し、識別タブで、「構成可能」を選択し、
ドメインユーザアカウントとパスワードを設定します。
③対象の仮想ディレクトリ・もしくはWebサイトのディレクトリセキュリティを「統合Windows認証」にします。
④Web.configに
<authentication mode="Windows" />
<identity impersonate="true" />
がある事を確認します。
※少し追記
⑤仮想ディレクトリもしくはWebサイトのアプリケーションプールを②で作成したものに変更します。
⑥負荷分散する両方のWebサーバのWeb.configに machineKey要素を追加します。この時、2台のサーバ間で、全く同じ値を設定する必要があります。
※validationKeyは128文字、decryptionKeyは48文字、16進数表記にて任意の値を設定可能
<machineKey
validationKey="6B3B531D1E3232C2A00589627729751237761954842F959B8F01562F159097774C189718FA68927C47984A46F41FF6E4A9118AF5BF97544B5D52B4690B264ED8"
decryptionKey="C60EEEDAB223B3CD2011095EA2ECE54EF87B22794E30564E"
validation="SHA1"
/>
⑦Webサーバ上の%System%Tempフォルダのセキュリティタブを開き、
NLB用アカウントに「ファイルの内容の一覧表示」と「読み取り」権限を許可して追加します。
■クライアントPCの設定
①クライアントからWebサーバまで、プロキシを経由しない領域に配置します。
②対象のURLにアクセスした際、IEのゾーン認識(右下にある)が
「イントラネット」になるように設定します。
③オプションの詳細設定で「統合Windows認証を使用する」にチェックを入れます。(再起動が必要と書いてますが、全てのIEを終了させ、IEのみ起動しなおせばOKです。)
④NLBのホスト名PINGを打った時、PING先がNLBのホスト名に解決されるように設定します。DNS上で、Ailiasを使って登録してはいけないようです。
クライアント側ではHostsに登録してあれば動作します。
(2009/11/20変更)
5年越し位かかってようやく解決しました(^^)
(2009/11/10追記)
ちょいちょい追記してます。。。Kerberosめ・・・(T_T)
(2009/11/20修正)
ちがってたみたいです。。。Kerberosめ・・・(T_T)
※コメント投稿者のブログIDはブログ作成者のみに通知されます