Объявленный доступ к ресурсам конфигурации
Доступ к ресурсам, объявленным Windows (WinDC), используется для управления конфигурациями устройств и применения политик, чтобы устройства оставались в нужном состоянии. Это имеет решающее значение для обеспечения безопасности, соответствия требованиям и операционной эффективности в организациях. Облачная служба WinDC используется для отправки требуемого состояния ресурса на устройство, где устройство несет ответственность за принудительное применение и поддержание состояния конфигурации ресурса.
Поставщики служб конфигурации играют важную роль в настройке доступа к ресурсам и выступают в качестве интерфейса между устройством и протоколом WinDC. Они обеспечивают согласованный и стандартизированный подход к развертыванию и применению конфигураций. Поставщики служб конфигурации поддерживают различные сценарии доступа к ресурсам, в том числе:
- VPNv2 CSP и VPN CSP
- Wi-Fi CSP
- Поставщик служб конфигурации ClientCertificateInstall
- Поставщик служб конфигурации ActiveSync
- Поставщик служб конфигурации WiredNetwork
- RootCACertificates CSP
Стек WinDC на устройстве обрабатывает запросы конфигурации и поддерживает требуемое состояние, которое является ключом к ra. Эффективность, точность и принудительное применение запросов конфигурации имеют решающее значение для эффективной проверки доступности. Доступ к ресурсам легко интегрируется с WinDC, предоставляя расширенный метод управления устройствами через облако с повышенной масштабируемостью и эффективностью.
- Эффективность. Пакетная обработка сводит к минимуму использование ресурсов сервера и сокращает задержку.
- Точность. Стек клиента WinDC понимает область конфигурации устройства, обеспечивая эффективную обработку непрерывных обновлений. Это обеспечивает точное выполнение изменений конфигурации, сообщаемых облачной службой.
- Принудительное применение политик. Применяйте и поддерживайте политики организации на устройствах согласованно и в большом масштабе, обеспечивая соответствие требованиям и единую конфигурацию. Этот аспект позволяет организациям поддерживать требуемое состояние безопасности на разных устройствах.
Рекомендации по доступу к ресурсам
Эти рекомендации предоставляют рекомендации и примеры для разработчиков и тестировщиков по реализации конфигураций доступа к ресурсам (RA) безопасным, эффективным и согласованным образом. Они направлены на повышение безопасности сети и оптимизацию доступа к ресурсам для конечных пользователей при соблюдении политик и требований к соответствию.
- Целостность конфигурации. Чтобы обеспечить непрерывный и безопасный доступ к ресурсам, обеспечьте согласованность конфигураций между устройствами и пользователями.
- Проверка состояния. Отслеживайте состояние конфигураций, чтобы проверить правильность применения параметров доступа к ресурсам.
- Управление профилями. Эффективное управление профилями пользователей путем добавления, обновления и удаления по мере необходимости для управления доступом к ресурсам и обеспечения безопасности.
- Журналы и аудит. Используйте журналы и журналы аудита для операций и изменений для устранения неполадок и соответствия требованиям.
- Обнаружение и исправление смещения. Чтобы обеспечить соответствие политикам RA, постоянно отслеживайте смещение (изменения в конфигурации или поведении) и принимайте меры по исправлению.
- Безопасность и конфиденциальность. Чтобы защитить данные и ресурсы пользователей, реализуйте строгие меры безопасности и конфиденциальности в конфигурациях.
Следуя этим рекомендациям и поняв синтаксис поставщика CSP DeclaredConfiguration, вы можете эффективно реализовывать конфигурации RA и управлять ими, сохраняя безопасность и соответствие требованиям.
Документ WinDC
Значение конечного Document
узла в поставщике CSP DeclaredConfiguration представляет собой XML-документ, описывающий запрос. Ниже приведен пример документа WinDC с данными конфигурации, указанными для доступа к ресурсам.
<DeclaredConfiguration context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A0">
<CSP name="./Vendor/MSFT/VPNv2">
<URI path="Test_SonicWall/TrafficFilterList/0/Protocol" type="int">2</URI>
<URI path="Test_SonicWall/TrafficFilterList/0/Direction" type="chr">outbound</URI>
</CSP>
</DeclaredConfiguration>
Можно использовать только поддерживаемые значения для osdefinedscenario
. Неподдерживаемые значения приводят к появляется сообщение об ошибке, похожее на Invalid scenario name
.
osdefinedscenario | Рекомендуется использовать с |
---|---|
MSFTWiredNetwork | WiredNetwork |
MSFTResource | ActiveSync |
MSFTVPN | VPN и VPNv2 |
MSFTWifi | Wifi |
MSFTInventory | Инвентаризация сертификатов |
MSFTClientCertificateInstall | SCEP, PFX, массовые данные шаблона |
Для этих osdefinedscenario
значений требуются следующие теги и атрибуты.
Xml-тег
<CSP>
описывает целевой поставщик служб CSP.Этот тег имеет следующие атрибуты:
Атрибут Описание name
Указывает целевой OMA-URI CSP. <URI>
XML-тег указывает узел параметра CSP вместе с нужным значением.Этот тег имеет следующие атрибуты:
Атрибут Описание path
Путь к параметру type
Настройка типа данных
Примечание.
Целевой объект параметров сценария должен соответствовать контексту WinDC.
Для область CSP, определенных в <LocURI>
и в контексте WinDC, должно быть Device
или User
.
Примеры osdefinedscenario
Частичный
MSFTWifi
пример для Wi-Fi:<DeclaredConfiguration context="Device" schema="1.0" id="10249228-e719-58bf-b459-060de45240f1" osdefinedscenario="MSFTWifi" checksum="11111111"> <CSP name="./Vendor/MSFT/WiFi">
Частичный
MSFTResource
пример для ActiveSync:<DeclaredConfiguration context="User" schema="1.0" id="33333333-1861-4131-96e8-44444444" osdefinedscenario="MSFTResource" checksum="5555"> <CSP name="./Vendor/MSFT/ActiveSync">
Примеры SyncML
Стандартный синтаксис OMA-DM SyncML используется для указания операций CSP DeclaredConfiguration, таких как Replace, Add и Delete. Полезные данные элемента SyncML <Data>
должны быть в кодировке XML. Для этой кодирования XML существуют различные сетевые кодировщики, которые можно использовать. Чтобы избежать кодирования полезных данных, можно использовать раздел CDATA , как показано в следующих примерах SyncML.
Настройка профиля VPNv2 для доступа к ресурсам
В этом примере показано, как использовать VPNv2 CSP для настройки профиля VPN с именем Test_SonicWall на устройстве в область пользователя.
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Documents/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
<Data><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<DeclaredConfiguration context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A0">
<CSP name="./Vendor/MSFT/VPNv2">
<URI path="Test_SonicWall/TrafficFilterList/0/Protocol" type="int">2</URI>
<URI path="Test_SonicWall/TrafficFilterList/0/Direction" type="chr">outbound</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/Protocol" type="int">6</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/LocalPortRanges" type="chr">43-54</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/RemotePortRanges" type="chr">243-456</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/Direction" type="chr">outbound</URI>
<URI path="Test_SonicWall/EdpModeId" type="chr">wip.contoso.com</URI>
<URI path="Test_SonicWall/RememberCredentials" type="bool">true</URI>
<URI path="Test_SonicWall/AlwaysOn" type="bool">true</URI>
<URI path="Test_SonicWall/Proxy/AutoConfigUrl" type="chr">https://auto.proxy.com</URI>
<URI path="Test_SonicWall/DeviceCompliance/Enabled" type="bool">true</URI>
<URI path="Test_SonicWall/DeviceCompliance/Sso/Enabled" type="bool">false</URI>
<URI path="Test_SonicWall/PluginProfile/ServerUrlList" type="chr">23.54.3.6;server1,vpn.contoso.com;server2</URI>
<URI path="Test_SonicWall/PluginProfile/CustomConfiguration" type="chr"><custom></custom></URI>
<URI path="Test_SonicWall/PluginProfile/PluginPackageFamilyName" type="chr">SonicWALL.MobileConnect_e5kpm93dbe93j</URI>
</CSP>
</DeclaredConfiguration>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
Обновление профиля VPNv2 для доступа к ресурсам
В этом примере показано, как использовать тот же идентификатор документа WinDC, но с новой контрольной суммой ("A3"). Он устанавливает новый профиль VPNv2 с именем Test_SonicwallNew
и удаляет старый профиль.
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Documents/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
<Data><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<DeclaredConfiguration context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A3">
<CSP name="./Vendor/MSFT/VPNv2">
<URI path="Test_SonicWallNew/TrafficFilterList/0/Protocol" type="int">2</URI>
<URI path="Test_SonicWallNew/TrafficFilterList/0/Direction" type="chr">outbound</URI>
<URI path="Test_SonicWallNew/EdpModeId" type="chr">wip.contoso.com</URI>
<URI path="Test_SonicWallNew/RememberCredentials" type="bool">true</URI>
<URI path="Test_SonicWallNew/AlwaysOn" type="bool">false</URI>
<URI path="Test_SonicWallNew/Proxy/AutoConfigUrl" type="chr">https://auto.proxy.com</URI>
<URI path="Test_SonicWallNew/DeviceCompliance/Enabled" type="bool">true</URI>
<URI path="Test_SonicWallNew/DeviceCompliance/Sso/Enabled" type="bool">false</URI>
<URI path="Test_SonicWallNew/PluginProfile/ServerUrlList" type="chr">23.54.3.8;server1,vpn2.contoso.com;server2</URI>
<URI path="Test_SonicWallNew/PluginProfile/PluginPackageFamilyName" type="chr">SonicWALL.MobileConnect_e5kpm93dbe93j</URI>
</CSP>
</DeclaredConfiguration>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
Получение профиля VPNv2
В этом примере показано, как использовать <Get>
для получения результатов запроса WinDC.
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Get>
<CmdID>1</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Results/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
</Item>
</Get>
<Final />
</SyncBody>
</SyncML>
Ответ:
<SyncML xmlns:msft="http://schemas.microsoft.com/MobileDevice/MDM">
<SyncHdr />
<SyncBody>
<Status>
<CmdID>1</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>0</CmdRef>
<Cmd>SyncHdr</Cmd>
<Data>200</Data>
</Status>
<Status>
<CmdID>2</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Cmd>Get</Cmd>
<Data>200</Data>
</Status>
<Results>
<CmdID>3</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Item>
<Source>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Results/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Source>
<Data><DeclaredConfigurationResult context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A3" result_checksum="9D2ED497C12D2FCEE1C45158D1F7ED8E2DACE210A0B8197A305417882991C978" result_timestamp="2024-08-06T13:54:38Z" operation="Set" state="60"><CSP name="./Vendor/MSFT/VPNv2" state="60"><URI path="Test_SonicWallNew/TrafficFilterList/0/Protocol" status="200" state="60" type="int" /><URI path="Test_SonicWallNew/TrafficFilterList/0/Direction" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/EdpModeId" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/RememberCredentials" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/AlwaysOn" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/Proxy/AutoConfigUrl" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/DeviceCompliance/Enabled" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/DeviceCompliance/Sso/Enabled" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/PluginProfile/ServerUrlList" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/PluginProfile/PluginPackageFamilyName" status="200" state="60" type="chr" /></CSP></DeclaredConfigurationResult></Data>
</Item>
</Results>
<Final />
</SyncBody>
</SyncML>
Совет
Сведения о значениях состояний см. в разделе Состояния WinDC.
Удаление профиля VPNv2
В этом примере показано, как удалить <Delete>
запрос конфигурации для настройки профиля VPNv2.
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Delete>
<CmdID>1</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Documents/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
</Item>
</Delete>
<Final />
</SyncBody>
</SyncML>
Владение ресурсами
Управляемые MDM ресурсы, такие как профиль VPN, передаются или переносятся в управление WinDC, когда документ WinDC отправляется на устройство для того же ресурса. Этот ресурс остается под управлением WinDC до тех пор, пока документ WinDC не будет удален или оставлен. В противном случае, когда MDM пытается управлять тем же ресурсом через устаревший канал MDM с помощью SyncML, происходит сбой с ошибкой 0x86000031.
MDM ConfigurationManager: Command failure status. Configuraton Source ID: (29c383c5-6e2d-43bf-a741-c63cb7516bb4), Enrollment Type: (MDMDeviceWithAAD), CSP Name: (ActiveSync), Command Type: (Add: from Replace or Add), CSP URI: (./User/Vendor/MSFT/ActiveSync/Accounts/{3b8b9d4d-a24e-4c6d-a460-034d0bfb9316}), Result: (Unknown Win32 Error code: 0x86000031).
Массовые данные шаблона
Сценарий массовых шаблонов данных выходит за рамки обычного поставщика CSP ClientCertificateInstall. В нем используется специальный тип документа массового шаблона. В этом разделе рассматриваются структура, спецификация и результаты использования данных массового шаблона.
Документ шаблона
Документ шаблона PFXImport содержит структуру, необходимую для массового импорта сертификатов. В документе должны быть определены необходимые поля и формат, необходимый для массового импорта.
- Тип документа должен иметь значение
BulkTemplate
. - Путь URI отличается от обычных URI с помощью синтаксиса
@#pfxThumbprint#
. Он объявляет, что это динамический узел. Данные экземпляров для динамических узлов отправляются позже с помощьюBulkVariables
. Каждый динамический узел может содержать динамические подноды, такие как@#pfxBlob#
узлы и#@pfxPassword#
в этом примере.
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Documents/47e88660-1861-4131-96e8-f32e85011e55/Document</LocURI>
</Target>
<Data><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<DeclaredConfiguration context="Device" schema="1.0" id="47e88660-1861-4131-96e8-f32e85011e55" osdefinedscenario="MSFTResource" checksum="FF356C2C71F6A41F9AB4A601AD00C8B5BC7531576233010B13A221A9FE1BE7A0">
<ReflectedProperties>
<Property name="foo" type="chr">foovalue</Property>
<Property name="bar" type="chr">barvalue</Property>
</ReflectedProperties>
<CSP name="./Vendor/MSFT/ClientCertificateInstall">
<URI path="PFXCertInstall/@#pfxThumbprint#/KeyLocation" type="Int">2</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PFXCertBlob" type="chr">@#pfxBlob#</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PFXCertPassword" type="chr">@#pfxPassword#</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PFXKeyExportable" type="bool">True</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PfxCertPasswordEncryptionType" type="int">0</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PfxCertPasswordEncryptionStore" type="chr">SomeValue</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/ContainerName" type="chr"></URI>
</CSP>
</DeclaredConfiguration>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
Данные шаблона
Данные массового шаблона указывают сертификаты, импортируемые в формате base64 с помощью BulkVariables
URI в .BulkTemplate
Документ данных шаблона может содержать несколько экземпляров. Каждый экземпляр должен указывать все данные подстановки.
В этом примере есть два экземпляра. Каждый экземпляр определяет значения для pfxThumbprint, **pfxBlob и pfxPassword.
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>3</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Documents/47e88660-1861-4131-96e8-f32e85011e55/BulkVariables/Value</LocURI>
</Target>
<Data><![CDATA[
<InstanceBlob schema="1.0">
<Instance>
<InstanceData variable="pfxThumbprint">813A171D7341E1DA90D4A01878DD5328D3519006</InstanceData>
<InstanceData variable="pfxBlob">pfxbase64BlobValue1</InstanceData>
<InstanceData variable="pfxPassword">Password1</InstanceData>
</Instance>
<Instance>
<InstanceData variable="pfxThumbprint">813A171D7341E1DA90D4A01878DD5328D3519007</InstanceData>
<InstanceData variable="pfxBlob">pfxbase64BlobValue2</InstanceData>
<InstanceData variable="pfxPassword">Password2</InstanceData>
</Instance>
</InstanceBlob>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
Результаты шаблона
При успешной обработке документа данных массового шаблона указанные сертификаты импортируются в определенные хранилища с указанными паролями и расположениями ключей.
- Успешный импорт. Сертификаты правильно импортируются в хранилища сертификатов устройства.
- Обработка ошибок. Все ошибки, возникшие в процессе импорта, включают соответствующие коды состояния или сообщения для устранения неполадок.
Запрос:
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Get>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Results/47e88660-1861-4131-96e8-f32e85011e55/Document</LocURI>
</Target>
</Item>
</Get>
<Final />
</SyncBody>
</SyncML>
Ответ:
<SyncML xmlns:msft="http://schemas.microsoft.com/MobileDevice/MDM">
<SyncHdr />
<SyncBody>
<Status>
<CmdID>1</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>0</CmdRef>
<Cmd>SyncHdr</Cmd>
<Data>200</Data>
</Status>
<Status>
<CmdID>2</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Cmd>Get</Cmd>
<Data>200</Data>
</Status>
<Results>
<CmdID>3</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Item>
<Source>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Results/47e88660-1861-4131-96e8-f32e85011e55/Document</LocURI>
</Source>
<Data><DeclaredConfigurationResult context="Device" schema="1.0" id="47e88660-1861-4131-96e8-f32e85011e55" osdefinedscenario="MSFTResource" checksum="FF356C2C71F6A41F9AB4A601AD00C8B5BC7531576233010B13A221A9FE1BE7A0" result_checksum="DD8C1C422D50A410C2949BA5F495C2C42CC4B0C7B498D1B43318C503F6CEF491" result_timestamp="2024-08-06T13:26:23Z" operation="Set" state="60">
<CSP name="./Vendor/MSFT/ClientCertificateInstall" state="60">
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/KeyLocation" status="200" state="60" type="int" />
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/PFXCertBlob" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/PFXCertPassword" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/PFXKeyExportable" status="200" state="60" type="bool" />
</CSP><CSP name="./Vendor/MSFT/ClientCertificateInstall" state="60">
<URI path="PFXCertInstall/CertPFX1/KeyLocation" status="200" state="60" type="int" />
<URI path="PFXCertInstall/CertPFX1/PFXCertBlob" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/CertPFX1/PFXCertPassword" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/CertPFX1/PFXKeyExportable" status="200" state="60" type="bool" />
</CSP>
</DeclaredConfigurationResult>
</Data>
</Item>
</Results>
<Final />
</SyncBody>
</SyncML>