問題タブ [applicationpoolidentity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc-3 - IIS 7.5 で ApplicationPoolIdentity を使用してユーザー Domain\MachineName$ のログインに失敗しました
実際には、の代わりにユーザー例外のSqlExcpetion
ログイン失敗のようなものを期待していました。IIS AppPool\My AppPool Name
Domain\MachineName$
使用しているアプリケーション プールを作成しました
- マネージド パイプライン モード : 統合
- アイデンティティ: ApplicationPoolIdentity
この AppPool は、問題の Web アプリケーション (MVC3) に割り当てられます。しかし、どういうわけか、WebApp は SqlServer への接続に NetworkService を使用しているようです。
なぜ、または何を変更する必要があるのでしょうか?
windows - アプリケーション プールが「無効な ID」エラー 1021 の開始に失敗する
「NETWORK SERVICE」以外のユーザーでアプリケーション プールを作成しましたが、起動できません。イベント ビューアーでは、次のように表示されます。
私が逃したものは何ですか?
iis - ConnectasとアプリケーションプールIDの違い
IIS 7.5では、アプリケーションの基本設定の下に[名前を付けて接続]オプションがあります。これは何ですか?この機能が導入されたのはなぜですか?アプリケーションプールIDを上書きしますか、またはその逆ですか?
asp.net - IIS7.5WebフォームをSQLServerに接続するための最良の方法
ASP.NET4.0アプリを次の場所からアップグレードしています。
WindowsServer2003およびIIS6
に:
WindowsServer2008およびIIS7.5
このアプリは、MVCではなくASP.NETWebフォームに基づいています。現在SQL認証を使用していますが、新しい環境でのベストプラクティスに従いたいと思います。
IIS7.5マシンとSQLServer2008マシンはどちらも、独自のドメインコントローラーを備えたDMZに常駐します。Dev、Test、Prod環境で同様の接続文字列を使用できれば便利です。この状況のベストプラクティスは何ですか?私は3つのオプションについて読みました。
- ApplicationPoolIdentity
- ドメインに独自のサービスアカウントを作成する
- SQL認証
ここに関連する問題を議論した質問へのリンクがありますが、私の特定の質問に答えるものは何もないようです。
iis - 権限が不十分なため、構成ファイルを読み取ることができません
Windows Server 2008環境に昇格する前に、ローカルマシンのIISインスタンスでWebサービスをテストしようとしています。サービスを参照しようとすると、これが表示されます。このサービスがbtwで実行されるカスタムアプリケーションプールを作成しました。だから私はそのアプリケーションIDがそのフォルダなどにアクセスするための権限を持っていないことを推測しています...私はこの小さな詳細を取得します...
「このエラーは、WebサーバーまたはWebアプリケーションの構成ファイルの読み取りに問題がある場合に発生します。場合によっては、イベントログにこのエラーの原因に関する詳細情報が含まれていることがあります。」
そのアプリケーションにID権限を付与する必要があると考えていますが、これを実現する方法がわかりません。
これを行う別の方法はありますか?
iis - IIS 7.5アプリケーションプールは、カスタムユーザーに対してIDとして誤った%APPDATA%を使用します
C:\Users\MyUsername\AppData\Roaming
構成ファイルをそこに保存しているので、MVC3 Webアプリケーションが%APPDATA%(Windows 7など)にアクセスできるようにします。したがって、IISでユーザー「MyUsername」のIDを使用してアプリケーションプールを作成し、アカウントでログインしてそのユーザーのプロファイルを作成し、「ユーザープロファイルの読み込み」オプションをオンにしました(とにかくデフォルトでtrueでした)。なりすましはオフになっています。
今、私は%APPDATA%(C#で)という問題を抱えています:
c:\windows\system32\inetsrv
の代わりに解決しますC:\Users\MyUsername\AppData\Roaming
。
更新:より正確には、上記のC#コードは空の文字列を返すためPath.GetFullPath(Path.Combine(appdataDir, "MyAppName"))
、アプリケーション名の現在のパスが先頭に追加され、結果としてc:\windows\system32\inetsrv\MyAppName
。
以前、Windows Server 2008 R2の同じWebアプリケーションでこの作業を行ったことがわかっていますが、Windows7のIISの同じメジャーバージョン7.5でこの問題が発生しています。
以前と同じ手順を使用しました。新しいユーザー。そのユーザーとしてログインしてプロファイルとAPPDATAディレクトリを作成し、このIDでアプリケーションプールを追加し、最後にWebアプリケーションをこのプールに追加しました。
何か案は?
asp.net - アプリケーション プール ID を使用する IIS アプリケーションはプライマリ トークンを失いますか?
(これはあいまいな問題に関する質問です。誰かが役立つ情報を持っていることを願って、関連するすべてのデータを提示しようとしています。長い説明で申し訳ありません。)
私たちのウェブアプリ
Active Directory と SQL Server データベースにアクセスする IIS 7.5 で実行されている .NET 4 Web アプリケーションがあります。
この Web アプリケーションは、アプリケーションのアプリケーション プールの ID をApplicationPoolIdentityに設定することにより、仮想の「アプリケーション プール ID」の下で実行されます。仮想 ID の簡潔な説明は、StackOverflow の回答とそれが参照するブログ投稿にあります。アプリ プール ID は、「ネットワーク サービス」として実行されている Web アプリケーションのワーカー プロセスに追加される単なる追加のグループです。ただし、ある情報源は、「Network Service と ApplicationPoolIdentity には、IIS.net サイト ドキュメントが公開していない違いがある」と漠然と示唆しています。したがって、仮想 ID は単なる追加のグループ以上のものになる可能性があります。
NetworkService とは対照的に、ApplicationPoolIdentity を使用することを選択しました。これは、IIS 7.5 でデフォルトになったため (たとえば、ここを参照)、Microsoft の推奨に従って、「この ID により、管理者は、アプリケーションがその下にある ID にのみ関連するアクセス許可を指定できます。プールが実行されているため、サーバーのセキュリティが向上しています。」( applicationPools の add の processModel 要素 [IIS 7 設定スキーマ]より) 「アプリケーション プール ID は強力な新しい分離機能です」 )
アプリケーションは統合 Windows 認証を<identity impersonate="false"/>
使用しますが、.
このアプリケーションは、 System.DirectoryServicesクラス、つまり ADSI APIを使用して Active Directory にクエリを実行します。ほとんどの場合、これは追加のユーザー名/パスワードまたはその他の資格情報を指定せずに行われます。
このアプリケーションは、接続文字列を使用して SQL Server データベースにも接続しIntegrated Security=true
ます。IIS APPPOOL\OurAppPoolName
データベースがローカルの場合、それがデータベースへの接続に使用されていることがわかります。データベースがリモートの場合、マシン アカウントOURDOMAIN\ourwebserver$
が使用されます。
私たちの問題
動作中のインストールが次のいずれかの方法で失敗し始めるという問題が定期的に発生します。
データベースがリモート システム上にある場合、データベース接続が失敗し始めます。前のエラーは「エラー: 18456、重大度: 14、状態: 11」です。そのため、現在
OURDOMAIN\ourwebserver$
は使用されていないようですが、代わりに匿名アクセスが試行されています。(この問題は、UAC をオフにしたときに発生し、UAC をオンにすると消えたという逸話的な証拠があります。ただし、UAC を変更するには再起動が必要であることに注意してください...) 同様の問題がIIS.net スレッドで報告されています。 SQLに接続するには」、具体的には1回の返信で。ADSI (System.DirectoryServices) による Active Directory 操作が、エラー 0x8000500C (「不明なエラー」)、0x80072020 (「操作エラーが発生しました」)、または 0x200B (「指定されたディレクトリ サービスの属性または値が存在しません」) で失敗し始めます。 .
Internet Explorer からアプリケーションにサインインすると、HTTP 401 エラーで失敗し始めます。しかし、IIS で Negotiate の前に NTLM を配置すると、再び機能します。(Kerberos には AD へのアクセスが必要ですが、NTLM には必要ないことに注意してください。) 同様の問題が、IIS.net スレッド「AppPool ID で失敗するウィンドウ認証」で報告されています。
私たちの仮説と回避策
少なくとも、アプリケーション プールを ApplicationPoolIdentity から NetworkService に切り替えると、AD とサインインの問題は常に解消されるようです。(これを確認するレポートが 1 つ見つかりました。)
ページ「ASP ページでの認証の問題のトラブルシューティング」には、プライマリ トークンとセカンダリ トークンに関連するいくつかの提案があり、私が心強いと思うのは、最初の 2 つのエラーにリンクしていることですNT AUTHORITY\ANONYMOUS LOGON
。属性または値が存在しません。」
(同じページで ADSI スキーマ キャッシュの問題についても言及されていますが、そのトピックで見つけられるものはすべて古いものです。今のところ、これは無関係であると考えています。)
上記に基づいて、私たちの現在の作業仮説は、仮想アプリ プール ID の下で実行されている場合にのみ、Web アプリケーション (IIS? ワーカー プロセス?) が突然そのプライマリ トークンを失い、 IIS がセカンダリ トークンのみを持つようになるというものです。 Active Directory と SQL Server へのアクセスは匿名で行われるため、上記のすべてのエラーが発生します。
今のところ、ApplicationPoolIdentity から NetworkService に切り替える予定です。これにより、上記の問題がすべて解消されることを願っています。しかし、確かではありません。可能であれば元に戻したいと考えています。
私たちの質問
上記の仮説は正しいですか? もしそうなら、これは IIS/Windows/.NET のバグですか? このプライマリ トークンの損失はどのような状況で発生しますか?
asp.net - WindowsIdentity.GetCurrent()とRequest.LogonUserIdentity?
ここで許可を割り当てることの違いを理解しようとしています:
対
偽装による割り当て:
1) exe プロセスを実行するのではなく、リソースにアクセスするために偽装が使用されていると聞きました。
ユーザーへの偽装のみでEXEプロセスを実行しようとしましたが、成功しませんでした。
後で、ユーザーをアプリケーションプールIDに設定しました-(最初の写真はこちら)、exeファイルを実行できました。
それらの2つの仕事の違いは何ですか?
アプリケーション プール ID のみを設定した場合 (偽装ではありません)、特別なアクセス許可を持つ外部リソースにアクセスできますか?
c# - プログラムでアプリケーションプールIDを取得する
プログラムでC#でappPoolのIDを取得するにはどうすればよいですか?現在ログインしているユーザーではなく、アプリケーションプールユーザーが必要です。
x509certificate2 - MMC 権限が付与された後でも STS キーセットが存在しない
私のアプリケーションは、その場で仮想ディレクトリを作成するだけでなく、それらの仮想ディレクトリで実行される STS 対応の Web アプリケーション用のアプリケーション プールも作成します。アプリケーション プールは、ApplicationPoolIdentity アカウント (IIS APPPOOL\MyAppPool) で実行されます。そして、インストールされた証明書へのアクセスをプログラムで許可する方法を見つけようとしています。
私の最初のアプローチは、WinHttpCertCfg を実行するバッチ ファイルを使用することでした。ただし、このアプローチは、「アクティブ化」されたアプリ プール アカウントでのみ機能します。「アクティブ化」とは、新しいアプリケーションを少なくとも 1 回参照したことを意味します。これが発生するまで、WinHttpCertCfg は常に「ハンドルが無効です」というメッセージを返します。
私が試みた次のアプローチは、ここから得られた解決策に基づいていました。このソリューションは、MMC で証明書を参照して [証明書キーの管理] を選択すると、アプリ プール アカウントが一覧表示されるという意味で機能します。WinHttpCertCfg を実行してアクセス権のあるアカウントを一覧表示しても、新しいアプリ プールが一覧表示されます。
しかし、結局のところ... Webアプリケーションを参照すると、「キーセットが存在しません」というメッセージが表示されます。
私の焦点は、2番目のアプローチを修正することです。これが元のコードへの私の変更です