Конфигурация подключаемого модуля узла IIS

Конфигурация подключаемого модуля узла Служб IIS удаленного управления Windows (WinRM) предоставляет механизм размещения, позволяющий сторонним подключаемым модулям WinRM предоставлять данные управления в инфраструктуре WinRM.

В следующих разделах описывается конфигурация подключаемого модуля узла IIS.

Сведения о размещении IIS

Приложение, которое настраивает и инициализирует обработчик WINRM SOAP в СЛУЖБАх IIS, будет получать запросы непосредственно от клиента WinRM на другом компьютере по протоколу WS-Management. Приложение также должно настроить конечную точку HTTP, которая идентифицирует приложение, чтобы убедиться, что все запросы направляются непосредственно в подключаемые модули приложения. Приложение также должно настроить подключаемые модули для загрузки на узел IIS, а также необходимые механизмы авторизации и проверки подлинности. При использовании службы WinRM в IIS следует учитывать следующие факторы:

  • Службы IIS не поддерживают проверку подлинности Kerberos по умолчанию. Однако можно создать модуль IIS для поддержки проверки подлинности Kerberos.
  • Служба IIS не будет принимать зашифрованные запросы службы WinRM по протоколу HTTP.
  • После настройки конечной точки IIS первый запрос, отправляемый с неявными учетными данными, завершится ошибкой; однако все последующие запросы будут успешно выполнены. Это известная проблема с сайтом IIS, настроенным с проверкой подлинности в режиме ядра по умолчанию. Если эта проблема блокируется, рекомендуется отключить проверку подлинности в режиме ядра.

Модель конфигурации узла IIS

Все приложения, в которых размещается обработчик ПРОТОКОЛА SOAP WinRM в IIS, требуют настройки, прежде чем они будут работать.

Каждая конфигурация приложения отличается от конфигурации других приложений. Необходимы следующие наборы конфигураций, хотя, возможно, не все конфигурации нужно изменять, и они выполняются с помощью службы main WinRM:

  • Общая конфигурация приложения, включая время ожидания операций.
  • Подключаемый модуль авторизации для авторизации запросов LiveID или сопоставления учетной записи пользователя Windows с более универсальной учетной записью службы.
  • Подключаемые модули операций, которые размещаются и используются обработчиком SOAP WinRM для выполнения фактических запросов.

В службах IIS может потребоваться настроить следующие конфигурации:

  • Сведения о конечной точке прослушивателя, определяющие, какие порты и адреса прослушивают запросы, а также все ssl-сертификаты.
  • Сопоставление сертификатов клиента для сопоставления сертификатов клиента с учетными записями пользователей.
  • Настройка авторизации для ограничения доступа пользователей к виртуальному сайту.

По умолчанию служба WinRM регистрирует порт 5985 с префиксом wsman. Если прослушиватель HTTP совместимости включен, служба WinRM по умолчанию регистрирует порт 80 с префиксом "wsman". Так как службы IIS также прослушивают порт 80 по умолчанию, рекомендуется, чтобы службы узлов IIS создавали прослушиватели на другом порту.

Если и IIS, и служба WinRM совместно используют порт 80, для совместного использования порта требуется следующая конфигурация:

  • Службе узла IIS необходимо включить WinRM в приложении под сайтом.
  • Имя приложения необходимо добавить в универсальный код ресурса (URI). Пример: https://servername/myapplication.

Каждое ведущее приложение IIS хранится в конфигурации IIS в виде файла web.config, размещенного в физическом каталоге, соответствующем настроенном виртуальному каталогу. В следующем разделе описывается, как работает система конфигурации IIS и как ее можно расширить для поддержки конфигурации узла IIS WinRM.

Принцип работы конфигурации IIS

