IIS 7.0 で構成委任を使用する方法
作成者: Saad Ladki
要約
この記事では、サーバーで委任による構成を有効にする方法について説明します。 ここでは、コンテンツ ページとアプリケーション コードを使用して、サーバーとアプリケーションの構成設定を展開する方法について説明します。
マシン管理者は、使用するアプリケーションや仮想ディレクトリをマスター構成ファイル %windir%\system32\inetsrv\config\applicationHost.config
で定義し、特定のセクションの委任を許可した後、アプリケーション レベルで設定を制御できます。方法としては、アプリケーションの web.config ファイルで設定を行うことで、グローバルな既定値をオーバーライドします。 これは、コンピューターのローカル管理者でなくても、アプリケーションのディレクトリにアクセスできれば実行できます。
このドキュメントを読むと、グローバル レベルでアプリケーションと仮想ディレクトリを定義し、委任の構成セクションのロックを解除し、構成階層の下位レベルで個々のアプリケーションの構成設定をオーバーライドする方法について理解できます。
はじめに
IIS では、マシン管理者が、構成の設定および変更のタスクをサイトとアプリケーションの所有者に委任できます。 これを行うには、コンテンツ ディレクトリ内の web.config ファイルを使用します。 これらのファイルでは、構成セクションを指定し、その内容を階層内の下位レベルに反映させることができます。 このような委任を有効にするには、コンピューター管理者がグローバル レベルでセクションのロックを明示的に解除する必要があります。 既定では、ほとんどの IIS セクションが委任に対してロックダウンされており、すべての .NET Framework セクション (ASP.NET を含む) はグローバル レベルでロックされていません。
このドキュメントでは、新しいアプリケーションと仮想ディレクトリをグローバル レベルで定義する方法について説明します (このタスクを実行できるのはマシン管理者だけです。委任することはできません)。
このドキュメントでは、特定のレベルの設定をオーバーライドするために、web.config をアプリケーション コンテンツと共に xcopy-deploy する方法について説明します。 また、構成システムの主要な概念についても説明します。そのため、構成システム上で UI やその他の抽象化を使用せずに、構成ファイルの直接編集を使用してこれらのタスクを実行する方法についても説明します。
前提条件
- IIS 7.0 以降がコンピューターにインストールされていることを確認してください。 IE から
http://localhost/
に移動すると、既定の [作成中] ページが開きます。 IIS がインストールされていない場合は、セットアップ方法のガイドでインストール手順を参照してください。 - マシンに対する管理特権があることを確認してください。 あらかじめ登録された Administrator アカウント以外のユーザーとしてログオンしている場合、既定では、管理特権は付与されていません (そのユーザーがコンピューター上のローカル Administrators グループに追加されている場合でも同様)。 これは Windows Server® 2008 の新しいセキュリティ機能 (LUA と呼ばれます) であり、IIS のスコープを超えて適用されます。 あらかじめ登録された Administrator アカウントととしてログオンするか、必要に応じて "runas" コマンドライン ツールを使用し、明示的にあらかじめ登録された Administrator としてアプリケーションを呼び出してください。
たとえば、notepad.exe を起動するには、"runas /user:administrator notepad.exe" コマンドを実行します。 Administrator アカウントのパスワードの入力を求めるメッセージが表示されます。 "runas /user:administrator cmd.exe" を実行して、既に昇格している cmd-box シェルを用意しておくと便利です。 その cmd-box から実行されるすべてのアプリケーションも同様に昇格するため、その cmd-box から "runas" 構文を使用する必要はありません。
- マスター構成ファイルがバックアップされていることを確認します。 applicationHost.config を別のファイルにコピーするだけで、後で復元できるようになります。 applicationHost.config は inetsrv\ ディレクトリの下にあり、このディレクトリはシステム ディレクトリの下にあります。
Note
これを実行するには、管理者である必要があります。上記の説明を参照してください。
- 開始する前に、"クリーンな状態" になっていることを確認します。 これを行うには、前の演習で applicationHost.config ファイルに対して行った変更を元に戻します。 (VPC イメージを使用している場合は、その状態を保存せずにイメージを再起動するのが最も簡単な方法です)。
- トラブルシューティングを迅速に行うために、IE でわかりやすい HTTP エラー メッセージをオフにする ([ツール] > [オプション] > [詳細設定]) ことをお勧めします。
手順 1: 新しいアプリケーションを定義する
メモ帳などのテキスト エディターを使って、次の場所にある ApplicationHost.config ファイルを開きます。
%windir%\system32\inetsrv\config\applicationHost.config
<sites>
セクションに移動します。内容は次のようになっています。<sites> <siteDefaults> <logFile directory="C:\WINDOWS\System32\LogFiles" /> </siteDefaults> <applicationDefaults applicationPool="DefaultAppPool"/> <site name="Default Web Site" id="1"> <bindings> <binding protocol="http" bindingInformation="*:80:" /> </bindings> <application path="/"> <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" /> </application> <logFile directory="C:\WINDOWS\System32\LogFiles" /> </site> </sites>
Web サーバーが実行されていること、および既定の Web サイトにアクセスできることを確認します。 これを行うには、ブラウザーを起動し、
http://localhost/
を要求しますこの要求により、Web ページが返されます。 返されない場合は、コマンド ボックスから「net start w3svc」と入力して IIS サーバーを起動するか、Windows イベント ログ ビューアーを使用してトラブルシューティングを行ってください。
ブラウザーで、
http://localhost/
を要求しますこの要求では、ページは返されません (エラー ページが表示されます)。これは、構成で仮想パスがまだ定義されていないためです。これは次の手順で行います。
ApplicationHost.config ファイルで、最上位の
<virtualDirectory>
要素を含んだ "/app" パスを使用して、<application>
要素を追加します。 最上位の仮想ディレクトリは、"/" というパスを持つディレクトリです。 仮想ディレクトリの物理パスには、C:\tmp
(または、後で使用するのと同様のパス) を指定します。終えると、
<sites>
セクションは次のようになります。<sites> <siteDefaults> <logFile directory="C:\WINDOWS\System32\LogFiles" /> </siteDefaults> <applicationDefaults applicationPool="DefaultAppPool"/> <site name="Default Web Site" id="1"> <bindings> <binding protocol="http" bindingInformation="*:80:" /> </bindings> <application path="/"> <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" /> </application> <application path="/app" > <virtualDirectory path="/" physicalPath="C:\tmp" /> </application> <logFile directory="C:\WINDOWS\System32\LogFiles" /> </site> </sites>
これで、構成ファイルに新しいアプリケーションを定義できました。
ブラウザーで、
http://localhost/
を要求しますWeb サーバーからは、ディレクトリ参照が有効になっていないことを示すエラー ページが返されます。 これは、
c:\tmp
にコンテンツがまだないため、サーバーがこの要求をディレクトリ参照の要求として処理するために発生します。 iisstart.htmを\inetpub\wwwroot
ディレクトリからc:\tmp
にコピーし、ブラウザーを更新してください。 これで、[作成中] ページが表示されます。
手順 2: 構成セクションのロックを解除する
メモ帳などのテキスト エディターを使用して applicationHost.config を開き、<authentication> セクション グループを見つけます。
<anonymousAuthentication> セクションと
<windowsAuthentication>
セクションを、ファイル内の現在の場所から、overrideMode="Allow" になっているファイルの下部の新しい location タグに移動します。次に例を示します。<configuration> <system.webServer> <security> <authentication> <!-- cut the anonymousAuthentication and windowsAuthentication --> <!-- XML elements from this area in the file, and paste below --> </authentication> </security> </system.webServer> <location overrideMode="Allow"> <system.webServer> <security> <authentication> <!-- paste the 2 sections from above here --> </authentication> </security> </system.webServer> </location> </configuration>
これで、これらのセクションを名前空間の下位レベルによってオーバーライドできるようになりました (overrideMode="Allow" を指定している location タグ内に入ったため)。 すべての下位レベルの web.config ファイルで、これらの設定をオーバーライドできるようになりました。
手順 3: 設定をアプリケーション レベルでオーバーライドする
メモ帳などのテキスト エディターを使用して、アプリケーション フォルダー (
c:\tmp
など) に web.config という名前の新しいテキスト ファイルを作成します。web.config ファイルで、
<configuration>
要素とその子要素の<system.webServer>
要素を作成します。<system.webServer>
要素内に、<authentication>
要素を含む<security>
要素を作成します。Windows 認証と匿名認証スキームを無効にする設定を入力します。この設定は、グローバル レベルで既定で有効になっています。
終えると、web.config ファイルは次のようになります。
<configuration> <system.webServer> <security> <authentication> <windowsAuthentication enabled="false" /> <anonymousAuthentication enabled="false" /> </authentication> </security> </system.webServer> </configuration>
ブラウザーで、
http://localhost/app
を要求します。Note
web.config ファイルでこのページに対するすべての認証方法を無効にしたため、ページを表示する権限はありません。
ブラウザーで
http://localhost/
を要求し、ページにアクセスできることを確認します。 web.config ファイルの構成は、アプリケーション レベルでのみ適用されます。web.config ファイルで、enabled が true に設定された
<basicAuthentication>
要素を追加して、基本認証を有効にします。終えると、web.config ファイルは次のようになります。
<configuration> <system.webServer> <security> <authentication> <windowsAuthentication enabled="false" /> <anonymousAuthentication enabled="false" /> <basicAuthentication enabled="true" /> </authentication> </security> </system.webServer> </configuration>
もう一度
http://localhost/app
を要求します。 一部の構成がグローバル レベルでロックされているということと、web.config ファイルがそれをオーバーライドしようとしていることを示すエラー ページが表示されます。つまり、これは構成エラーです。 これを解決するには、グローバル レベル (applicationHost.config) の <basicAuthentication> セクションをオーバーライドできるようにします (他の 2 つのセクションに対して行ったのと同様)。 その後、ブラウザーを更新します。そうすると、ユーザー名とパスワードの入力を求められます。これは、基本認証が実行されていることを示します。
ログオンしているユーザーのユーザー名とパスワードを入力し、ページが表示されることを確認します。
http://localhost/
を要求した場合、行った構成の変更はアプリケーション レベルでのみ適用されるため、ユーザー名とパスワードの入力は求められません。Note
サーバーとブラウザーはどちらも、ユーザー トークンをキャッシュします。 最初からやり直したい場合、ユーザー名のプロンプトが表示されなくなった場合は、ブラウザーを閉じ、IIS ワーカー プロセスを停止してください (または、Windows コマンド ラインから "net stop /y http" を実行し、その後 "net start w3svc" を実行して IIS を再起動してください)。
まとめ
このドキュメントでは、マスター構成ファイル applicationHost.config でアプリケーションと仮想ディレクトリを定義する方法について説明しています。また、<system.webServer>
セクションにサーバー設定が含まれている、アプリケーション固有の構成ファイルを展開する方法についても説明しています。 web.config ファイルの <system.web>
セクション グループには、ASP.NET 設定などの設定を追加できます。
web.config ファイル、またはアプリケーションのディレクトリ全体にアクセス制御リスト (ACL) を設定して、管理者以外のユーザーがファイルにアクセスできないようにすることをお勧めします。