IIS 7.0 の構成の委任について

発行日 : 2007 年 11 月 23 日 (作業者 : saad(英語))
更新日 : 2008 年 3 月 13 日 (作業者 : saad(英語))

はじめに

IIS 7.0 では、新しいファイル ベースの構成システムが導入されました。この新しいシステムでは、Web プラットフォーム全体に適したデータ駆動型システムに重点を置いており、ASP.NET、WCF などのテクノロジおよびサードパーティ コンポーネントは、この構成ストアを使用および拡張して、任意のサイトやアプリケーションのプロパティを格納できます。

このシステムは、ASP.NET の web.config ファイルと似た構文を持つ、簡易で明確な形式で定義された XML ファイルに基づいています。これらの構成ファイルでは、設定は論理グループによって保持されます。ファイルに変更が加えられると、変更されたプロパティはサイトまたはアプリケーションにすぐに反映されます。

また、この新しいシステムでは管理を委任することもできます。管理者は、サイトおよびアプリケーションの所有者に特定の設定を変更することを許可できます。また、それらの変更の影響を、特定のサイトまたはアプリケーションに限定できます。このモデルでは、"自己完結型アプリケーション" の概念が導入されています。そこでは、コンテンツおよび構成設定の両方がサイトまたはアプリケーション ディレクトリに格納され、別のコンピューターに x-copy コマンドによって展開できます。

この記事には次のような内容が含まれています。

  • 構成ファイルおよび構成スキーマ

  • 構成の階層および有効な構成

  • 構成セクション

  • 特別なセクション : <configSections>

  • location の概念

  • セクションのロックとロック解除

  • 粒度指定ロック

  • まとめ

構成ファイルおよび構成スキーマ

IIS 7.0 では、%WINDIR%\System32\InetSrv\Config\ に applicationHost.config という名前の中央構成ファイルがあります。このファイルは、IIS 6.0 で構成ストアとして使用されていた metabase.xml ファイルに代わるものです。この新しい構成システムはファイルベースの非常に単純な、しかし非常に強力なシステムです。IISADMIN が不要なため、構成サービスはありません。各ワーカー プロセスには構成リーダー コンポーネントのインスタンスがあり、ファイルから直接構成を取得します。

また、構成情報はメモリ内に展開されません。ファイルに変更が加えられると、ワーカー プロセスによってすぐに取得され、任意のサイト、アプリケーション、または仮想ディレクトリに反映されます。

applicationHost.config ファイルには、IIS 7.0 のさまざまな機能やコンポーネント、およびその他の Web テクノロジのグローバルな設定が格納されます。このファイルに設定されているすべてのプロパティは、コンピューター上のすべてのサイト、アプリケーション、および仮想ディレクトリに適用されます。

すべての構成セクション、要素、属性の形式、構文、および正しい命名はスキーマ ファイル内に定義されているため、IIS 7.0 で使用される構成リーダーは、スキーマ ファイルによってそれらを知ることができます。構成のスキーマは、%WINDIR%\System32\InetSrv\Config\Schema\ ディレクトリにあるファイルに定義されます。構成システムをインスタンス化した後で、ワーカー プロセスはスキーマをメモリに読み込みます。これにより、システムは設定可能なプロパティとその形式を知ることができます。少なくとも、IIS_schema.xml、ASPNET_schema.xml、および FX_schema.xml ファイルがこのディレクトリに置かれます。それぞれのファイルは、IIS、ASP.NET、および .NET Framework の機能に適用されるセクション構成の構造を定義しています。

スキーマは、構成および構成セクションのさまざまな情報を定義します。定義される情報には、セクションやプロパティの名前、予期される値の種類、それらの値の範囲、情報の一意性や必須性などがあります。また、特定の属性の既定値も定義されます。applicationHost.config で特定のプロパティが定義されていない場合、そのプロパティの値はスキーマ ファイルの既定の設定から取得されます。