Инфраструктура конфигурации IIS состоит из набора XML-файлов, используемых для хранения данных конфигурации, и набора файлов схемы, используемых для проверки данных, записываемых или считываемых через API администрирования IIS. На корневом уровне файл ApplicationHost.config находится в том же каталоге, что и службы IIS (как правило, %windir%\System32\InetSrv\Config). Это файл конфигурации main для IIS, в котором хранятся список сайтов, приложений, виртуальных каталогов, общих параметров, ведения журнала, кэширования и т. д. Данные конфигурации делятся на независимые сущности, называемые разделами, и к ней обращаются.

Например, существуют отдельные разделы для сайтов, ведения журнала, кэширования и т. д. Все данные конфигурации, содержащиеся в ApplicationHost.config, применяются ко всем сайтам, приложениям и виртуальным каталогам, настроенным в iis. На уровне виртуального каталога файл web.config определяет данные конфигурации конкретного приложения, возможно, путем переопределения других данных, уже определенных в ApplicationHost.config. Web.config файлы хранятся в корневом каталоге (физическом каталоге), соответствующем сайту, приложению или виртуальному каталогу, к которому применяется конфигурация.

Дополнительные сведения о конфигурации IIS см. в следующих статьях:

Схема конфигурации IIS, используемая для проверки данных конфигурации IIS, представляет собой XML-файлы, хранящиеся в каталоге схемы IIS (как правило, %windir%\System32\InetSrv\Config\Schema). Схема конфигурации IIS не является XSD. Конфигурация IIS поддерживает расширяемость. Новые разделы конфигурации можно интегрировать непосредственно в систему конфигурации IIS, а параметры системы конфигурации IIS можно управлять с помощью существующих API администрирования.

Ниже приведены main этапы.

  • Определите новый раздел конфигурации в xml-файле схемы.
  • Поместите файл в каталог схемы IIS 7 (%windir%\System32\InetSrv\Config\Schema).
  • Зарегистрируйте новый раздел в файле глобальной конфигурации IIS (ApplicationHost.config).

Настройка и сведения о конфигурации узла IIS (WinRM)

В этом разделе описываются действия, которые необходимо выполнить во время установки для интеграции и инициализации конфигурации узла IIS. Здесь конфигурация узла IIS относится к данным конфигурации, необходимым для запуска службы WinRM в IIS. Модуль расширения WinRM IIS является необязательным компонентом, который устанавливается с помощью диспетчер сервера.

Раздел конфигурации IIS, определяющий требуемую конфигурацию, называется system.management.wsmanagement.config. Как правило, конфигурация узла IIS определяется во время установки. Это можно сделать, создав файл web.config и добавив соответствующий XML-код. Любые изменения в файле web.config требуют перезапуска сайта, на котором размещена служба WinRM.

В следующей процедуре подробно описывается настройка расширения WinRM IIS.

Установка расширения IIS WinRM

  1. В разделе Сводка по функциямдиспетчер сервера щелкните Добавить компоненты.
  2. В мастере добавления компонентов выберите Расширение WINRM IIS.
  3. Следуйте инструкциям мастера, включая установку необходимого программного обеспечения, если оно указано. Дополнительные сведения об использовании мастера добавления компонентов см. в справке по диспетчер сервера в Интернете.

Инициализация конфигурации WinRM для размещенного приложения

Этот шаг включает определение XML-кода конфигурации узла IIS в файле web.config. Этот файл находится в физическом каталоге, соответствующем виртуальному каталогу, в котором настроено размещенное приложение. XML-содержимое раздела system.management.wsmanagement.config должно соответствовать схеме, определенной в wsmanconfig_schema.xml; В противном случае API администрирования IIS не смогут обработать его. Ниже приведен пример XML-содержимого, которое может содержаться в файле web.config:

