none
IIS6 ワーカプロセスアカウントをドメインアカウントにすると・・・ RRS feed

  • 質問

  • お世話になっております。

    下記のイントラネット構成(ドメイン名:ABC)で、
    WEBサーバーを構築しております。

    サーバーA:IIS6(Windows統合認証) 
            WEBAppAアプリケーションがASPNETにより構築
            (ASPNETはWindows認証,SQLへの接続はSSPI)
    サーバーB:SQL2005(Windows統合認証)
                   ログイン可能:ABC\WEBAPPUSER

    現在、サーバーA側のアプリケーションプールのアカウントは、NETWORK SERVICEにしており、
    SQLへの接続は、統合認証しているため、web.config内で偽装設定をしております。
    偽装アカウント:ABC\WEBAPPUSER

    クライアントユーザー側もドメインクライアントのみなので、特に認証を意識せずサーバーAアクセスして
    問題なく動作しております。

    パフォーマンスの改善の一環として、偽装処理しなくても済むように、、
    ワーカプロセスアカウント自体を、「ABC\WEBAPPUSER」にするよう
    アプリケーションプールの識別タブにて変更を行いました。

    この状態で、クライアントからアクセスすると、認証の要求がおこりました。
    そしてこの認証通るにはは、サーバーA内にあるアカウントのみ有効でした。
    つまりドメインアカウントでは、ログインできませんでした。

    いったいなにが起こっているのでしょうか。
    ご教授ください。
    2009年2月4日 10:12

回答

  • こんにちは。

    よかったです。うまくいって何よりです!

    簡単にご説明しますと次のようになります。(簡単に、といってもどうしてもちょっと長くなってしまいますが・・・)

    疑問
    1.なにが(なぜ)、ダブルホップしていたのか?
      考えられるのは、ワーカプロセスアカウントが、WEBサーバ上にパスワード情報がないので・・・・・やっぱりわからない。

    Windows のログオンの特権には、いくつか種類があって、ログオンのタイプによってできること・できないことが決められています。代表的なものは、ローカル (対話的) ログオン、ネットワークログオン、バッチログオン等があります。

    ローカルログオンすると、ログオンしたマシンから、もうひとつ向こうのリモートマシンにもアクセス可能になります。ネットワークログオンではそのマシンでしかそのログオントークンは有効ではありません。図にすると下のようになります(ここで矢印”→” はネットワークアクセスと思ってください)。

    (a) ローカル (対話的) ログオン:  [クライアント] → [ログオンしたマシン1] → [リモートマシン 2] → x
    (b) ネットワークログオン: [クライアント] → [ログオンしたマシン1] → x

    (a) の状況を、「クレデンシャル (=認証情報) がリモートマシンにダブルホップできた」 といいます。ユーザーがクライアントにログインした後、マシン1、マシン2も使えているからです。(b) はクライアントのクレデンシャルが1つめのマシンでしか有効ではなく、それ以上向こうのマシンにアクセスできないので、「ダブルホップできない」 と言います。

    ちなみに Kerberos では、クライアントが必要なサービスに必要な ST (サービスチケット) を持っていきますので、クレデンシャルのホップという問題がそもそもありません。

    IIS の 匿名アクセスとWindows 統合認証 (NTLM SSP) でネットワークログオンになります。基本認証ではローカルログオンです。

    さて、TAKAKUN さんの状況では、Web サーバ上の IE からはアクセスできて、違うマシンの IE からではうまく動かなかったというところから、「ダブルホップ的な問題がおきていただろう」 と思いました。そして、ダブルホップの問題が起きるということは、Kerberos が使えておらず、NTLM になっていただろうと思い、SetSPN を見直したらいいのではないかと思いました。
     
    2.ワーカプロセスアカウント(つまりドメインアカウント)に、SPNを設定する必要はなぜあるのか。

    Kerberos を使っている場合、クライアントから IIS へののアクセスは HTTP の ST となります。ワーカープロセスの実行 ID がそれを受け入れないと動かない、ということになります。

    あと、たどさんのページのなかで、「SPN は IIS マシンに登録すれば Kerberos になる。」ってありましたが、
    SPNは、ActiveDirectoryに登録することになるのでは?とおもってしまったのですが、どうでしょうか?

    おっしゃるとおりです。これはだめですね (汗)  「IIS マシンに登録」 は 「IIS マシンの AD サービスアカウントの SPN ディレクトリプロパティ」 というつもりで書いてました。さっそく修正しました。ご指摘ありがとうございます。
    IIS で Kerberos を利用する


    以上、参考になりましたら幸いです。

    ---------------------------------------
    だどさん http://keicode.com/
    • 回答としてマーク TAKAKUN 2009年2月9日 1:30
    2009年2月6日 13:05