中央ファイルである applicationHost.config のほかに、URL 階層の任意のレベルに複数の web.config ファイルを置くことができます。これらのファイルは、サイト、アプリケーション、仮想ディレクトリに置くことができます。さらには、物理パス レベルでも置くことが可能です。これらのファイルに定義されたプロパティの値は、applicationHost.config に定義されたグローバル設定よりも優先されます。ただし、変更内容はファイルが存在する範囲でのみ適用されます。つまり、特定のサイト、アプリケーション、仮想ディレクトリ、物理パスなど、web.config ファイルが置かれた場所のみが範囲となります。

構成の階層および有効な構成

IIS 7.0 では ASP.NET を使用しているため、applicationHost.config 以外にも machine.config ファイルおよびルートの web.config ファイルの両方に依存します。machine.config ファイルは、Framework のすべての機能に必要なプロパティを定義します。ルートの web.config ファイルは、すべての ASP.NET Web アプリケーションで定義されているプロパティのグローバル設定を定義します。これら 2 つのファイルは IIS 7.0 の applicationHost.config に似ています。3 つのファイルが存在するのは、.NET Framework と IIS のバージョンが別個であるためです。単一バージョンの IIS を持つ特定の Windows Server システムに、複数の Framework バージョンをインストールすることができます。 **

このため、構成の階層が定義され、この階層によってシステムの構成設定が算出されます。階層は、machine.config、続いてルートの web.config ファイル、そして applicationHost.config の順になります。その次に、サイト、アプリケーション、または仮想ディレクトリのレベルにある web.config ファイルがオプションで追加され、階層に適用されます。最後に、親ファイルから子ファイルににプロパティが継承されます。つまり、machine.config から最後の web.config ファイル (存在する場合) にプロパティが継承され、対象のパスの有効な構成が算出されます。

継承動作は既定で実行されます。階層の下位レベルの設定は、現在のレベルより上のファイルで定義された親設定を上書きします。ただし、階層の下位に行くほど、構成の範囲はより限定されます。machine.config、ルートの web.config、および applicationHost.config ファイルの設定はシステム内のすべての場所に適用されますが、オプションの web.config ファイルの設定は現在の場所、およびそこより下位の場所にのみ適用されます (サイト、アプリケーション、仮想ディレクトリのいずれでも同様)。

構成セクション

構成ファイル内には設定項目があり、それぞれ読み取りおよび設定が可能です。設定は構造化された手法でグループ化されます。類似する複数の設定、または特定の機能 (ASP、認証、ISAPI など) に適用される複数の設定は、構成セクションと呼ばれる論理ユニット ブロックにグループ化されます。構成セクションの内部にさらに別の構成セクションが含まれる場合がありますが、通常、構成セクション内では要素、コレクション、または属性が定義されます。

構成要素は、複数の構成属性を定義する XML 要素です。構成コレクションは構成要素の特別な入れ物で、add/remove/clear の構成ディレクティブで定義される要素の一覧が含まれます。最後に、構成属性とは、XML の属性によって表されるリーフ構成設定です。

次の構成の断片は、<defaultDocument> セクションの設定を示しています。enabled は属性です。files は要素であり、そこには add ディレクティブおよび一連の属性で定義された他の要素が含まれています。

       <defaultDocument enabled="true"> 
           <files> 
               <add value="Default.htm" /> 
               <add value="Default.asp" /> 
               <add value="index.htm" /> 
               <add value="index.html" /> 
               <add value="iisstart.htm" /> 
               <add value="default.aspx" /> 
           </files> 
       </defaultDocument>
       

この構成セクションにはスキーマが関連付けられています。次の断片は、IIS_schema.xml ファイル内の <defaultDocument> セクション用のスキーマを示しています。スキーマは、セクションの名前、およびそれが出現する名前空間 (この場合は system.webServer) を定義します。また、スキーマは、属性、要素、およびそれらの名前、種類、既定値などの関連データを記述します。

<sectionSchema name="system.webServer/defaultDocument"> 
    <attribute name="enabled" type="bool" defaultValue="true" /> 
    <element name="files"> 
      <collection addElement="add" clearElement="clear" removeElement="remove" mergeAppend="false"> 
        <attribute name="value" type="string" isUniqueKey="true"/> 
      </collection> 
    </element> 