XML
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
  <system.management.wsmanagement.config>
   <OperationsConfiguration MaxEnvelopeSizeKB="150" 
                            MaxOperationTimeoutSeconds="60"  
                            MaxEnumerateIdleTimeoutSeconds="60"  
                            MaxSubscribeIdleTimeoutSeconds="60"  
                            MaxShellIdleTimeoutMinutes="15"
                            QuotaRefreshIntervalSeconds="900"
                            QuotaSystemWindowSeconds="2"
                            QuotaSystemWindowOperations-"1000"/>
    <PluginModules>
     <AuthorizationPlugin Name="Auth1" Filename="Auth.dll" SDKVersion="1" SupportsQuota="true"/>
     <OperationsPlugins>
      <Plugin Name="PL1" Filename="PL1.dll" SDKVersion="1" XmlRenderingType="text">
       <InitializationParameters>
        <Param name="myParam1" value="myValue1"/>
       </InitializationParameters>
       <Resources>
        <Resource ResourceUri="myUri1">
        <Capability Type="Shell"/>
        </Resource>
       </Resources>
      </Plugin>
      <Plugin Name="PL2" Filename="PL2.dll" SDKVersion="1" XmlRenderingType="text">
       <InitializationParameters/>
       <Resources>
        <Resource ResourceUri="myUri1">
         <Capability Type="Get"/>
         <Capability Type="Put"/>
         <Capability Type="Delete"/>
        </Resource>
       </Resources>
      </Plugin>
     </OperationsPlugins>
    </PluginModules>
   </OperationsConfiguration>
  </system.management.wsmanagement.config>
 </system.webServer>
</configuration>

В следующем списке более подробно описаны XML-элементы, за которым следует пример файла wsmanconfig_schema.xml.

