Acesso declarado ao recurso de configuração
O acesso a recursos de configuração declarada do Windows (WinDC) é utilizado para gerir configurações de dispositivos e impor políticas para garantir que os dispositivos permanecem no estado pretendido. É fundamental para manter a segurança, a conformidade e a eficiência operacional nas organizações. O serviço cloud WinDC é utilizado para enviar o estado pretendido de um recurso para o dispositivo, onde, correspondentemente, o dispositivo tem a responsabilidade de impor e manter o estado de configuração do recurso.
Os Fornecedores de Serviços de Configuração (CSPs) desempenham uma função vital para configurar o Acesso a recursos e atuam como uma interface entre o dispositivo e o protocolo WinDC. Fornecem uma abordagem consistente e padronizada para implementar e impor configurações. Os CSPs suportam vários cenários de acesso a recursos, incluindo:
- CSP VPNv2 e CSP de VPN
- Wi-Fi CSP
- CSP ClientCertificateInstall
- CSP ActiveSync
- CSP WiredNetwork
- RootCACertificates CSP
A pilha WinDC no dispositivo processa pedidos de configuração e mantém o estado pretendido, que é fundamental para o RA. A eficiência, a precisão e a imposição dos pedidos de configuração são fundamentais para uma RA eficaz. O acesso a recursos integra-se perfeitamente com o WinDC, fornecendo um método alargado para gerir dispositivos através da cloud com escalabilidade e eficiência melhoradas.
- Eficiência: o processamento baseado em batch minimiza a utilização de recursos do servidor e reduz a latência.
- Precisão: a pilha de cliente WinDC compreende a área de superfície de configuração do dispositivo, permitindo o processamento eficaz de atualizações contínuas. Garante a execução precisa das alterações de configuração comunicadas pelo serviço cloud.
- Imposição de Políticas: aplique e mantenha políticas organizacionais em todos os dispositivos de forma consistente e em escala, garantindo a conformidade e a configuração uniforme. Este aspeto permite que as organizações mantenham a postura de segurança pretendida entre os dispositivos.
Diretrizes de acesso a recursos
Estas diretrizes fornecem melhores práticas e exemplos para programadores e técnicos de teste implementarem configurações de acesso a recursos (RA) de forma segura, eficiente e consistente. Visam melhorar a segurança de rede e otimizar o acesso a recursos para os utilizadores finais ao mesmo tempo que cumprem as políticas e os requisitos de conformidade.
- Integridade da Configuração: para suportar um acesso de recursos ininterrupto e seguro, garanta configurações consistentes entre dispositivos e utilizadores.
- Validação de Estado: monitorize o estado das configurações para verificar a aplicação correta das definições de acesso a recursos.
- Gestão de Perfis: faça a gestão eficaz dos perfis de utilizador ao adicionar, atualizar e eliminar, conforme necessário, para controlar o acesso aos recursos e manter a segurança.
- Registo e Auditoria: utilize registos e registos de auditoria para operações e alterações para ajudar na resolução de problemas e conformidade.
- Deteção e Remediação de Desvio: para manter a conformidade com as políticas de RA, monitorize continuamente o desfasamento (alterações na configuração ou comportamento) e tome medidas corretivas.
- Segurança e Privacidade: para proteger os dados e os recursos dos utilizadores, implemente medidas de segurança e privacidade fortes nas configurações.
Ao seguir estas diretrizes e compreender a sintaxe do CSP DeclaredConfiguration, pode implementar e gerir eficazmente as configurações de RA, mantendo a segurança e a conformidade.
Documento WinDC
O valor do Document
nó de folha no CSP DeclaredConfiguration é um documento XML que descreve o pedido. Eis um documento WinDC de exemplo com os dados de configuração especificados para acesso a recursos.
<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>
Só podem ser utilizados valores suportados para osdefinedscenario
. Os valores não suportados resultam numa mensagem de erro semelhante a Invalid scenario name
.
osdefinedscenario | Utilização recomendada com |
---|---|
MSFTWiredNetwork | WiredNetwork |
MSFTResource | ActiveSync |
MSFTVPN | VPN e VPNv2 |
MSFTWifi | Wifi |
MSFTInventory | Inventário de certificados |
MSFTClientCertificateInstall | SCEP, PFX, Dados de Modelo em Massa |
Estes osdefinedscenario
valores requerem as seguintes etiquetas e atributos.
A
<CSP>
etiqueta XML descreve o CSP que está a ser visado.Esta etiqueta tem os seguintes atributos:
Atributo Descrição name
Especifica o OMA-URI de CSP de destino. A
<URI>
etiqueta XML especifica o nó de definição CSP juntamente com o valor pretendido.Esta etiqueta tem os seguintes atributos:
Atributo Descrição path
Caminho da definição type
Definir tipo de dados
Observação
O destino das definições do cenário tem de corresponder ao contexto winDC. O âmbito CSP definido no <LocURI>
contexto WinDC e tem de ser Device
ou User
.
exemplos de osdefinedscenario
Exemplo parcial
MSFTWifi
para Wi-Fi:<DeclaredConfiguration context="Device" schema="1.0" id="10249228-e719-58bf-b459-060de45240f1" osdefinedscenario="MSFTWifi" checksum="11111111"> <CSP name="./Vendor/MSFT/WiFi">
Exemplo parcial
MSFTResource
do ActiveSync:<DeclaredConfiguration context="User" schema="1.0" id="33333333-1861-4131-96e8-44444444" osdefinedscenario="MSFTResource" checksum="5555"> <CSP name="./Vendor/MSFT/ActiveSync">
Exemplos de SyncML
A sintaxe OMA-DM SyncML padrão é utilizada para especificar as operações CSP DeclaredConfiguration, tais como Substituir, Adicionar e Eliminar. O payload do elemento do <Data>
SyncML tem de ter codificação XML. Para esta codificação XML, existem vários codificadores online que pode utilizar. Para evitar codificar o payload, pode utilizar a Secção CDATA , conforme mostrado nos seguintes exemplos de SyncML.
Configurar um perfil VPNv2 para acesso a recursos
Este exemplo demonstra como utilizar o CSP VPNv2 para configurar um perfil VPN com o nome Test_SonicWall no dispositivo no âmbito utilizador .
<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>
Atualizar um perfil VPNv2 para acesso a recursos
Este exemplo demonstra como utilizar o mesmo ID de Documento WinDC, mas com uma nova soma de verificação("A3"). Instala um novo perfil VPNv2 com o nome Test_SonicwallNew
e elimina o perfil antigo.
<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>
Obter o perfil VPNv2
Este exemplo demonstra como utilizar <Get>
para obter os resultados do pedido 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>
Resposta:
<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>
Dica
Para compreender os valores de estado, veja Estados winDC.
A eliminar o perfil VPNv2
Este exemplo demonstra como utilizar <Delete>
para remover o pedido de configuração para definir o perfil 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>
Propriedade do recurso
Os recursos geridos por MDM, como um perfil VPN, são transferidos/migrados para a gestão do WinDC quando um documento WinDC é enviado para o dispositivo para o mesmo recurso. Este recurso permanece sob gestão do WinDC até que o documento WinDC seja eliminado ou abandonado. Caso contrário, quando a MDM tenta gerir o mesmo recurso através do canal MDM legado com o SyncML, falha com o erro 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).
Dados de modelos em massa
O cenário de dados do modelo em massa estende-se para além do CSP ClientCertificateInstall normal. Utiliza um tipo de documento de modelo em massa especial. Esta secção abrange a estrutura, a especificação e os resultados da utilização dos dados do modelo em massa.
Documento de modelo
Um documento de modelo PFXImport contém a estrutura necessária para importar certificados em massa. O documento deve definir os campos necessários e o formato necessário para a importação em massa.
- O tipo de documento tem de ser
BulkTemplate
. - O caminho do URI é diferente dos URIs normais ao utilizar a
@#pfxThumbprint#
sintaxe, declara que é um nó dinâmico. Os dados de instância para nós dinâmicos são enviados mais tarde comBulkVariables
. Cada nó dinâmico pode conter subnódes dinâmicos, como os@#pfxBlob#
nós e#@pfxPassword#
neste exemplo.
<?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>
Dados do modelo
Os dados do modelo em massa especificam os certificados a importar num formato codificado base64 com o BulkVariables
URI no BulkTemplate
. O documento de dados do modelo pode conter várias instâncias. Cada instância tem de especificar todos os dados de subinstância.
Neste exemplo, existem duas instâncias. Cada instância define valores para pfxThumbprint, **pfxBlob e 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>
Resultados do modelo
Quando o documento de dados do modelo em massa é processado com êxito, os certificados especificados são importados para os arquivos definidos com as palavras-passe fornecidas e as localizações das chaves.
- Importação bem-sucedida: os certificados são importados corretamente para os arquivos de certificados do dispositivo.
- Processamento de Erros: quaisquer erros encontrados durante o processo de importação incluem códigos de status relevantes ou mensagens para resolução de problemas.
Pedido:
<?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>
Resposta:
<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>