</sectionSchema>

特別なセクション : <configSections>

<configSections> 構成セクションは applicationHost.config 内で定義される特別なセクションで、IIS 7.0 サーバーの構成セクションのレジストリ ポイントとして使用されます。このセクションには、システム内で使用可能な現在の構成セクションが登録されます。構成システムが拡張され、カスタム セクションがサーバーに追加される場合は、このセクションに要素エントリを追加して登録する必要があります。

次の断片は、<defaultDocument> セクション用の <configSections> エントリを示しています。複雑になるのを避けるため、他のエントリは省略されています。<configSections> で注意する部分は、各セクションの名前空間 (ここでは system.webServer) を定義するセクション グループ エントリ、および overrideModeDefault 属性の値 (このセクションでは "Allow") です。allowDefinition は宣言されていないため、その値はスキーマから取得されます。既定値は "Everywhere" です。

<configSections> 
         <sectionGroup name="system.webServer" /> 
                    <section name="defaultDocument" overrideModeDefault="Allow" /> 
</configSections>

セクションとそのセクション グループが定義されるほかに、overrideModeDefault と allowDefinition の 2 つの重要な属性が定義されます。

overrideModeDefault 属性は、セクションのロック状態を定義するオプションの属性です。指定できる値は "Allow" または "Deny" です。既定値は "Allow" です。パフォーマンス、セキュリティ、またはサーバーの重要な分野に関連するすべての IIS 7.0 セクションは、属性が "Deny" に設定されてロックされます。overrideModeDefault 属性が "Deny" に設定されている場合、下位レベルの構成ファイル (web.config ファイルなど) で対象の構成セクションのプロパティの値を設定している部分は効力を持たず、グローバル値を上書きすることはできません。これはロック違反になり、エラーが発生します。

もう 1 つのオプション属性である allowDefinition 属性は、このセクションの定義およびプロパティの設定が可能な階層のレベルを定義します。値が MachineOnly の場合、このセクションを設定できるのは applicationHost.config または machine.config のみです。値が MachineToRootWeb の場合、このセクションは、MachineOnly の各ファイル、およびルートの web.config で設定できます。値が MachineToApplication の場合、このセクションは、前述の 3 つのファイルすべてに加え、アプリケーションのルート フォルダーの web.config ファイルでも設定できます。最後に、値が Everywhere の場合 (これが既定値です)、このセクションはすべての構成ファイルで設定できます。つまり、グローバルな構成に影響を与える構成ファイル、特定のサイト、アプリケーション、仮想ディレクトリに適用される web.config ファイルのいずれでも設定可能になります。

location の概念

構成階層の任意のファイルで指定されたすべての設定は、そのレベルとそれより下のレベルに適用されます (子ファイルによって上書きされる可能性はあります)。ただし、構成設定を指定し、現在の構成ファイルの下の特定のパスにその設定を適用するための方法が用意されています。location タグと path 属性を使用する方法です。構成ファイルが applicationHost.config の場合、location タグには幅広いパスを含めることができます。このパスでは、システム内のすべてのサイト、すべてのアプリケーション、すべての仮想ディレクトリが対象になるように指定できます。また、特定のサイト、特定のアプリケーション、特定の仮想ディレクトリ、特定のファイルが対象になるように指定することもできます。location タグは web.config ファイル内でも指定できます。これにより、現在のサイト、アプリケーション、または仮想ディレクトリの下にある任意のパスを相対パスとして指定することができます。

次の断片は、Developer Site のみに適用される構成プロパティを指定する方法を示しています。これは、サイト コンテンツ内の web.config ファイルでも指定できます。Developer Site で有効になる構成は、applicationHost.config、location path、このサイト用のすべての web.config ファイルのそれぞれの files コレクションのエントリの一覧が組み合わされたものになります。

<location path="Developer Site" overrideMode="Allow"> 
        <defaultDocument enabled="true"> 
            <files> 
                <add value="Developer.htm" /> 
            </files> 
        </defaultDocument> 
</location>