すべての返信

  • 自信ありませんが、このKBが該当しますでしょうか?
    http://support.microsoft.com/kb/871179/
    IIS 6.0 アプリケーション プールの一部である Web サイトにアクセスするとエラー メッセージ "HTTP Error 401.1 - 権限がありません: 資格情報が無効であるため、アクセスが拒否されました" が表示される

    ところで偽装はパフォーマンスに影響するのでしょうか? セッション開始時に1回行われるだけだと考えていました。
    2009年2月4日 11:29
  • ご返事ありがとうございます。

    現象が同じ内容なので、早速試してみたのですが
    結果ダメでした。

    んーーーー

    2009年2月5日 1:26
  •  勘ですが。
    ファイルのアクセス権のような気がしないでもない。
    WEBAppAアプリケーションのすべてのファイルがABC\WEBAPPUSERで問題なくアクセスできるようになっているでしょうか?

    #WEBサーバとDBサーバが異なるときの標準的な設定方法って、何かあった気がするんだけど、思い出せない。。。
    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2009年2月5日 2:04
  • あ、記事みつけた。

    http://blogs.sqlpassj.org/matu_tak/archive/2004/06/16/2742.aspx

    ドメインユーザ使うんじゃなくて、同じユーザ名/パスワードのアカウントを各サーバに作成。
    で、そのユーザをワーカープロセスの実行アカウントに設定。
    そういう手順だそうです。
    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2009年2月5日 2:10
  • ご返事ありがとうございます。

    ファイルのアクセス権に関しては、問題ないようです。

    <現在わかったこと>
    ちなみにWEBサーバのデスクトップ上で、クライアント側で使用していたアカウントを使って
    IEを実行し(runas)、アクセスすると認証の要求がなく問題なく表示されました。

    同じアカウントでは、異なるPCからアクセス時に認証の要求があるってダブルホップ的な問題がおこっているのでしょうか???
    なにがダブルホップしているのかわからないけど・・・

    ちなみに、もともと同じユーザー名・パスワードを各サーバに配置する方法で行っていたのですが、
    せっかくドメイン環境があるのにっということで、ワーカプロセスアカウントをドメインアカウントに
    設定できたらと思い現在しております。

    2009年2月5日 6:44
  • こんにちは。

    私も TAKAKUN さんのおっしゃるとおり、ダブルホップの問題が起きているのではないかと思います。ということは、うまく Kerbros になってないんだと思います。ということは、たぶん SetSPN がちゃんとできてないのかな?と思います。(上記の KB でうまくいくと思うのですが・・・)

    SetSPN コマンドはどのように実行しましたか?それと、IE でどのような URL でアクセスしているでしょうか?この2点で FQDN がそろっていれば、たぶん動くと思うのですが。。。あと、イベントログに監査の設定をしてみると、セキュリティログとして DC、IE、IIS それぞれでエラーが出ていると思います。

    ご参考になりましたら幸いです。

    ---------------------------------
    だどさん http://keicode.com/
    2009年2月5日 16:57
  • 今見たら手元に、私が昔実験した時のメモがありましたので、私のサイトにアップしておきますね。一番下にワーカープロセスのメモ書きがあります。エラーの調べ方などは参考になると思います。

    IIS で Kerberos を利用する方法

    何か参考になることがあったら幸いです。

    -------------------------------
    だどさん http://keicode.com/
    2009年2月5日 17:29
  • たどさん、ご返事ありがとうございます。

    結果から報告しますが、アクセスができました。ありがとうございました。

    たどさんの参考ページをみながら、よく見直すと設定のミスがありました。
    「setspn -A http/・・・」としないといけないところ、「setspn -A http://・・・」ってことをしていました。
    削除してから、追加しなおすと問題なくシームレスに認証されました。

    勝手な解釈で整理してみますと、
    ・SPNを設定する前の処理は、
     クライアントは、なにももたずにIISへアクセスを行い、
     IISはサービスチケットを持っていないので、NTLM認証を行い、結果ダブルホップがおこり、アクセスに失敗した。
    ・SPNを設定すると
     クライアントは、アクセスするサービスのチケットがないかをActiveDirectoryに問い合わせ
     サービスチケットを取得し、IISへサービスチケットを提出し認証してもらい、アクセスに成功した。

    疑問
    1.なにが(なぜ)、ダブルホップしていたのか?
      考えられるのは、ワーカプロセスアカウントが、WEBサーバ上にパスワード情報がないので・・・・・やっぱりわからない。
    2.ワーカプロセスアカウント(つまりドメインアカウント)に、SPNを設定する必要はなぜあるのか。

    あと、たどさんのページのなかで、「SPN は IIS マシンに登録すれば Kerberos になる。」ってありましたが、
    SPNは、ActiveDirectoryに登録することになるのでは?とおもってしまったのですが、どうでしょうか?








    2009年2月6日 2:06
  • こんにちは。

    よかったです。うまくいって何よりです!

    簡単にご説明しますと次のようになります。(簡単に、といってもどうしてもちょっと長くなってしまいますが・・・)

    疑問
    1.なにが(なぜ)、ダブルホップしていたのか?
      考えられるのは、ワーカプロセスアカウントが、WEBサーバ上にパスワード情報がないので・・・・・やっぱりわからない。

    Windows のログオンの特権には、いくつか種類があって、ログオンのタイプによってできること・できないことが決められています。代表的なものは、ローカル (対話的) ログオン、ネットワークログオン、バッチログオン等があります。

    ローカルログオンすると、ログオンしたマシンから、もうひとつ向こうのリモートマシンにもアクセス可能になります。ネットワークログオンではそのマシンでしかそのログオントークンは有効ではありません。図にすると下のようになります(ここで矢印”→” はネットワークアクセスと思ってください)。

    (a) ローカル (対話的) ログオン:  [クライアント] → [ログオンしたマシン1] → [リモートマシン 2] → x
    (b) ネットワークログオン: [クライアント] → [ログオンしたマシン1] → x

    (a) の状況を、「クレデンシャル (=認証情報) がリモートマシンにダブルホップできた」 といいます。ユーザーがクライアントにログインした後、マシン1、マシン2も使えているからです。(b) はクライアントのクレデンシャルが1つめのマシンでしか有効ではなく、それ以上向こうのマシンにアクセスできないので、「ダブルホップできない」 と言います。

    ちなみに Kerberos では、クライアントが必要なサービスに必要な ST (サービスチケット) を持っていきますので、クレデンシャルのホップという問題がそもそもありません。

    IIS の 匿名アクセスとWindows 統合認証 (NTLM SSP) でネットワークログオンになります。基本認証ではローカルログオンです。

    さて、TAKAKUN さんの状況では、Web サーバ上の IE からはアクセスできて、違うマシンの IE からではうまく動かなかったというところから、「ダブルホップ的な問題がおきていただろう」 と思いました。そして、ダブルホップの問題が起きるということは、Kerberos が使えておらず、NTLM になっていただろうと思い、SetSPN を見直したらいいのではないかと思いました。
     
    2.ワーカプロセスアカウント(つまりドメインアカウント)に、SPNを設定する必要はなぜあるのか。

    Kerberos を使っている場合、クライアントから IIS へののアクセスは HTTP の ST となります。ワーカープロセスの実行 ID がそれを受け入れないと動かない、ということになります。

    あと、たどさんのページのなかで、「SPN は IIS マシンに登録すれば Kerberos になる。」ってありましたが、
    SPNは、ActiveDirectoryに登録することになるのでは?とおもってしまったのですが、どうでしょうか?

    おっしゃるとおりです。これはだめですね (汗)  「IIS マシンに登録」 は 「IIS マシンの AD サービスアカウントの SPN ディレクトリプロパティ」 というつもりで書いてました。さっそく修正しました。ご指摘ありがとうございます。
    IIS で Kerberos を利用する


    以上、参考になりましたら幸いです。

    ---------------------------------------
    だどさん http://keicode.com/
    • 回答としてマーク TAKAKUN 2009年2月9日 1:30
    2009年2月6日 13:05
  • たどさん、丁寧な説明ありがとうございました。

    理解することにより、別環境でもスムーズに構築できるとおもわれ、
    いろいろ勉強になりました。

    ありがとうございました。
    2009年2月9日 1:30