IIS 7.0 구성 위임 이해

작성자: Saad Ladki

소개

IIS는 7번째 제품 릴리스를 위한 새로운 파일 기반 구성 시스템을 도입했습니다. 이 새로운 시스템은 ASP.NET, Indigo 및 타사 구성 요소와 같은 기술이 사이트 또는 애플리케이션 속성을 보관하기 위해 이 구성 저장소를 사용하고 확장할 수 있는 전체 웹 플랫폼에 적합한 데이터 기반 시스템을 강조합니다.

시스템은 ASP.NET web.config 파일과 유사한 구문을 사용하여 간단하고 명확한 형식으로 정의된 XML 파일을 기반으로 합니다. 이러한 구성 파일은 논리적 그룹화에 설정을 저장하며 파일에 대한 변경 내용은 속성이 수정되는 사이트 또는 애플리케이션에 즉시 반영됩니다.

또한 이 새로운 시스템은 관리자가 사이트 및 애플리케이션 소유자가 특정 설정을 수정하도록 허용할 수 있는 위임된 관리 환경을 제공합니다. 이러한 변경의 영향은 문제의 특정 사이트 또는 애플리케이션에 국한됩니다. 이 모델은 콘텐츠 및 구성 설정이 모두 사이트 또는 애플리케이션 디렉터리에 저장되고 한 컴퓨터에서 다른 컴퓨터로 x-copy 배포될 수 있는 자체 포함 애플리케이션의 개념을 소개합니다.

구성 파일 및 구성 스키마

IIS 7.0 이상에는 에 있는applicationHost.config 라는 중앙 구성 파일이 있습니다 %WINDIR%\System32\InetSrv\Config\. 이 파일은 IIS 6.0이 구성 저장소에 사용한 metabase.xml 파일을 대체합니다. 이 새로운 구성 시스템은 매우 간단하고 파일 기반이지만 매우 강력합니다. IISADMIN이 필요하지 않으므로 구성 서비스가 없습니다. 각 작업자 프로세스에는 구성 판독기 구성 요소의 instance 있으며 파일에서 직접 구성을 가져옵니다.

또한 구성의 메모리 내 표현은 없습니다. 변경 내용이 파일에 실행되면 작업자 프로세스에 의해 즉시 선택되고 지정된 사이트, 애플리케이션 또는 가상 디렉터리에 반영됩니다.

applicationHost.config 파일에는 IIS 및 기타 웹 기술의 다양한 기능 및 구성 요소에 대한 전역 설정이 포함되어 있습니다. 이 파일에 설정된 모든 속성은 컴퓨터의 모든 사이트, 애플리케이션 및 가상 디렉터리에 적용됩니다.

IIS에서 사용하는 구성 판독기는 스키마 파일에 정의되어 있으므로 각 구성 섹션, 요소 및 특성의 형식, 구문 및 올바른 이름을 이해합니다. 구성에 대한 스키마는 디렉터리에 있는 %WINDIR%\System32\InetSrv\Config\Schema\ 파일에 정의됩니다. 구성 시스템을 인스턴스화할 때 작업자 프로세스는 스키마를 메모리로 읽고 이를 통해 시스템에서 설정할 수 있는 속성과 해당 형식을 이해하는 데 도움이 됩니다. 최소한 IIS_schema.xml, ASPNET_schema.xmlFX_schema.xml 파일은 이 디렉터리에 있으며 IIS, ASP.NET 및 .NET Framework 기능에 각각 적용되는 섹션의 구성 구조를 정의합니다.

스키마는 구성 및 해당 섹션의 여러 측면을 정의합니다( 예: 섹션 및 속성 이름 지정, 값에 필요한 형식, 이러한 값의 범위 또는 해당 값의 범위가 고유하거나 필요한 경우). 또한 특정 특성이 취할 기본값을 정의합니다. 속성이 applicationHost.config 정의되지 않은 경우 해당 값은 스키마 파일에 명시된 기본 설정에서 가져옵니다.