パスが宣言されていない場合は、ドット (.) が指定されている場合と同じになります。この場合、現在のレベル、および下位レベルのすべての子パスが対象であると認識されます。applicationHost.config でこのように指定すると、グローバル レベルの構成として指定されます。

location タグで定義できる属性として overrideMode があります。overrideModeDefault と同様に、この属性は、現在の location タグ内に設定されている特定の構成セクションおよびプロパティを、階層の下位レベルで編集および上書きできるかどうかを指定します。

セクションのロックとロック解除

<configSections> セクションにおいて overrideModeDefault タグを使用してセクションをロックする当初の概念を、よりきめ細かく拡張できます。セクションを <configSections> レベルで上書きできるようにすることでセクションは開放され、システム内の誰もが URL 名前空間の任意のレベルで web.config ファイルを使用して値を上書きできるようになります。ただし、これにより重大なセキュリティ リスクが生じたり、システムの可用性またはパフォーマンスに悪影響を与える可能性があります。location タグで overrideMode 属性を使用してセクションのロック状態を指定し、それを特定のパスに対して強制できます。

次の断片は、システム内のすべてのサイト、アプリケーションおよび仮想ディレクトリにおいて <windowsAuthentication> セクションのロックを解除する方法を示しています。そのためには、overrideModeDefault 属性で "Allow" を設定します。この方法の欠点は、すべてのユーザーに対してセクションがロック解除され、誰もがサイトまたはアプリケーション レベルで web.config ファイルを使用して設定を上書きできるようになる点です。

<section name="windowsAuthentication" overrideModeDefault="Allow" />

次の断片は、同じ処理 (<windowsAuthentication> セクションのロック解除) を AdministratorSite に対してのみ行い、AdministratorSite サイトのレベルで web.config ファイルを使用して、このセクションのプロパティを変更できるようにする方法を示しています。システム内の他のサイトには、ロックされた <windowsAuthentication> セクションの既定の動作が適用されます。これは overrideMode 属性によって行います。

<location path="AdministratorSite" overrideMode="Allow"> 
   <security> 
            <authentication> 
                <windowsAuthentication enabled="false"> 
                    <providers> 
                        <add value="Negotiate" /> 
                        <add value="NTLM" /> 
                    </providers> 
                </windowsAuthentication> 
            </authentication> 
   </security> 
</location> 

反対の動作 (特定のサイトに対してセクションをロックして、システムの残りの部分はセクションを編集できるようにする) も指定することができます。たとえば、<configSections> セクション内で、<defaultDocument> セクションの overrideModeDefault 属性が "Allow" に設定されているとします。location タグを使用することで、Basic Site に対してこのセクションをロックできます。次の断片は、この処理を行う方法を示しています。この場合、サーバーのホーム ページとして表示する既定のページに関して、システムで許可される唯一の値は basic.htm となっています。clear ディレクティブは、構成階層の上位レベル (この場合 applicationHost.config のグローバルなファイルの一覧) から継承された値を無効にします。

<location path="Basic Site" overrideMode="Deny"> 
        <defaultDocument enabled="true"> 
            <files> 
           </clear> 
                <add value="basic.htm" /> 
            </files> 
        </defaultDocument> 
</location>

粒度指定ロック

location タグを使用してセクションを開放することは、指定されたパスのサイトまたはアプリケーションの所有者に対して、セクションとそのすべてのプロパティのロックを解除するための有効な方法です。これは、サイトおよびアプリケーションの所有者に対象のセクションへの無制限アクセスを許可するかどうかに関して、実質的にはオール オア ナッシングのアプローチです。時に管理者は、セクション内の他の部分は委任しながら、特定のプロパティに一定の制御を加え、特定の値になるように制御したい場合があります。このような場合に、粒度指定ロックを使用します。

粒度指定ロックとは、要素または他の属性に設定可能な特定の属性をグループ化することです。粒度指定ロックでは、現在の場所より下位のパスで構成値を変更できるかどうかを宣言できます。値を読み取ることはできますが、ロックが設定されている場合、編集することも宣言することもできません。構成ロック違反エラーになるため、ロックが設定されている値は編集しないでください。

