トップ回答者
ASP.NETアプリケーションから共有フォルダーへのドメインユーザーよる書き込み

質問
-
お世話になっております。
ASP.NETアプリケーションから他サーバー上の共有フォルダーへのファイルの書き込みについてご教示いただきたくご質問させていただきます。
↓のような環境で、添付させていただいた図の③の箇所における動作について、どう設定すれば意図した動きになるのかご教示いただけないでしょうか
環境
○A環境
・サーバーA-1
用途:ドメインコントローラー
オペレーティングシステム:Windows Server 2012
主な役割:Active Directory
・サーバーA-2
用途:Webサーバー
オペレーティングシステム:Windows Server 2012
主な役割:Internet Infomation Services
Webサーバーの認証周りの設定:Windows認証、ASP.NET偽装 有効
Webアプリケーション開発言語:C#(ASP.net)
○B環境
・サーバーB-1
用途:ドメインコントローラー
オペレーティングシステム:Windows Server 2012
主な役割:Active Directory
・サーバーB-3
用途:ファイルサーバー
オペレーティングシステム:Windows Server 2012
主な役割:ファイルサービス
・端末B-2
用途:クライアント端末(主にIEを利用したアプリケーション操作)
回答
-
突然出てきた「WebアプリA」「WebアプリB」って何ですか? 「WebアプリA」というのは今回の話とは関係ないように見えますが・・・
何にせよ、問題の処理(A-3 サーバーからのファイルの取得と B-3 サーバーへのファイルの書き込み)はすべて「WebアプリB」で行っているとすると、
> WebアプリBの認証パッケージがNTLMになってしまっているところが諸悪の根源のように見えます。
というのはその通りだと思います。
「③ファイルサーバーへのアクセス時」の「ユーザID:ANONYMOUS LOGON」が NTLM でダブルホップの問題が発生しているのを裏付けているようです。以下の記事の「ダブルホップの問題」のセクションを見てください。
ASP ページの認証問題のトラブルシューティング
https://msdn.microsoft.com/ja-jp/library/ms180891(v=vs.90).aspx何が原因で NTLM になるのか、どうすれば Kerberos になるのかは質問者さんの方で調べて解決していただけますか。
-
【追伸】
IIS に Kerberos 認証を設定するのに参考になると思われる記事を紹介しておきます。Step 4 以降に書かれていること、問題ないですか?
Setting up Kerberos Authentication for a Website in IIS
http://blogs.msdn.com/b/chiranth/archive/2014/04/17/setting-up-kerberos-authentication-for-a-website-in-iis.aspx
オマケ情報ですが、Fiddler を使っても Kerberos か否かの確認ができるそうです。Using Fiddler To Check For Kerberos Auth
https://blogs.msdn.microsoft.com/crminthefield/2012/10/10/using-fiddler-to-check-for-kerberos-auth/
すべての返信
-
Web サーバーの「ASP.NET偽装 有効」というのを具体的にどう設定したのか分かりませんが(そういう情報は最初の質問に書いてくださいね)、特定のユーザーを偽装したのでなければ偽装だけではダメで委任が必要になります。認証方式も NTLM ではダメで Kerberos 認証が必要になります。
詳しくは以下の記事を見てください。
How To: ASP.NET 2.0 で偽装と委任を使用する方法
https://msdn.microsoft.com/ja-jp/library/ms998351.aspxユーザーごとの細かいアクセス制限が必要なければ(例えば、所属別ぐらいでよければ)上の記事の「図 3. 信頼済みサブシステム モデル」に書いてあるようにする方法もあります。
分からないところがあれば放置しないで必ず聞いてください。
-
ご回答ありがとうございます。
>Web サーバーの「ASP.NET偽装 有効」というのを具体的にどう設定したのか分かりませんが
大変失礼いたしました。
IISマネージャーにて、アプリケーションの追加を行い、
「認証」の設定で
・Windows認証:有効
・ASP.NET 偽装:有効 (Windows端末にサインインしたユーザーでASP.NETで作ったダウンロードプログラムを実行させてファイルの書き込みを行いたいため)
・匿名認証:無効
・基本認証:無効
としています。
また、ASP.NET偽装の設定編集において
・認証されたユーザー
を選択して有効化しています。(特定のユーザーで信頼関係構築した、信頼先のユーザー情報を入力した場合は、ファイルサーバーへのファイル書き込みができたことは確認しました)
IIS8.0においては、特に設定不要とは思いますが、Web.configの内容も確認し、<System.web>タグの記載に問題がないことも確認しています。
特定のユーザーを偽装する、というわけではないので、委任が必要であり、認証方式もKerberos認証であることが必要ということは理解しました。ですが、提示いただいたURLを確認したのですが、詳しい設定の仕方が何がなにやら状態で混乱してしまったため、ご教示いただけないでしょうか
Kerberos認証の有効化=Windows認証の編集画面にて、「拡張保護」を「必須」にすればよいのでしょうか?
委任=Active Directoryユーザーとコンピューターの管理画面で、委任対象のたとえばOUを選択して、制御の委任を行えばよいのでしょうか?この場合、オブジェクト委任の制御ウィザードで何を選択すればよいやらさっぱり分かりませんでした。単純に共有フォルダーオブジェクトでよいのでしょうか?
以上、よろしくお願いいたします。
-
> 提示いただいたURLを確認したのですが、詳しい設定の仕方が何がなにやら状態で混乱して
> しまったため、ご教示いただけないでしょうか紹介した記事の「委任」のセクションの「Kerberos 認証および委任を使用する方法」とそこからリンクが張られている以下のページは読んでいただけたでしょうか?
How To: ASP.NET 2.0 でプロトコル トランジションと制約付き委任を使用する方法
https://msdn.microsoft.com/ja-jp/library/ms998355それ以上の詳しい説明をここのような掲示板でするというのは私には難しいのですが・・・
システム管理者に設定を頼むとか、そういう人がいなければ外部の業者に委託するとか、それがダメならやり方を変えて偽装だけですむようにするとか、直接クライアントの PC にダウンロードするようにするとかを検討されてはいかがでしょう。
> Kerberos認証の有効化=Windows認証の編集画面にて、「拡張保護」を「必須」にすればよいのでしょうか?
以下の MSDN ライブラリによると "クライアント (Internet Explorer 5.0 以降) とサーバー (IIS 5.0 以降) の双方が Windows 2000 以降を実行しており、両者が同じドメインまたは信頼関係のあるドメインのメンバである場合、IIS は Kerberos を使用します。それ以外の場合、サーバーは既定により NTLM を使用します。" とのことです。
ASP.NET の委任
https://msdn.microsoft.com/ja-jp/library/aa291350(VS.71).aspx確認するためのツールがあるそうです。
Kerberos 認証の設定を確認する
http://idmlab.eidentity.jp/2012/11/kerberos.html
#ところで、③ のみでなく ② にもワーカープロセスのアクセス権の問題があるはずです。そのあたりには質問では触れられていませんが、問題ないのでしょうか? -
ご回答ありがとうございます。
いろいろ調べて、SPNの登録や委任の設定を行い、再度実行してみました。以下がやったことの概要です。
信頼関係を双方向で結んだ関係にあるので、規定でKerberosを利用してくれるものと思ったのですが、どうもWebアプリBの認証パッケージがNTLMになってしまっているところが諸悪の根源のように見えます。
このWebアプリBの設定ファイルやプログラムに、ASP.NET偽装を行う処理を組み紺でいます。
SurferOnWww様のご指摘の
>#ところで、③ のみでなく ② にもワーカープロセスのアクセス権の問題があるはずです。そのあたりには質問では触れられていま>せんが、問題ないのでしょうか?
が問題なのかと思われます。
【やったこと】
・プログラムには、偽装の処理を組込んだ
・Webサーバーとファイルサーバーの委任設定済み
・各サーバーの時刻を合わせた
(ADサーバー以外は、仮想サーバーとなっており、本体の時刻に
同期されていた=本体の時刻がADサーバーとずれていた。
本体の時刻をADサーバーに合わせることで、全体が合っている状態)
・サービスプリンシパル名を登録済み
①WebアプリA(Silverlightプログラム)実行時(端末からWebサーバー)は、Kerberosになる
(Webサーバーのイベントログで確認「ログオン」)
偽装タイプ:委任
ドメイン:端末でログオンしたユーザのドメイン
ユーザID:端末でログオンしたユーザのID
認証パッケージ:Kerberos
②WebアプリB(C#プログラム)呼出し時(端末からWebサーバー)は、NTLMになる
(Webサーバーのイベントログで確認「ログオン」)
偽装タイプ:偽装
ドメイン:端末でログオンしたユーザのドメイン
ユーザID:端末でログオンしたユーザのID
認証パッケージ:NTLM
③ファイルサーバーへのアクセス時(Webサーバー上のWebアプリBからファイルサーバー)は、
NTLMになる
さらに、ユーザーがおかしい?
(ファイルサーバーのイベントログで確認「ログオン」)
偽装タイプ:偽装
ドメイン:NT AUTHORITY
ユーザID:ANONYMOUS LOGON
認証パッケージ:NTLM
④書込みフォルダへのアクセスログが生成されない
(ファイルサーバーのイベントログで確認「詳細なオブジェクト…?」)
これまでの確認で、書込みフォルダへのアクセスがある(コピーを実行した り、
Webサーバーから書込みフォルダをエクスプローラーで開くなど)と、
イベントログ(監査)に、ログが残るのですが、それが残らない
⑤プログラムでコピーを実行時に例外が発生する
(内容:フォルダへのアクセスが拒否されました)
-
突然出てきた「WebアプリA」「WebアプリB」って何ですか? 「WebアプリA」というのは今回の話とは関係ないように見えますが・・・
何にせよ、問題の処理(A-3 サーバーからのファイルの取得と B-3 サーバーへのファイルの書き込み)はすべて「WebアプリB」で行っているとすると、
> WebアプリBの認証パッケージがNTLMになってしまっているところが諸悪の根源のように見えます。
というのはその通りだと思います。
「③ファイルサーバーへのアクセス時」の「ユーザID:ANONYMOUS LOGON」が NTLM でダブルホップの問題が発生しているのを裏付けているようです。以下の記事の「ダブルホップの問題」のセクションを見てください。
ASP ページの認証問題のトラブルシューティング
https://msdn.microsoft.com/ja-jp/library/ms180891(v=vs.90).aspx何が原因で NTLM になるのか、どうすれば Kerberos になるのかは質問者さんの方で調べて解決していただけますか。
-
【追伸】
IIS に Kerberos 認証を設定するのに参考になると思われる記事を紹介しておきます。Step 4 以降に書かれていること、問題ないですか?
Setting up Kerberos Authentication for a Website in IIS
http://blogs.msdn.com/b/chiranth/archive/2014/04/17/setting-up-kerberos-authentication-for-a-website-in-iis.aspx
オマケ情報ですが、Fiddler を使っても Kerberos か否かの確認ができるそうです。Using Fiddler To Check For Kerberos Auth
https://blogs.msdn.microsoft.com/crminthefield/2012/10/10/using-fiddler-to-check-for-kerberos-auth/