applicationHost.config 이 중앙 파일 외에도 여러 web.config 파일이 URL 계층 구조의 모든 수준에 나타날 수 있습니다. 이러한 파일은 사이트, 애플리케이션, 가상 디렉터리 또는 물리적 경로 수준에 나타날 수 있습니다. 이러한 파일은 값이 applicationHost.config 정의된 전역 설정을 재정의하는 속성을 정의합니다. 그러나 이러한 변경 내용은 파일이 표시되는 scope(예: 지정된 사이트, 애플리케이션, 가상 디렉터리 또는 web.config 파일이 있는 실제 경로에 대해서만 적용됩니다.

구성 계층 구조 및 유효 구성

IIS는 applicationHost.config 외에도machine.config및 루트 web.config파일을 모두 사용하는 ASP.NET 사용합니다. machine.config 파일은 모든 Framework 기능에 필요한 속성을 정의합니다. 루트 web.config 파일은 모든 ASP.NET 웹 애플리케이션에 대해 정의된 속성에 대한 전역 설정을 정의합니다. 이 두 파일은 IIS의 applicationHost.config 유사합니다. .NET Framework 및 IIS 버전이 별도로 있기 때문에 세 개의 파일이 있습니다. 단일 버전의 IIS가 있는 지정된 Windows Server 시스템에 설치된 프레임워크의 여러 버전이 있을 수 있습니다.

따라서 구성 계층 구조는 시스템의 구성 설정에 대해 정의되고 계산됩니다. 계층 구조는 machine.config 시작한 다음 루트 web.config 파일로 진행한 다음, applicationHost.config. 그런 다음 사이트, 애플리케이션 또는 가상 디렉터리 수준에 있는 선택적 web.config 파일이 계층에 추가되고 적용됩니다. 마지막에 속성은 machine.config 마지막 web.config 파일(있는 경우)으로 부모 파일에서 자식 파일로 상속되며 유효한 구성은 지정된 경로에 대해 계산됩니다.

상속 동작은 기본적으로 수행됩니다. 계층 구조의 하위 수준에 있는 모든 설정은 현재 수준 이상의 파일에 정의된 부모 설정을 재정의합니다. 그러나 계층 구조를 더 자세히 진행하면 구성의 scope 더 제한적입니다. machine.config, 루트 web.config 및 applicationHost.config 파일의 설정이 시스템의 모든 항목에 적용되는 경우 선택적 web.config 파일의 설정은 현재 위치 및 아래(사이트, 애플리케이션 또는 가상 디렉터리)에만 적용됩니다.

구성 섹션

구성 파일 내에는 읽고 설정할 수 있는 가능한 설정이 있습니다. 설정은 구조화된 방식으로 그룹화됩니다. 특정 기능(예: ASP, 인증, ISAPI 등)과 유사하거나 적용 가능한 여러 설정은 구성 섹션이라는 논리 단위 블록에서 함께 그룹화됩니다. 각 구성 섹션에는 다른 구성 섹션이 포함될 수 있지만 가장 일반적으로 요소, 컬렉션 또는 특성을 정의합니다.

구성 요소는 여러 구성 특성을 정의하는 XML 요소입니다. 구성 컬렉션은 추가/제거/지우기 구성 지시문으로 정의된 요소 목록을 포함하는 구성 요소의 특별한 경우입니다. 마지막으로 구성 특성은 XML 특성을 나타내는 리프 구성 설정입니다.

다음 코드 조각은 defaultDocument> 섹션에< 대한 설정을 보여줍니다. 활성화된 단어는 파일 단어가 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 서버의 구성 섹션에 대한 레지스트리 지점으로 사용됩니다. 이 섹션에서는 시스템에서 사용할 수 있는 현재 구성 섹션을 등록합니다. 지정된 경우 구성 시스템이 확장되고 사용자 지정 섹션이 서버에 추가되는 경우 이 섹션에 요소 항목을 추가하여 등록해야 합니다.

다음 코드 조각은 defaultDocument> 섹션의 <항목을 보여 <configSections> 있습니다. 다른 항목은 명확성을 위해 생략되었습니다. 의 흥미로운 부분은 <configSections> 각 섹션의 네임스페이스를 정의하는 섹션 그룹 항목입니다. 이 경우 system.webServer 및 overrideModeDefault 특성의 값은 이 섹션에 대해 "허용"입니다. allowDefinition은 선언되지 않으므로 스키마에서 가져와 기본값은 "모든 곳"입니다.

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

섹션 및 해당 섹션 그룹을 정의하는 것 외에도 정의된 두 가지 주요 특성인 overrideModeDefaultallowDefinition이 있습니다.

overrideModeDefault 특성은 섹션의 잠긴 상태를 정의하는 선택적 특성입니다. 사용 가능한 값은 허용 또는 거부입니다. 기본값은 "Allow"입니다. 서버의 성능, 보안 또는 중요한 측면과 관련된 모든 IIS 섹션은 이 특성을 "거부"로 설정하여 잠깁니다. overrideModeDefault 특성이 "Deny"로 설정된 경우 특정 구성 섹션의 속성 값을 설정하는 하위 수준(예: web.config 파일)의 구성 파일을 적용하고 전역 값을 재정의할 수 없습니다. 잠금 위반이 발생하고 오류가 발생합니다.

allowDefinition 특성은 섹션을 정의하고 속성을 설정할 수 있는 계층의 수준을 정의하는 또 다른 선택적 특성입니다. 해당 값이 MachineOnly인 경우 섹션은 applicationHost.config 또는 machine.config만 설정할 수 있습니다. 해당 값이 MachineToRootWeb이면 MachineOnly 파일 또는 루트 web.config 섹션을 설정할 수 있습니다. 해당 값이 MachineToApplication인 경우 이전의 세 파일 또는 애플리케이션 루트 폴더의 web.config 파일에서도 섹션을 설정할 수 있습니다. 마지막으로 해당 값이 모든 위치 (기본값)인 경우 전역적으로 구성에 영향을 주는 항목이든 지정된 사이트, 애플리케이션 또는 가상 디렉터리에 적용되는 web.config 파일에서든 모든 구성 파일에서 설정할 수 있습니다.

위치 개념

구성 계층 구조의 지정된 파일에 지정된 모든 설정은 자식 파일에 의해 재정의될 수 있는 수준 이하에 적용됩니다. 그러나 경로 특성과 함께 위치 태그를 사용하여 현재 구성 파일 아래의 특정 경로에 구성 설정을 지정하고 적용하는 옵션이 있습니다. 구성 파일이 applicationHost.config 경우 위치 태그에는 시스템의 모든 사이트, 애플리케이션 및 가상 디렉터리에서 특정 사이트, 애플리케이션, 가상 디렉터리 또는 파일에 이르는 경로가 포함될 수 있습니다. 위치 태그는 web.config 파일에도 지정할 수 있으며 현재 사이트, 애플리케이션 또는 가상 디렉터리 아래의 경로에 대한 상대 경로를 포함할 수 있습니다.

다음 코드 조각은 개발자 사이트에만 적용할 구성 속성을 지정하는 방법을 보여줍니다. 사이트 콘텐츠의 web.config 파일을 통해 수행할 수도 있습니다. 개발자 사이트의 효과적인 구성은 applicationHost.config 파일 컬렉션에 대한 항목 목록과 사이트의 위치 경로 및 web.config 파일입니다.

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

점(.)을 지정하는 것과 동일한 경로가 선언되지 않은 경우 경로는 이 수준 이하에서 모든 자식 경로로 이해됩니다. applicationHost.config 이 작업을 수행하면 전역 수준에 대한 구성도 지정됩니다.

위치 태그에 정의할 수 있는 특성은 overrideMode입니다. overrideModeDefault와 마찬가지로 지정된 구성 섹션이 참조되고 현재 위치 태그에 설정된 속성을 계층의 하위 수준에서 편집하고 재정의할 수 있는지 여부를 지정합니다.

섹션 잠금 및 잠금 해제

섹션의 overrideModeDefault 태그 <configSections> 를 통해 섹션을 잠그는 초기 개념을 가져와서 보다 세분화되도록 확장할 수 있습니다. 섹션에서 수준에서 재정 <configSections> 의되도록 허용하면 섹션이 열리고 URL 네임스페이스의 모든 수준에서 web.config 파일을 통해 시스템의 모든 사용자가 해당 값을 재정의할 수 있습니다. 그러나 이로 인해 심각한 보안 위험이 발생할 수 있으며 시스템의 가용성 또는 성능에 부정적인 영향을 줄 수 있습니다. 위치 태그를 통해 overrideMode 특성을 사용하고 섹션의 잠금 상태를 지정하고 지정된 경로에 대해 제한할 수 있습니다.

다음 코드 조각은 시스템의 모든 사이트, 애플리케이션 및 가상 디렉터리에 대한 섹션의 잠금을 해제 <windowsAuthentication> 하는 방법을 보여 줍니다. 이 작업은 overrideModeDefault 특성에서 "허용"을 설정하여 수행됩니다. 이 방법의 단점은 모든 사용자를 위한 섹션의 잠금을 해제하고 누구나 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> 
 
The location tag path can be specified here a site, application or even a virtual directory to which the administrator wants to unlock configuration and/or apply configuration at that level.

반대 동작을 수행할 수 있습니다. 이 동작은 특정 사이트에 대한 섹션을 잠그는 반면 나머지 시스템은 편집할 수 있습니다. 예를 들어 <defaultDocument> 는 섹션에서 overrideModeDefault 특성이 "허용" <configSections> 으로 설정된 섹션이지만 위치 태그를 통해 기본 사이트에 대해 이 섹션을 잠글 수 있습니다. 다음 코드 조각에서는 홈페이지로 표시할 서버의 기본 페이지로 시스템에서 허용하는 유일한 값이 basic.htm설정하면서 이 작업을 수행하는 방법을 보여 줍니다. clear 지시문은 구성 계층 구조의 위 수준에서 상속된 값을 null로 표시하며, 이 경우 applicationHost.config 파일의 전역 목록입니다.

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

세분화된 잠금

위치 태그를 통해 섹션을 여는 것은 지정된 경로의 사이트 소유자 또는 애플리케이션에 대한 섹션 및 모든 속성의 잠금을 해제하는 효과적인 방법입니다. 이는 실제로 사이트 및 애플리케이션 소유자가 섹션에 무제한으로 액세스할 수 있도록 하는 모든 접근 방식입니다. 그러나 경우에 따라 관리자는 섹션의 특정 속성에 대한 특정 제어를 원하고 특정 값에 대한 제어를 원합니다. 다른 사용자는 위임할 수 있습니다. 세분화된 잠금이 들어오는 곳입니다.

세분화된 잠금은 요소 또는 기타 특성에 설정할 수 있는 특정 특성의 그룹화입니다. 세분화된 잠금은 현재 경로 아래의 경로가 구성 값을 수정할 수 있는지 여부를 선언할 수 있습니다. 값을 읽을 수 있지만 잠금이 설정되면 편집하거나 선언할 수 없습니다. 잠금이 설정된 값은 편집하지 마세요. 이렇게 하면 구성 잠금 위반 오류가 발생합니다.

세분화된 잠금 그룹의 첫 번째 특성은 lockAttributes입니다. lockAttributes는 현재 구성 수준 이하의 경로에 대해 잠긴 쉼표로 구분된 특성 목록을 정의합니다. 또한 별표(*)를 해당 값으로 허용합니다. 즉, 모든 특성이 잠겨 있습니다. 이 시점에서 구성 섹션은 자식 수준 경로와 잠긴 특성에서도 읽을 수 있지만 보호된 특성을 편집하면 오류가 발생합니다.

다음 코드 조각에서는 개발자 사이트에 대한 defaultDocument> 섹션의 <사용 상태를 잠그는 방법을 보여 줍니다. 개발자 사이트의 소유자가 기본 문서 기능을 사용하지 않도록 설정하거나 위치 태그에 명시된 값과 동일한 값으로 속성을 선언하는 경우 잠금 위반이 발생합니다.

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

세분화된 잠금 그룹화의 두 번째 특성은 lockElements입니다. lockElements는 현재 구성 수준 이하의 경로에 대해 잠긴 요소의 쉼표로 구분된 목록을 정의합니다. lockAttributes와 마찬가지로 별표(*)도 해당 값으로 허용합니다. 이는 모든 요소가 잠겨 있음을 의미합니다. 이는 여러 요소 또는 컬렉션이 있고 자식 수준 경로에 대해 보호해야 하는 구성 섹션에 매우 유용합니다. 다시 말하지만 잠긴 값을 편집하면 오류가 발생합니다.

다음 코드 조각에서는 개발자 사이트에 대한 파일 컬렉션을 잠그는 방법을 보여 있습니다. 이렇게 하면 사이트 소유자가 기본 문서 기능을 사용할지 여부를 결정할 수 있습니다. 그러나 사용하도록 설정된 경우 전역 값을 수정할 수 없으며 컴퓨터 관리자가 applicationHost.config 설명한 내용을 상속합니다.

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

lockElement 예제는 컬렉션 내에서도 이러한 컬렉션의 지시문을 잠그는 데 유용합니다. 지시문은 컬렉션의 추가, 제거, 지우기 등의 핵심 단어입니다. 관리자는 지시문을 잠그면 특정 요소 또는 모든 요소를 추가하거나 제거하는 데 컬렉션 목록을 사용할 수 있는지 여부를 미세 조정할 수 있습니다.

다음 코드 조각은 파일 컬렉션에서 현재 항목의 제거 및 지우기를 잠그는 방법을 보여줍니다. 사이트 소유자는 필요한 경우 파일 컬렉션에 새 항목을 추가할 수 있습니다. 사이트 소유자가 명확한 태그를 지정하거나 항목을 제거하려고 하면 잠금 위반이 발생합니다.

<location path="Developer Site"> 
    <defaultDocument enabled="true" > 
        <files lockElements="clear,remove"> 
            <add value="Developer.htm" /> 
        </files> 
    </defaultDocument> 
</location> 
 
Besides lockAttribute and lockElement, there are negative counterparts: lockAllAttributesExcept, and lockAllElementsExcept. These attributes achieve  the inverse action of the previous ones in which the comma-separated list declares the attributes and elements to be unlocked while the rest are not  available to be edited in child paths.

lockItem 특성도 있습니다. 이렇게 하면 특성이 잠기고 XML 특성 수준에서 작동합니다. 다음 코드 조각은 파일 컬렉션의 basic.htm 항목 수정을 제외하고 사이트 관리자가 컬렉션의 항목 추가 또는 제거와 같이 원하는 작업을 수행할 수 있는 방법을 보여 줍니다.

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

요약

이 문서에서는 구성 시스템, 해당 파일, 스키마 및 위임 기능에 대한 기본 개요를 설명했습니다. 또한 구성 계층 구조 및 효과적인 구성에 대해서도 설명했습니다. 또한 이 문서에서는 구성 섹션과 요소 및 특성의 구조에 대한 소개도 제공했습니다. 위치, 잠금 및 세분화된 잠금의 개념을 예시했습니다.

전반적으로 IIS는 중앙 구성 파일의 모든 구성을 사용하거나 사이트 및 애플리케이션 관리자가 애플리케이션 및 콘텐츠에 적용되는 속성을 수정할 수 있는 web.config 파일을 통해 배포하는 기능을 갖춘 새로운 파일 기반 구성 시스템을 도입했습니다. 분산 구성 모델을 사용하면 콘텐츠 및 구성 설정이 모두 사이트 또는 애플리케이션 디렉터리에 저장되고 한 컴퓨터에서 다른 컴퓨터로 배포할 수 있는 자체 포함 애플리케이션의 개념이 활성화 됩니다.