粒度指定ロックのグループ化の最初の属性は、lockAttributes です。lockAttributes は、現在の構成レベルの下位のパスに対して、ロック対象属性をカンマ区切りリストとして定義します。値としてアスタリスク (*) を指定することもできます (すべての属性がロックされます)。これにより、構成セクション内のロックされた属性を子レベルのパスで読み取ることはできますが、保護された属性を編集するとエラーになります。

次の断片は、Developer Site に対して <defaultDocument> セクションの enabled 状態をロックする方法を示しています。Developer Site の所有者が既定のドキュメント機能を無効化するか、または location タグ内に記述された値と同じ値を持つプロパティを宣言すると、ロック違反が発生します。

<location path="Developer Site" > 
        <defaultDocument enabled="true" lockAttributes="enabled" /> 
</location>

粒度指定ロックのグループ化の 2 つめの属性は、lockElements です。lockElements は、現在の構成レベルの下位のパスに対して、ロック対象要素をカンマ区切りリストとして定義します。lockAttributes と同様に、値としてアスタリスク (*) を指定することもできます (すべての要素がロックされます)。これは、構成セクション内に複数の要素またはコレクションがあり、それらを子レベルのパスに対して保護する必要がある場合に便利です。繰り返しになりますが、ロックされた値を編集するとエラーになります。

次の断片は、Developer Site に対して files コレクションをロックする方法を示しています。既定のドキュメント機能を有効化するかどうかはサイトの所有者が決定できますが、有効化した場合、グローバル値は変更できず、コンピューターの管理者が applicationHost.config で指定した値が継承されます。

<location path="Developer Site"> 
        <defaultDocument enabled="true" lockElements="files" > 
            <files> 
                <add value="Developer.htm" /> 
            </files> 
        </defaultDocument> 
</location> 

lockElement は、コレクション内でディレクティブをロックする場合にも便利です。ディレクティブとは、add、remove、clear などのコレクションのキーワードです。ディレクティブをロックすることで、コレクションの一覧において特定の要素またはすべての要素の追加や削除が可能かどうかを調整できます。

次の断片は、files コレクションで現在のエントリの削除および消去をロックする方法を示しています。サイトの所有者は、必要に応じて files コレクションに新しいエントリを追加できます。ただし、サイトの所有者が clear タグを指定したり、エントリを削除しようとすると、ロック違反が発生します。

<location path="Developer Site"> 
        <defaultDocument enabled="true" > 
            <files lockElements="clear,remove"> 
                <add value="Developer.htm" /> 
            </files> 
        </defaultDocument> 
</location> 

lockItem という属性もあります。これは属性をロックするためのものであり、XML 属性レベルで作用します。次の断片は、コレクション内で add エントリや remove エントリなどすべての処理の実行をサイト管理者に対して許可しますが、files コレクションの basic.htm エントリの変更だけは例外的に許可しない方法を示しています。

<location path="Developer Site"> 
        <defaultDocument enabled="true" > 
            <files> 
                <add value="basic.htm" lockItem="true"/> 
            </files> 
        </defaultDocument> 
</location>

まとめ

このドキュメントでは、構成システム、ファイル、スキーマおよび委任機能の概要を説明しました。構成の階層および有効な構成についても説明しました。構成セクション、および要素と属性の構造の概要も紹介しました。location、ロックおよび粒度指定ロックの概念についても説明しました。

IIS 7.0 では新しいファイルベースの構成システムが導入されています。このシステムでは、すべての構成を中央の構成ファイルに含めることができます。また、web.config ファイルを使用して構成を分散することもできます。web.config ファイルでは、サイトおよびアプリケーションの管理者が自分のアプリケーションやコンテンツに適用するプロパティを変更できます。分散構成モデルでは "自己完結型アプリケーション" の概念が導入されており、コンテンツおよび構成設定をサイトまたはアプリケーション ディレクトリに格納し、コンピューター間で x-copy コマンドを使用して展開することができます。

関連コンテンツ

記事