Элемент Описание
OperationsConfiguration/MaxEnvelopeSizeKB Максимальный размер пакетов SOAP, обрабатываемых службой WinRM. Значение по умолчанию — 150 КБ.
OperationsConfiguration/MaxOperationTimeoutSeconds Максимальный интервал времени ожидания для всех операций. Это значение переопределяет любое значение, полученное в пакете SOAP. Если поставщик превышает это значение, клиенту отправляется время ожидания, и операция будет отменена. (Некоторые операции, такие как перечисления, могут держать перечисление открытым после истечения времени ожидания.) Значение по умолчанию — 60 секунд.
OperationsConfiguration/MaxEnumerationIdleTimeoutSeconds Максимальный интервал времени ожидания для перечислений. Если время между запросами перечисления больше этого значения, перечисление отменяется, а ранее выданный контекст перечисления становится недействительным. Значение по умолчанию ― 60 секунд.
OperationsConfiguration/MaxSubscribeIdleTimeoutSeconds Максимальный интервал времени ожидания для операций подписки. Значение по умолчанию ― 60 секунд.
OperationsConfiguration/MaxShellIdleTimeoutMinutes Максимальное время в минутах до удаления неактивной удаленной оболочки. Значение по умолчанию — 15 минут.
OperationsConfiguration/QuotaRefreshIntervalSeconds Интервал перед обновлением сведений о квоте для пользователя. Ожидающие запросы для указанного пользователя продолжают выполняться в предыдущем контексте авторизации и квоты до завершения обновления. Значение по умолчанию — 900 секунд.
OperationsConfiguration/QuotaSystemWindowSeconds Продолжительность скользящего окна регулирования системы. Значение по умолчанию — 2 секунды.
OperationsConfiguration/QuotaSystemWindowOperations Количество операций, допускаемых с помощью регулирования системы в скользящем окне. Значение по умолчанию — 1000 операций.
PlugInModules/AuthorizationPlugin Этот узел является необязательным. Подключаемый модуль авторизации позволяет программным способом принимать или отклонять входящего пользователя на основе различных схем проверки подлинности.
PlugInModules/AuthorizationPlugin/Name Указывает отображаемое имя, используемое для подключаемого модуля. Если из подключаемого модуля возвращается ошибка, это имя будет помещено в XML-код ошибки, возвращаемый клиентскому приложению. Это имя может быть на любом языке.
PlugInModules/AuthorizationPlugin/Filename Указывает имя файла подключаемого модуля авторизации. Все переменные среды, помещенные в эту запись, будут развернуты на основе удостоверения, в котором выполняется узел IIS, например сетевая служба. Значение по умолчанию для этой записи пустое, что означает, что подключаемый модуль авторизации не используется.
PlugInModules/AuthorizationPlugin/SDKVersion Указывает версию пакета средств разработки программного обеспечения (SDK), для которого был написан конкретный подключаемый модуль. Этот элемент должен иметь значение 1.
PlugInModules/AuthorizationPlugin/SupportsQuota Указывает, поддерживает ли подключаемый модуль авторизации квоты.
PlugInModules/OperationsPlugins/Name Указывает отображаемое имя, используемое для подключаемого модуля. Если из подключаемого модуля возвращается ошибка, это имя будет помещено в XML-код ошибки, возвращаемый клиентскому приложению. Это имя может быть на любом языке.
PlugInModules/OperationsPlugins/FileName Указывает имя файла подключаемого модуля операции. Все переменные среды, помещенные в эту запись, будут развернуты в контексте пользователя при поступлении запроса. У каждого пользователя может быть другая версия одной и той же переменной среды, поэтому у каждого пользователя может быть отдельный подключаемый модуль. Эта запись не может быть пустой и должна указывать на допустимый подключаемый модуль.
PlugInModules/OperationsPlugins/SDKVersion Указывает версию пакета SDK, для которого был написан конкретный подключаемый модуль. Этот элемент должен иметь значение 1.
PlugInModules/OperationsPlugins/XmlRenderingType Настраивает формат, в котором XML передается в подключаемые модули через объект WSMAN_DATA . XmlRenderingType имеет значение text. Входящие XML-данные содержатся в структуре WSMAN_DATA_TYPE_TEXT, которая представляет XML в виде буфера памяти PCWSTR .
PlugInModules/OperationsPlugins/InitializationParameters Этот узел является необязательным и позволяет подключаемым модулям настраивать дополнительный XML-код, который будет передаваться в метод WSManPluginStartup . Большинству подключаемых модулей эта дополнительная информация не требуется, но если подключаемый модуль необходимо использовать в нескольких сценариях, требующих разной семантики времени выполнения, этот XML-код предоставит подключаемым модулям гибкость.
PlugInModules/OperationsPlugins/Resources Указывает список URI ресурсов , поддерживаемых этим подключаемым модулем. Необходимо указать хотя бы одну запись ResourceUri ; в противном случае XML-код будет отклонен.
PlugInModules/OperationsPlugins/Resources/Resource Представляет конфигурацию URI одного ресурса .
PlugInModules/OperationsPlugins/Resources/Resource/ResourceUri Указывает полный или частичный URI ресурса на основе атрибута ExactMatch . Если exactMatch отсутствует, по умолчанию используется значение False. Это означает, что обработчик SOAP WinRM выполнит частичное совпадение с начальным универсальным кодом ресурса (URI ) и при наличии совпадения передаст его в подключаемый модуль. Атрибут SupportsOptions можно указать, если для этого URI ресурса разрешено передавать любые параметры. По умолчанию параметры не поддерживаются, и если они присутствуют в клиентском запросе, будет возвращена ошибка. Если параметры поддерживаются подключаемым модулем, важно, чтобы подключаемый модуль возвращал правильную ошибку при наличии параметра, который подключаемый модуль не понимает, когда флаг mustUnderstand имеет значение TRUE.
PlugInModules/OperationsPlugins/Resource/Capability Указывает возможность, доступную по этому URI ресурса. Для каждого типа операции, которую она поддерживает, будет одна запись. Доступны следующие варианты:
Получить
Операции получения поддерживаются в URI ресурса. Атрибут SupportFragment используется, если операция получения поддерживает концепцию . Атрибут SupportFiltering недопустим и должен иметь значение False. Эта возможность недопустима для URI ресурса , если также поддерживаются операции оболочки.
Положить
Операции Put поддерживаются в URI ресурса. Атрибут SupportFragment используется, если операция put поддерживает концепцию . Атрибут SupportFiltering недопустим и должен иметь значение False. Эта возможность недопустима для URI ресурса , если также поддерживаются операции оболочки.
Создать
Операции создания поддерживаются в URI ресурса. Атрибут SupportFragment используется, если операция создания поддерживает концепцию . Атрибут SupportFiltering недопустим и должен иметь значение False. Эта возможность недопустима для URI ресурса , если также поддерживаются операции оболочки.
Удалить
Операции удаления поддерживаются в URI ресурса. Атрибут SupportFragment используется, если операция удаления поддерживает концепцию . Атрибут SupportFiltering недопустим и должен иметь значение False. Эта возможность недопустима для URI ресурса , если также поддерживаются операции оболочки.
Вызова
Операции вызова поддерживаются в URI ресурса. Атрибут SupportFragment не поддерживается для операций вызова и должен иметь значение False. Атрибут SupportFiltering недопустим и должен иметь значение False. Эта возможность недопустима для URI ресурса , если также поддерживаются операции оболочки.
Перечисления
Операции перечисления поддерживаются в URI ресурса. Атрибут SupportFragment не поддерживается для операций перечисления и должен иметь значение False. Атрибут SupportFiltering является допустимым , и если подключаемый модуль поддерживает фильтрацию, этот атрибут должен иметь значение True. Эта возможность недопустима для URI ресурса , если также поддерживаются операции оболочки.
Подписаться
Операции подписки поддерживаются в URI ресурса. Атрибут SupportFragment не поддерживается для операций подписки и должен иметь значение False. Атрибут SupportFiltering недопустим и должен иметь значение False. Эта возможность недопустима для URI ресурса , если также поддерживаются операции оболочки.
Оболочки
Операции оболочки поддерживаются в URI ресурса. Атрибут SupportFragment не поддерживается для операций оболочки и должен иметь значение False. Атрибут SupportFiltering недопустим и должен иметь значение False. Эта возможность недопустима для URI ресурса , если также поддерживается любая другая возможность операций. Если возможность операции оболочки настроена для URI ресурса, операции get, put, create, delete, invoke и enumerate обрабатываются внутри службы WinRM для управления оболочками. В результате подключаемый модуль не может работать с самими операциями.

Пример файла wsmanconfig_schema.xml

Во время настройки XML-файл с именем wsmanconfig_schema.xml, содержащий следующее содержимое, удаляется в каталог схемы IIS:

XML
<configSchema>
 <sectionSchema name="system.webServer/system.management.wsmanagement.config">
  <element name="OperationsConfiguration">
   <attribute name="MaxEnvelopeSizeKB" 
              type="uint" 
              defaultValue="150" 
              validationType="integerRange" 
              validationParameter="32,4294967295"/>
   <attribute name="MaxOperationTimeoutSeconds" 
              type="uint" 
              defaultValue="60" 
              validationType="integerRange" 
              validationParameter="1,4294967295"/>
   <attribute name="MaxEnumerateIdleTimeoutSeconds" 
              type="uint" 
              defaultValue="60" 
              validationType="integerRange" 
              validationParameter="1,4294967295"/>
   <attribute name="MaxSubscribeIdleTimeoutSeconds" 
              type="uint" 
              defaultValue="60" 
              validationType="integerRange" 
              validationParameter="1,4294967295"/>
   <attribute name="MaxShellIdleTimeoutMinutes" 
              type="uint" 
              defaultValue="15" 
              validationType="integerRange" 
              validationParameter="0,4294967295"/>
   <attribute name="QuotaRefreshIntervalSeconds" 
              type="uint" 
              defaultValue="900" 
              validationType="integerRange" 
              validationParameter="0,4294967295"/>
   <attribute name="QuotaSystemWindowSeconds" 
              type="uint" 
              defaultValue="2" 
              validationType="integerRange" 
              validationParameter="0,4294967295"/>
   <attribute name="QuotaSystemWindowOperations" 
              type="uint" 
              defaultValue="1000" 
              validationType="integerRange" 
              validationParameter="0,4294967295"/>
  </element>
  <element name="PluginModules">
   <collection addElement="AuthorizationPlugin">
    <attribute name="Name" type="string" isUniqueKey="true" required="true" validationType="nonEmptyString"/>
    <attribute name="Filename" type="string" required="true" validationType="nonEmptyString"/>
    <attribute name="SDKVersion" type="uint" required="true"/>
    <attribute name="SupportsQuota" type="bool" defaultValue="false"/>
   </collection>
   <element name="OperationsPlugins">
    <collection addElement="Plugin">
     <attribute name="Name" type="string" isUniqueKey="true" required="true" validationType="nonEmptyString"/>
     <attribute name="Filename" type="string" required="true" validationType="nonEmptyString"/>
     <attribute name="SDKVersion" type="uint" required="true"/>
     <attribute name="XmlRenderingType" type="enum" defaultValue="text">
      <enum name="text" value="1"/>
      <enum name="XmlReader" value="2"/>
     </attribute>
     <attribute name="Enabled" type="bool" defaultValue="true"/>
     <element name="InitializationParameters">
      <collection addElement="Param">
       <attribute name="Name" type="string" isUniqueKey="true" required="true" validationType="nonEmptyString"/>
       <attribute name="Value" type="string" required="true" validationType="nonEmptyString"/>
      </collection>
     </element>
     <element name="Resources">
      <collection addElement="Resource">
       <attribute name="ResourceUri" type="string" isUniqueKey="true" required="true" validationType="nonEmptyString"/>
       <attribute name="SupportsOptions" type="bool" defaultValue="false"/>
       <attribute name="ExactMatch" type="bool" defaultValue="false"/>
       <collection addElement="Capability">
        <attribute name="Type" type="enum" isUniqueKey="true" required="true">
         <enum name="Get" value="1"/>
         <enum name="Put" value="2"/>
         <enum name="Create" value="3"/>
         <enum name="Delete" value="4"/>
         <enum name="Invoke" value="5"/>
         <enum name="Enumerate" value="6"/>
         <enum name="Subscribe" value="7"/>
         <enum name="Shell" value="8"/>
        </attribute>
        <attribute name="SupportsFragment" type="bool" default="false"/>
        <attribute name="SupportsFiltering" type="bool" default="false"/>
       </collection>
      </collection>
     </element>
    </collection>
   </element>
  </element>
 </sectionSchema>
</configSchema>

Чтение конфигурации узла IIS

Конфигурация узла IIS считывается во время запуска процессора SOAP в размещенном приложении. Так как web.config файлы можно редактировать вручную и, следовательно, подвержены ошибкам проверки схемы, при чтении конфигурации могут возникнуть проблемы. При сбое чтения или проверки конфигурации размещенное приложение не запустится и вернет клиенту соответствующее сообщение об ошибке. Событие будет зарегистрировано с подробным описанием причины сбоя.

Ниже перечислены распространенные сбои.

  • доступ запрещен
  • Недопустимый XML-код конфигурации
  • Подключаемый модуль не настроен (по крайней мере один из них не требуется)

Стандартные подключаемые модули не настроены по умолчанию. Они должны быть явно настроены в файле web.config, прежде чем они начнут получать запросы.

Перечисление подключаемых модулей в службе WinRM

Следующая команда демонстрирует использование служебной программы winrm для определения подключаемых модулей, доступных в службе WinRM: winrm enumerate winrm/config/plugin -format:pretty.